使用SurfaceView绘图应用程序

时间:2011-11-18 11:00:16

标签: android draw surfaceview

我在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 - 是直线绘图

然而,当我在模式= 2中绘图时,图片变得怪异: 一些线条消失,再次出现几条线条。当我仍然触摸屏幕时,画布闪烁并显示自上次ClearAll()调用以来绘制的所有线条。如果我停止触摸,只有几行仍然可见。

有什么问题?

1 个答案:

答案 0 :(得分:1)

SurfaceView使用双缓冲。通常 - 在每个循环/操作上,您必须绘制要在画布上显示的每个像素。 希望有所帮助。