我在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()
调用以来绘制的所有线条。如果我停止触摸,只有几行仍然可见。
有什么问题?
答案 0 :(得分:1)
SurfaceView使用双缓冲。通常 - 在每个循环/操作上,您必须绘制要在画布上显示的每个像素。 希望有所帮助。