2014-04-15 5 views
3

마지막으로 배너 광고는 내 GLSurfaceview 상단에 있습니다. 그러나 화면의 전체 너비를 차지하고 게임 영역의 맨 위를 덮는 검은 색 배경으로 나타납니다 (또한 게임 영역이 아래쪽으로 약간 이동하여 바닥도 누락되어 있음을 지적해야합니다) .AdMob 배너 및 GLSurfaceview (프로그래밍 방식으로)

enter image description here

I : 내가해야 할 일은

enter image description here

화면 하단에 배너를 이동하고, 중앙을 유지하고는 다음과 같습니다 있도록이 검정색 배경을 제거하다 XML을 사용하려고 시도했지만 많은 오류가 발생하여 자바에서 완전히이 작업으로 전환했습니다. (그리고 지금까지이 작업을 처리했습니다.) 그러나 GLSurfaceView로이를 수행하는 방법에 대한 품질 정보에는 IMHO가 부족하여 누군가가 나 어디서 잘못 될지.

코드

은 여기 내에서 onCreate() 방법 :

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // Create an ad. 
     adView = new AdView(this); 
     adView.setAdSize(AdSize.BANNER); 
     adView.setAdUnitId(AD_UNIT_ID); 

     // Add the AdView to the view hierarchy. The view will have no size 
     // until the ad is loaded. 
     LinearLayout layout = new LinearLayout(this); 
     layout.setOrientation(LinearLayout.VERTICAL); 

     // Create an ad request. 
     // get test ads on a physical device. 
     AdRequest adRequest = new AdRequest.Builder() 
      .addTestDevice(TestDeviceID) 
      .build(); 

     // Start loading the ad in the background. 
     adView.loadAd(adRequest); 

     //Request full screen 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
     WindowManager.LayoutParams.FLAG_FULLSCREEN); 

     //Create a displayMetrics object to get pixel width and height 
     metrics = new DisplayMetrics(); 
     getWindowManager().getDefaultDisplay().getMetrics(metrics); 
     width = metrics.widthPixels; 
     height = metrics.heightPixels; 

     //Create and set GL view (OpenGL View) 
     myView = new MyGLSurfaceView(MainActivity.this); 
     layout.addView(adView); 
     layout.addView(myView); 


     //Create a copy of the Bundle 
     if (savedInstanceState != null){ 
      newBundle = new Bundle(savedInstanceState);   
     } 

     //Set main renderer    
     setContentView(layout); 

} 

배너 변경, 또한 '플리커'에 나타납니다,하지만 난 별도의 질문에 그 처리 할 수 ​​있습니다.

+0

깜박임 문제는 어떻습니까? 그것을 해결할 수 있었습니까? – LightYearsBehind

+0

안녕하세요 @ haike00 그러나 깜박임으로 인해 의미가 무엇인지 기억이 안납니다. 이후 MobFox SDK를 사용하고 MobFox를 통한 중재를 사용하여 MobFox와 AdMob의 광고를 모두 제공했습니다. 그러나, 배너 중 일부는 여전히 (그냥 변경하지 않을 때)하지만, 무작위로 깜박하지만 다른 애플 리케이션에서도이 동작을 보았습니다. 그래서 우리가 함께 살아야만한다고 가정합니다. 그러나 이것은 다른 것일 수 있습니다. 당신이 말한 것에 이의를 제기하십시오. 내 다음 앱의 AdMob SDK로 다시 전환하는 것에 대해 생각하고 있습니다 ...... – Zippy

+0

동일한 문제에 대해 이야기하고있는 것으로 보입니다. 배너가 임의의 시간에 깜박여 불량 수신 상태의 깨진 TV처럼 보이게 만듭니다 (일종의..). 필자는 대부분의 경우에 더 나은 것으로 판명 된 RelativeLayout의'FrameLayout insteand '를 사용해 보았으나 문제를 완전히 해결하지는 못했습니다. 아마도 네이티브 안드로이드 뷰는 오픈 GL에서 잘 작동하지 않습니다 ... – LightYearsBehind

답변

4

