У меня проблема с простым приложением для рисования на Android.
Вот мой класс, который расширяет SurfaceView:
public class SomeView extends SurfaceView implements SurfaceHolder.Callback {
private static SurfaceHolder surfaceHolder;
static Canvas canvas=null;
static Paint paint=new Paint();
float X,Y,X1,Y1;
static int mode=1;
public static void ClearAll(){
canvas=surfaceHolder.lockCanvas(null);
canvas.drawColor(Color.BLACK);
surfaceHolder.unlockCanvasAndPost(canvas);
}
public SomeView(Context context,AttributeSet attrs) {
super(context);
getHolder().addCallback(this);
paint.setColor(Color.WHITE);
paint.setStyle(Style.FILL);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
this.surfaceHolder=holder;
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
public boolean onTouchEvent(MotionEvent event)
{
canvas=surfaceHolder.lockCanvas(null);
if (mode==1){
canvas.drawCircle(event.getX(), event.getY(),10, paint);
}
if (mode==2){
paint.setStrokeWidth(10);
if (event.getAction()==MotionEvent.ACTION_DOWN){
X=event.getX();
Y=event.getY();
}
if (event.getAction()==MotionEvent.ACTION_UP){
X1=event.getX();
Y1=event.getY();
canvas.drawLine(X, Y, X1, Y1, paint);
}
}
surfaceHolder.unlockCanvasAndPost(canvas);
return true;
}
}
mode = 1 - простая трассировка касаний пользователя,
mode = 2 - это рисование прямых
Однако, когда я рисую в mode = 2, картинка становится странной:
Некоторые линии исчезают, и после того, как еще несколько линий были нарисованы, появляется снова. Когда я все еще касаюсь экрана, холст мигает и показывает все линии, нарисованные после последнего вызова ClearAll()
. Если я перестану касаться, все еще будут видны только несколько строк.
В чем проблема?