如何获得一个按钮来使用android中的视图

时间:2014-07-15 19:49:27

标签: java android button view draw

我一直在尝试为此绘图应用添加一个擦除功能。我正在计划它只是简单地在你移动手指的地方画白色。由于某种原因,我无法让按钮工作。如果我可以让这个按钮工作,我将能够添加更多的颜色等。 (我没有做任何有关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>

3 个答案:

答案 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; 。此外,设置颜色的逻辑应全部移至onClickListeneronTouch方法。你真的应该:

onClick

答案 1 :(得分:0)

您的视图可能未使用以下构造函数

创建
Context context, AttributeSet attrs

它可能正在使用您未覆盖的其他默认构造函数。然后什么都不会得到设置,你不会得到你期望听众的任何点击行为。

答案 2 :(得分:0)

看起来您没有使用onCreate(Bundle savedInstances)方法设置来正确添加侦听器。