Я уже давно сталкиваюсь с этой проблемой, и даже после того, как погуглил некоторое время, я не нашел разумного решения своей проблемы.
Проблема, с которой я сталкиваюсь, заключается в том, что SurfaceView я использую мерцания. Время от времени объекты, которые я рисую, мерцают, и они меняют свой размер или цвет.
Похоже, что иногда приложение пропускает мои вызовы в Paint.setColor () и вызов в Paint.setStrokeWidth ().
Я создал методы, которые изменяют используемую краску, а затем, чтобы попытаться исправить эту проблему, вернули ей значения краски по умолчанию. Тем не менее проблема сохраняется.
Я также читал, что проблема может быть связана с двойной буферизацией. Это так? Я использую этот код для DrawingThread:
PS. Вы можете заметить, что я также пытался использовать грязный прямоугольник, чтобы увидеть, можно ли решить проблему, но все же ничего. [Возможно, я не понял, что он на самом деле делает]
class DrawingThread extends Thread {
private SurfaceHolder _surfaceHolder;
private CustomView _cv;
private boolean _run = false;
public DrawingThread(SurfaceHolder surfaceHolder, CustomView cv) {
super();
_surfaceHolder = surfaceHolder;
_cv = cv;
}
public void setRunning(boolean run) {
_run = run;
}
public boolean isRunning() {
return _run;
}
public SurfaceHolder getSurfaceHolder() {
return _surfaceHolder;
}
@Override
public void run() {
Canvas c;
while (_run) {
c = null;
try {
//c = _surfaceHolder.lockCanvas(new Rect(lon - range, lon + range, lat - range, lat + range));
c = _surfaceHolder.lockCanvas();
synchronized (_surfaceHolder) {
_cv.onDraw(c);
}
} finally {
if (c != null) {
_surfaceHolder.unlockCanvasAndPost(c);
}
}
}
}
}