Android:onTouchEvent()和onClick事件

时间:2018-06-19 03:58:59

标签: android button touch

我有一个项目,我已经覆盖了onTouchEvent()并注册了点击并在其中移动。我的屏幕上也有按钮。我正在尝试将方法连接到按钮,即:

public void onButtonClick(View view) {
    System.out.println("Here");
}

我可以将方法连接到按钮,连接出现在xml:

<Button
    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="onButtonClick"
    android:text="Button"
    tools:layout_editor_absoluteX="89dp"
    tools:layout_editor_absoluteY="139dp" />

但按钮点击似乎没有注册。是因为我还要覆盖onTouchEvent()吗?如果是这样,我应该通过MotionEvents注册点击?如果是这样,有什么方法可以区分来自多个按钮的点击?

1 个答案:

答案 0 :(得分:2)

  

但按钮点击似乎没有注册。是因为   我还要覆盖onTouchEvent()?

是。当onTouch()方法返回true时,Android会认为该事件已被使用,并且不会将其传递给其他各种触摸处理程序(我认为它包含onClickListener)。

  

如果是这样,我应该通过MotionEvents注册点击吗?

你可以做到这一点。或者根据您的情况,只需从方法中返回false,然后让onClickListener完成工作。

  

如果是这样,有什么方法可以区分来自的点击次数   多个按钮?

onTouch(final View v, final MotionEvent event)

正如您所看到的,onTouch()方法具有View类型作为参数。您可以通过获取v.getId()来检查视图的ID,并将此ID与您期望的Button ID进行比较。您可以执行以下操作:

@Override
public boolean onTouch(final View v, final MotionEvent event) {
    if(v.getId()==R.id.button1){
        //Click is coming from Button with id button1 (specified in layout.xml as android:id="@+id/button1"). 
        //Do something for click
    }
    ...
}