Я экспериментирую с SurfaceView в Android и пытаюсь создать простое приложение для рисования, в котором вы «рисуете», касаясь его. У меня есть поток для обработки рисунка на холсте, но я сталкиваюсь с некоторыми проблемами производительности. Я прочитал на 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 использует двойную буферизацию. Я не уверен, как обойти эти проблемы.