Android的onTouchEvent()问题

时间:2012-06-04 15:24:35

标签: android ontouchevent

我正在使用this guide作为参考创建我的第一个Android应用。目前,我的画布上有一个红色按钮,当用户点击按钮时,布尔(绿色)将设置为true,以使按钮的位图变为绿色按钮。

该应用程序的这一部分可以正常工作,但无论用户在画布上单击何处,它都可以正常工作。我只想在用户点击按钮的位图时更改布尔值。以下是我目前在代码中的内容:

onTouchEvent()方法

    @Override
public boolean onTouchEvent(MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_DOWN) {

        button.handleActionDown((int)event.getX(), (int)event.getY());

        if (button.isTouched()) {
            green = true;
        }
    } if (event.getAction() == MotionEvent.ACTION_MOVE) {

    } if (event.getAction() == MotionEvent.ACTION_UP) {
        if (button.isTouched()) {
            green = false;
            button.setTouched(false);
        }
    }
    return true;
}

handleActionDown()方法

    public void handleActionDown(int eventX, int eventY) {
    if (eventX >= (x - bitmap.getWidth() / 2) && (eventX <= (x + bitmap.getWidth()/2))) {
        if (eventY >= (y - bitmap.getHeight() / 2) && (eventY <= (y + bitmap.getHeight()/2))) {
            setTouched(true);

        } else {
            setTouched(false);
        }
    } else {
        setTouched(false);
    }
}

任何人都可以看到我为了使ACTION_DOWN事件失去了什么而使它只在触摸到位图的位图时才触发?

此致

1 个答案:

答案 0 :(得分:0)

避免在按钮上使用onTouchEvent,最好使用onClick,因为操作系统会检测是否单击了某个特定按钮,而不是必须计算按钮的位置

首先,设置onClickListener

btn.setOnClickListener(this);

这假定当前类实现View.OnClickListener,因此如果您不实现它,则必须使用不同的类或创建匿名内部类。

然后,在onClick方法中,确保ID匹配并在if语句中添加您想要执行的任何操作(或者替换为switch语句)

@Override
public void onClick(View v) {

    if(v.getId() == R.id.btn1){
        //do whatever you want on press
    }
}