这是问题所在。出于性能原因,我选择使用 SurfaceView 来绘制类似表格的表格,并且因为这些东西充满了数据,所以我使用 ScrollView 作为 SurfaceView 父级。
很高兴看到它在我的个人开发专用手机(HTC Desire HD 2.3.7)上运行良好,我尝试在我公司的一款开发专用手机(Google Nexus S 4.1.?)上对其进行测试,然后在我的个人手机上进行测试(宏达一 X 4.1.1)。
最后两个出现问题,我的 SurfaceView 在大约 80 像素滚动后变黑,然后在我向下滚动到大约 80 像素(取决于屏幕大小)时又变回了它的样子。
为了避免这种停电,我在一些模拟器下进行了测试......
从 2.2(客户的愿望)到 4.0.4,它工作得很好。
笑话是,在 4.2 下……它也有效!
当然,只有在 4.1.x 以下,SurfaceView 才会变黑!
这是我的 SurfaceView 代码,我只是从您可以在此处找到的示例中复制的。
public class MySurfaceView extends SurfaceView
{
public MySurfaceView(Context context, AttributeSet attrs)
{
super(context, attrs);
// I use another SurfaceView behind to draw a grid
// that is scroll independent with a white background
this.setZOrderOnTop(true);
// Same reason here
this.getHolder().setFormat(PixelFormat.TRANSPARENT);
this.getHolder().addCallback(this);
this.getHolder().setSizeFromLayout();
// Tried without this line and with "software" and "none" types too
// and hardware acceleration on application and activity
this.setLayerType(View.LAYER_TYPE_HARDWARE, null);
}
@Override
protected void onDraw(Canvas canvas)
{
super.onDraw(canvas);
canvas.drawSomething()...
}
public void surfaceCreated(SurfaceHolder holder)
{
this.setWillNotDraw(false);
this.thread = new MySurfaceViewThread(this.getHolder(), this);
this.thread.setRunning(true);
this.thread.run();
}
public void surfaceDestroyed(SurfaceHolder holder)
{
this.thread.setRunning(false);
boolean retry = true;
while(retry)
{
try
{
this.thread.join();
retry = false;
}
catch(Exception exception)
{
Log.v(TAG, exception.getClass().getName(), exception);
}
}
}
}