【发布时间】:2011-03-02 12:28:42
【问题描述】:
我有一个绘图应用程序,用户可以用手指在屏幕上绘图。绘图发生在屏幕外位图上,然后在 onDraw() 中发布到屏幕上。
当用户通过呼叫或点击主页切换离开应用程序,然后返回应用程序时,绘图屏幕将显示之前的绘图,除了绘图边缘现在有伪影。循环通过多个 home -> resume -> home -> resume 循环会导致工件每次都变得更糟。五个循环后的结果见附图。
有人见过这个吗?知道为什么会这样吗?
谢谢
原图:
5 个周期后:
编辑:更多细节:
当用户触摸屏幕时,我截取触摸并将它们作为路径存储在屏幕外位图 mBitmap 上。路径是使用启用了标志 Paint.ANTI_ALIAS_FLAG 的 Paint 绘制的。在 onDraw() 中,我通过以下方式将它们写入屏幕:
@Override
protected void onDraw(Canvas canvas) {
// wipe the canvas
canvas.drawColor(0xffffffff);
// draw the stored paths
canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
// draw any active paths
if (mStrokePath != null) {
canvas.drawPath(mStrokePath, mStrokePaint);
}
}
其中 mBitmapPaint 定义为:
mBitmapPaint = new Paint(Paint.DITHER_FLAG);
编辑 2:好的,明白了
我的问题是,在创建基于 Canvas 的视图的 Activity 的 onResume 中,我将形状重新加载到已恢复位图顶部的画布上,该位图已经具有形状,因此抗锯齿性能下降.
【问题讨论】:
-
您能否详细介绍一下您的位图显示是如何工作的?您是否多次保存同一个位图?
-
我不这么认为...当用户绘图时,我将该数据写入屏幕外的 birmap,然后在 onDraw(), canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);当活动恢复时,只发生一次对 onDraw 的调用,没有做任何事情来更改 offscrren 位图。