如何在android中单击按钮清除画布
上面的文件是我的如何在android中单击按钮清除画布,android,android-canvas,Android,Android Canvas,上面的文件是我的SingleTouchEventView.Java 这是我的MainActivity.java import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Pain
SingleTouchEventView.Java
这是我的MainActivity.java
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
public class SingleTouchEventView extends View {
private Paint paint = new Paint();
private Path path = new Path();
public boolean cc = false;
public SingleTouchEventView(Context context, AttributeSet attrs) {
super(context, attrs);
paint.setAntiAlias(true);
paint.setStrokeWidth(18f);
paint.setColor(Color.LTGRAY);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeJoin(Paint.Join.ROUND);
paint.setStrokeCap(Paint.Cap.ROUND);
}
@Override
protected void onDraw(Canvas canvas) {
if(cc)
{
Bitmap back = BitmapFactory.decodeResource(getResources(), R.drawable.black_square);
Bitmap cb = Bitmap.createScaledBitmap(back, 0, 0, false);
canvas.drawBitmap(cb,0,0,null);
cc = false;
}
canvas.drawPath(path, paint);
}
public void clearCanvas()
{
cc =true;
invalidate();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
float eventX = event.getX();
float eventY = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
path.moveTo(eventX, eventY);
return true;
case MotionEvent.ACTION_MOVE:
path.lineTo(eventX, eventY);
break;
case MotionEvent.ACTION_UP:
// nothing to do
break;
default:
return false;
}
// Schedules a repaint.
invalidate();
return true;
}
}
我的问题是,我应该在重置按钮中使用什么代码来删除画布的所有内容。
请帮帮我
我已经尝试过实现myView.clearCanvas()
,但是没有任何帮助。如果我添加此代码以在单击时重置Buuton,则会导致FC
谢谢您可以用透明颜色平移所有内容,以清除所有内容。也许我不明白您想画什么,但您尝试过以下方法吗:
public class MainActivity extends Activity {
Button reset;;
LinearLayout canvasAlphabets;
SingleTouchEventView myView;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
reset = (Button)findViewById(R.id.reset_canvas);
myView = new SingleTouchEventView(this, null);
canvasAlphabets = (LinearLayout)findViewById(R.id.canvas_Alphabets);
canvasAlphabets.addView(myView);
reset.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
});
}
}
否则,如果要全部擦除,可以使用此新绘制:
protected void onDraw(Canvas canvas)
{
if (cc)
{
Bitmap back = BitmapFactory.decodeResource(getResources(), R.drawable.black_square);
Bitmap cb = Bitmap.createScaledBitmap(back, 0, 0, false);
canvas.drawBitmap(cb,0,0,null);
cc = false;
}
else
canvas.drawPath(path, paint);
}
}
我用上面的代码修复了它,如果(cc){…}是我用来清除画布的代码。我应该在哪里使用你写的代码?实际的问题是,如果我尝试使用myView.canvasClear(),它会导致FCtry:if(cc){Paint transparent=new Paint();transparent.setAlpha(0);canvas.drawPath(path,transparent);cc=false;}else canvas.drawPath(path,Paint);受保护的void onDraw(Canvas Canvas){if(cc){Log.d(“Clear Canavs”,“Clear Canavs start”);Paint transparent=new Paint();transparent.setAlpha(0);Canvas.drawPath(path,transparent);cc=false;}else{Canvas.drawPath(path,Paint);}现在我正在使用您告诉我的代码。它会在按下重置按钮时清除画布,但我绘制的所有内容在触摸画布时再次显示。cavas上的drwawing未被删除。路径=新路径();油漆清漆=新油漆();setXfermode(新的PorterDuffXfermode(PorterDuff.Mode.CLEAR));drawRect(0,0,0,0,clearPaint);cc=假;我用上面的代码把它修好了。路径=新路径();油漆清漆=新油漆();setXfermode(新的PorterDuffXfermode(PorterDuff.Mode.CLEAR));drawRect(0,0,0,0,clearPaint);cc=假;我用了这个密码
Paint transparent = new Paint();
transparent.setAlpha(0);
path = new Path();
Paint clearPaint = new Paint();
clearPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
canvas.drawRect(0, 0, 0, 0, clearPaint);
cc = false;