我制作了一个从 xml 布局中引用的自定义视图。我添加了一个用于清除视图的按钮。现在我想在点击时清除画布区域。我在 xml 布局文件中添加了一个 onClick 事件。现在如何在哪里添加清除整个视图/画布的代码?我刚刚添加了几部分代码。(这并没有清除任何东西)。我按如下顺序添加了我的活动、视图和布局文件。
public class CustomViewActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void clearLine(View v) {
new CustomView(CustomViewActivity.this, null).clearCanvas();
}
}
public class CustomView extends View {
private Paint paint = new Paint();
private Path path = new Path();
public Boolean clearCanvas = false;
public CustomView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public CustomView(Context context,AttributeSet attrs ) {
super(context,attrs);
paint.setAntiAlias(true);
paint.setColor(Color.BLUE);
paint.setTextSize(20);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeJoin(Paint.Join.ROUND);
paint.setStrokeWidth(5f);
}
protected void onDraw(Canvas canvas) {
if(clearCanvas)
{ // Choose the colour you want to clear with.
canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
//canvas.drawColor(0, Mode.CLEAR);
clearCanvas = false;
}
super.onDraw(canvas);
canvas.drawText("Hello World", 5, 30, paint);
canvas.drawPath(path, paint);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
//int action = event.getAction() & MotionEvent.ACTION_MASK;
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;
}
public void clearCanvas(){
clearCanvas = true;
postInvalidate();
//canvas.drawColor(0, Mode.CLEAR);
}
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<com.example.CustomViewEvent.CustomView
android:id="@+id/customView"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="28dp"
android:onClick="clearLine"
android:text="CLEAR" />
</RelativeLayout>