【发布时间】:2010-12-19 03:06:45
【问题描述】:
我正在 Android 中试验 SurfaceView,我正在尝试创建一个简单的绘图类型应用程序,您可以在其中通过触摸“绘图”。我有一个线程正在运行来处理画布上的绘图,但我遇到了一些性能问题。我在http://developer.android.com/guide/topics/graphics/index.html 上读到,您需要重新绘制整个表面,因此我尝试将所有触摸点存储在浮点数组 mPoints 中,而不是每次都重新绘制它们。问题是当很多点积累起来时,它会变得非常慢。这是代码:
@Override
public void run() {
while(mIsRunning) {
Canvas c = null;
try {
c = mSurface.lockCanvas(null);
synchronized(mSurface) {
int size = mPoints.getSize();
for(int i = 0; i < size; i += 2) {
c.drawCircle(mPoints.get(i), mPoints.get(i + 1), 3, mPaint);
}
}
}
finally {
if (c != null)
mSurface.unlockCanvasAndPost(c);
}
}
}
但是,当我更新它以清除浮点数组并仅绘制新的触摸点时,它会导致大量闪烁。据我所知,这是因为 Android 使用双缓冲。我不确定如何解决这些问题。
【问题讨论】:
标签: android surfaceview android-sdk-2.1