Android 使用Nexus 4中添加的admob/amazon时视图扭曲/模糊
在Nexus4中,当显示adds(admob或amazon)时,触摸屏幕添加和移动的视图会失真。如果没有显示广告,则视图没有问题。 模拟器或galaxy IV都没有任何问题 我认为这个问题可能与chrome渲染器及其egl驱动程序的使用有关,但不知道如何解决它 带有admob的测试视图代码:Android 使用Nexus 4中添加的admob/amazon时视图扭曲/模糊,android,view,admob,Android,View,Admob,在Nexus4中,当显示adds(admob或amazon)时,触摸屏幕添加和移动的视图会失真。如果没有显示广告,则视图没有问题。 模拟器或galaxy IV都没有任何问题 我认为这个问题可能与chrome渲染器及其egl驱动程序的使用有关,但不知道如何解决它 带有admob的测试视图代码: public class TestAdmob extends ViewGroup { private AdView adView; private Rect drawRect; pr
public class TestAdmob extends ViewGroup {
private AdView adView;
private Rect drawRect;
private Test1 myView;
public TestAdmob(Activity context, String adUnitId) {
super(context);
myView = new Test1(context);
drawRect = new Rect(0, 0, 400, 400);
adView = new AdView(context);
adView.setAdSize(AdSize.SMART_BANNER);
adView.setAdUnitId(adUnitId);
adView.setAdListener(new AdListener() {
public void onAdLoaded() {
Log.d("Admob", "onAdLoaded");
requestLayout();
}
public void onAdFailedToLoad(int errorCode) { Log.d("Admob", "failedToLoad " + errorCode); }
public void onAdOpened() { Log.d("Admob", "adOpened"); }
public void onAdClosed() { Log.d("Admob", "adClosed"); }
public void onAdLeftApplication() { Log.d("Admob", "adLeftApp"); }
});
AdRequest adRequest = new AdRequest.Builder()
.addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
.build();
addView(adView);
adView.loadAd(adRequest);
}
private int getHeightAd() {
try { return adView.getAdSize().getHeightInPixels(adView.getContext()); }
catch (Exception e) {
e.printStackTrace();
return 200;
}
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
adView.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(getHeightAd(), MeasureSpec.EXACTLY));
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
adView.layout(l, 0, r, getHeightAd());
myView.layout(drawRect.left, drawRect.top, drawRect.right, drawRect.bottom);
}
@Override public boolean onTouchEvent(MotionEvent event) {
drawRect.offsetTo((int)event.getX()-drawRect.width()/2, (int)event.getY()-drawRect.height()/2);
switch (event.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
addView(myView);
break;
case MotionEvent.ACTION_MOVE:
requestLayout();
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_OUTSIDE:
removeView(myView);
default:
break;
}
return true;
}
private class Test1 extends View {
Path path = new Path();
Bitmap bitmap;
public Test1(Context context) {
super(context);
bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.anImage);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
path.moveTo(0, 0);
path.lineTo(getWidth(), 0);
path.lineTo(getWidth()/2, getHeight());
path.moveTo(0, 0);
canvas.clipPath(path);
canvas.drawBitmap(bitmap, 0, 0, null); }
}
}
显示广告时的扭曲视图:
如果不是,应该是:
我终于找到了解决办法。基于,我修改了如下代码(添加了setLayer行):
运气好吗?我也有同样的问题。不,现在还没有解决方案:(这似乎只发生在设备4.4.3+上。甚至安卓L也有同样的问题。我有一个解决方案。我希望它也能为你工作。见下文。谢谢,这帮了大忙。
...
}
private class Test1 extends View {
Path path = new Path();
Bitmap bitmap;
public Test1(Context context) {
super(context);
setLayerType(View.LAYER_TYPE_SOFTWARE, null);
bitmap = BitmapFactory.decodeResource(getResources(), R.drawable. anImage);
}
...