상위 레이아웃으로 RelativeLayout 또는 FrameLayout을 사용한 다음 이와 같이 화면 아래쪽 중앙에 위치하도록 adView 레이아웃 매개 변수를 정의하면됩니다. 해결책은 다음과 같습니다.

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // Create an ad. 
     adView = new AdView(this); 
     adView.setAdSize(AdSize.BANNER); 
     adView.setAdUnitId(AD_UNIT_ID); 
     adView.setBackgroundColor(Color.TRANSPARENT); 
     // Add the AdView to the view hierarchy. The view will have no size 
     // until the ad is loaded. 
     RelativeLayout layout = new RelativeLayout(this); 
     layout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 
     // Create an ad request. 
     // get test ads on a physical device. 
     AdRequest adRequest = new AdRequest.Builder() 
      .addTestDevice(TestDeviceID) 
      .build(); 

     // Start loading the ad in the background. 
     adView.loadAd(adRequest); 

     //Request full screen 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
     WindowManager.LayoutParams.FLAG_FULLSCREEN); 

     //Create a displayMetrics object to get pixel width and height 
     metrics = new DisplayMetrics(); 
     getWindowManager().getDefaultDisplay().getMetrics(metrics); 
     width = metrics.widthPixels; 
     height = metrics.heightPixels; 

     //Create and set GL view (OpenGL View) 
     myView = new MyGLSurfaceView(MainActivity.this); 
    RelativeLayout.LayoutParams adParams = 
       new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, 
         RelativeLayout.LayoutParams.WRAP_CONTENT); 
      adParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); 
      adParams.addRule(RelativeLayout.CENTER_HORIZONTAL); 

     layout.addView(myView); 
     layout.addView(adView, adParams); 


     //Create a copy of the Bundle 
     if (savedInstanceState != null){ 
      newBundle = new Bundle(savedInstanceState);   
     } 

     //Set main renderer    
     setContentView(layout); 

} 
+0

안녕하세요 @Nana 이것에 대해 많은 감사드립니다.위와 같이 코드를 변경하면 게임을 실행해도 게임이 광고없이 실행되는 것처럼 보입니다. 즉, 광고가 화면 하단에 있음을 확인할 수 있습니다. 일반 영역에서 임의로 터치하면 , 웹 브라우저가 열리고 GoogleAdServices 웹 사이트 :-)로 이동합니다 (layout.addView (myView)도 제거한 경우).하지만 분명히 내 게임이 표시되지 않지만, 광고가있는 빈 화면이 나타납니다. 하단 - 어떤 아이디어 ?! 감사합니다 :-) – Zippy

+0

layout.addView (myView) .. layout.add (adView, adParams) 행을 변경 했습니까? 원래 게시물에서 레이아웃에 glsurfaceview를 추가하기 전에 adview를 추가하고있었습니다. 당신은 아마도 그것을 유지함으로써 glsurfaceview가 adview를 덮도록 만들었을 것입니다. –

+2

안녕하세요. @ 나나, 예. 나는 그들을 바 꾸었습니다. 그들은 올바른 길을 가고 있습니다. 주위에 파고 조금 후 : http://www.badlogicgames.com/forum/viewtopic.php?f=15&t=12677, 여기 사람들은 (그들은 엔진을 사용하고 있지만 동일한 문제가 LIBGDX, 나는 그렇지 않다. 그러나 문제는 동일하다) 그것은 일종의 버그 인 것처럼 보인다? 어쨌든, 나는 당신의 코드에 그들의 제안을 추가했다. (adView.setBackgroundColor (Color.BLACK);) - Lo 그리고 보라, 광고가 나타난다. 이것이 왜 필요한지는 알 수 없습니다. 당신의 도움에 많은 감사드립니다. – Zippy

0

선형보기 (표면보기 및 광고보기)에 두 개의보기를 추가 할 때 두 개의보기가 분리되어 있습니다. 나는 당신이 원하는 것은 당신의 표면 위에 광고를 오버레이하는 것입니다. 이 페이지는 오래되었지만이를 수행하는 방법에 대한 예제는 http://www.curious-creature.org/2009/03/01/android-layout-tricks-3-optimize-part-1/을 확인하십시오.

+0

감사합니다 @RazApps for this, 그러나 프로그래밍 방식으로이 작업을 수행하려고하는데 XML을 전혀 사용하지 않습니다. – Zippy

+0

죄송합니다. 나는 내가 어디 있었어야했는지 구체적으로 말하지 않았다. XML은 XML의 모든 속성을 가져 와서 실제 Java 객체에 전달함으로써 프로그래밍 방식으로 변환됩니다. 따라서 채우기 부모 특성을 사용하여 FrameLayout 레이아웃을 만든 다음 레이아웃에 서페이스 뷰를 추가 한 다음 예제의 TextView와 동일한 레이아웃 특성을 가진 선형 레이아웃을 만듭니다 (레이아웃 폭 및 높이 및 중력에 대한 내용 줄 바꿈). 그런 다음 레이아웃에 광고를 추가하십시오. LinearLayout을 FrameLayout에 추가하십시오. –

+0

Nevermind. 나나가 코드 예를 들었어. 저것 봐. –