我一直在尝试为此绘图应用添加一个擦除功能。我正在计划它只是简单地在你移动手指的地方画白色。由于某种原因,我无法让按钮工作。如果我可以让这个按钮工作,我将能够添加更多的颜色等。 (我没有做任何有关Mainactivity的事情)
package com.example.draw;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.os.Bundle;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainDrawingView extends View
{
private Paint paint = new Paint();
private boolean erase;
private Path path = new Path();
Button aButton;
public MainDrawingView(Context context, AttributeSet attrs)
{
super(context, attrs);
paint.setAntiAlias(true);
paint.setStrokeWidth(5f);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeJoin(Paint.Join.ROUND);
aButton = (Button) this.findViewById(R.id.button1);
aButton.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
erase = !erase;
}
});
}
@Override
protected void onDraw(Canvas canvas)
{
canvas.drawPath(path, paint);
}
public boolean onTouchEvent(MotionEvent event)
{
if(erase) paint.setColor(Color.WHITE);
else paint.setColor(Color.BLACK);
// Get the coordinates of the touch event.
float eventX = event.getX();
float eventY = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// Set a new starting point
path.moveTo(eventX, eventY);
return true;
case MotionEvent.ACTION_MOVE:
// Connect the points
path.lineTo(eventX, eventY);
break;
default:
return false;
}
// Makes our view repaint and call onDraw
invalidate();
return true;
}
}
Activity_main<
<FrameLayout 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"
android:background="#ffffff"
tools:context="com.example.draw.FullscreenActivity">
<!-- This is the view on which we will draw. -->
<view
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.example.draw.MainDrawingView"
android:id="@+id/single_touch_view"
android:layout_gravity="left|top"
android:background="#ffffff" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
</FrameLayout>
答案 0 :(得分:1)
您的问题似乎是您使用了错误的类型。您的erase
变量的类型为Paint
:
private Paint erase = new Paint();
但在您的代码中,您将其视为代表int
的{{1}}。
boolean
其次,您实际上从未为按钮设置if(erase != 0) { paint.setColor(Color.BLACK); }
if(erase == 0) { paint.setColor(Color.WHITE); }
...
erase = 1;
。此外,设置颜色的逻辑应全部移至onClickListener
或onTouch
方法。你真的应该:
onClick
答案 1 :(得分:0)
您的视图可能未使用以下构造函数
创建Context context, AttributeSet attrs
它可能正在使用您未覆盖的其他默认构造函数。然后什么都不会得到设置,你不会得到你期望听众的任何点击行为。
答案 2 :(得分:0)
看起来您没有使用onCreate(Bundle savedInstances)方法设置来正确添加侦听器。