Android关于OnTouch 和OnClick
时间: 2023-07-15 19:11:01 浏览: 116
OnTouch和OnClick都是Android中常用的事件处理方式。
OnClick是View的点击事件,当用户点击或者触摸View时,就会触发OnClick事件。常用于Button、ImageView等控件。
OnTouch是View的触摸事件,当用户触摸View时就会触发OnTouch事件。OnTouch事件可以处理更加复杂的手势操作,例如划动、长按等。在OnTouch事件中,可以通过MotionEvent对象获取用户的手势信息,例如手指坐标、手势类型等。
在使用OnTouch时,需要注意与OnClick事件的区别。当一个View同时设置了OnClick和OnTouch事件时,如果OnTouch事件返回了true,则OnClick事件不会触发。因此,在需要处理复杂手势的情况下,可以优先使用OnTouch事件。
相关问题
Android按钮,如果按住不松手,就不执行onclick的逻辑
要在 Android 按钮按住不松手时不执行 `onClick` 的逻辑,可以使用按钮的触摸事件监听器(`OnTouchListener`)来实现。以下是一种常见的方法:
1. 在你的 Activity 或 Fragment 中为按钮设置触摸事件监听器:
```java
Button myButton = findViewById(R.id.myButton);
myButton.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// 按钮被按下时的逻辑
// ...
return true; // 返回 true 来指示已处理触摸事件
case MotionEvent.ACTION_UP:
// 按钮抬起时的逻辑
// ...
return true; // 返回 true 来指示已处理触摸事件
}
return false; // 返回 false 来继续执行默认的点击逻辑
}
});
```
在上述代码中,我们使用 `setOnTouchListener()` 方法为按钮设置触摸事件监听器。在监听器的 `onTouch()` 方法中,通过 `event.getAction()` 获取触摸事件的动作类型。当动作类型为 `MotionEvent.ACTION_DOWN` 时,表示按钮被按下;当动作类型为 `MotionEvent.ACTION_UP` 时,表示按钮被抬起。
2. 在 `MotionEvent.ACTION_DOWN` 分支中返回 `true` 来指示已处理触摸事件,并阻止默认的点击逻辑执行。
```java
return true;
```
3. 在 `MotionEvent.ACTION_UP` 分支中返回 `true` 来指示已处理触摸事件,并阻止默认的点击逻辑执行。
```java
return true;
```
4. 在其他情况下,返回 `false` 来继续执行默认的点击逻辑。
```java
return false;
```
这样,当用户按住按钮时,不会触发 `onClick` 的逻辑,只有在按钮被按下后抬起时才会触发 `MotionEvent.ACTION_UP` 分支中的逻辑。
完整的代码示例:
```java
Button myButton = findViewById(R.id.myButton);
myButton.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// 按钮被按下时的逻辑
// ...
return true; // 返回 true 来指示已处理触摸事件
case MotionEvent.ACTION_UP:
// 按钮抬起时的逻辑
// ...
return true; // 返回 true 来指示已处理触摸事件
}
return false; // 返回 false 来继续执行默认的点击逻辑
}
});
```
这样,按钮只有在按下并抬起时才会触发你在 `MotionEvent.ACTION_UP` 分支中定义的逻辑。
阅读全文