我已经实现了一个与 ViewPager 非常相似的自定义寻呼机。它使用画布来制作滚动效果。它在新设备(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。
我在新设备上得到的是背景只占用尽可能多的视图和绘制附近的视图工作得很好。
在旧设备上,我得到一个全屏纯红色(当前视图的颜色),上面有文字。当我画孩子时,他们的文本在正确的位置,但他们的背景实际上占据了整个屏幕并且(这意味着)过度绘制当前页面。
有谁知道为什么会这样?我能做些什么呢?
PS子宽度是正确的。这两个设备的规格非常不同,但子视图应该比父(我的自定义)视图小一点。
屏幕截图: 忽略应用程序标题。它与碎片无关。这个测试项目恰好在 Eclipse 项目列表中,我在那里实现了代码。
没有邻居:
与邻居: