Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:onTouchEvent()和onClick事件_Android_Button_Touch - Fatal编程技术网

Android:onTouchEvent()和onClick事件

Android:onTouchEvent()和onClick事件,android,button,touch,Android,Button,Touch,我有一个项目,在这个项目中,我重写了onTouchEvent(),并在其中注册点击和移动。我在屏幕上也有按钮。我正在尝试将方法连接到按钮,即: public void onButtonClick(View view) { System.out.println("Here"); } 我可以将该方法连接到按钮,该连接显示在xml中: <Button android:id="@+id/button" android:layout_width="wrap_content"

我有一个项目,在这个项目中,我重写了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注册点击吗?如果是这样,有什么干净的方法来区分来自多个按钮的点击

但是按钮单击似乎未注册。是因为 我还重写了onTouchEvent()

对。当代码> OnTouChuy()/代码>方法返回<代码> true时,Android将认为该事件已被消耗,不会传递给其他各种触摸处理程序(我认为它包括<代码> OnCLICKISTENER )。 如果是这样,我应该通过MotionEvents注册点击吗

你可以做到。或者,根据您的条件,只需从方法返回
false
,然后让onClickListener完成工作

如果是这样的话,有什么干净的方法来区分点击的来源 多个按钮

onTouch(最终视图v,最终运动事件)

如您所见,onTouch()方法将
View
类型作为参数。您可以通过获取
v.getId()
来检查视图Id,并将此Id与您期望的按钮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
    }
    ...
}
但是按钮单击似乎未注册。是因为 我还重写了onTouchEvent()

对。当代码> OnTouChuy()/代码>方法返回<代码> true时,Android将认为该事件已被消耗,不会传递给其他各种触摸处理程序(我认为它包括<代码> OnCLICKISTENER )。 如果是这样,我应该通过MotionEvents注册点击吗

你可以做到。或者,根据您的条件,只需从方法返回
false
,然后让onClickListener完成工作

如果是这样的话,有什么干净的方法来区分点击的来源 多个按钮

onTouch(最终视图v,最终运动事件)

如您所见,onTouch()方法将
View
类型作为参数。您可以通过获取
v.getId()
来检查视图Id,并将此Id与您期望的按钮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
    }
    ...
}