我实现了一个与ViewPager非常相似的自定义寻呼机。它使用canvas来制作滚动效果。它适用于新设备(Android 4.2),但不适用于旧设备(Android 2.3)。
onDraw看起来像
Log.d(TAG, "onDraw()");
if (mSwipe != null) {
Log.d(TAG, "Swipe effect=" + (mSwipe.lastX - mSwipe.startX));
canvas.translate(mSwipe.lastX - mSwipe.startX, 0);
}
Page current;
current = getPage(mPosition);
if (current != null) {
if (mPosition != 0) {
Log.d(TAG, "Offset effect=" + current.offset.left);
canvas.translate(current.offset.left, 0);
}
Log.d(TAG, "Pager width=" + getWidth());
Log.d(TAG, "Child width=" + current.view.getWidth());
current.view.draw(canvas);
// ...
// Commented out. Used to draw pages around.
// ...
}
Android 4.2打印:
onDraw()
Pager width=1080
Child width=960
Android 2.3打印:
onDraw()
Pager width=480
Child width=420
我的测试页面只是具有扎实背景和一些文本的TextView。
我在新设备上得到的是背景只占用了很多,因为视图和绘图附近的视图效果很好。
在较旧的设备上,我得到一个全屏红色(当前视图的颜色),上面有文字。当我画儿童时,他们的文字处于正确的位置,但他们的背景实际上占据了整个屏幕,并且(意味着什么)透支了当前的页面。
任何人都知道它为什么会发生?我该怎么办呢?
P.S。子宽度是正确的。这两个设备具有非常不同的规范,但子视图应该比父(我的自定义)视图小一点。
截图: 忽略应用程序标题。它与碎片无关。这个测试项目恰好位于Eclipse项目列表中,我在那里实现了代码。
没有邻居:
与邻居:
答案 0 :(得分:0)
检查在自定义视图中对xml进行充气的方式 - 您是否为inflate
方法提供了父视图?如果您将null
设置为此方法的父级(第二个参数),那么父级的布局参数将不会用于布局您的自定义视图。