gpt4 book ai didi

java - Android 2指触摸触发1指触摸以及2指触摸

转载 作者:行者123 更新时间:2023-12-01 20:21:58 26 4
gpt4 key购买 nike

我的应用程序遇到问题,我需要根据按下一根手指还是两根手指来执行不同的操作。

目前我有以下代码:

    @Override
public boolean onTouchEvent(MotionEvent event){
int touchX = (int)event.getX();
int touchY = (int)event.getY();
int action = event.getActionMasked();

//Multitouch
if(event.getPointerCount() > 1 && action == MotionEvent.ACTION_POINTER_DOWN){
System.out.println("2 Finger press");

return true;
}
else if(action == MotionEvent.ACTION_DOWN && action != MotionEvent.ACTION_POINTER_DOWN){

if(event.getPointerCount() == 1) {
System.out.println("single finger down");
invalidate();
return true;
}
}

return false;
}

我遇到的问题是,当我用 2 个手指按下时,多点触控部分会注册,之后单次按下也会注册。

我在谷歌上搜索了一些解决这个问题的方法,这就是为什么我要检查单点触摸条件 action != MotionEvent.ACTION_POINTER_DOWN 我认为这可以解决这个问题。这并没有解决问题,因此我决定检查 event.getPointerCount() == 1,但不幸的是,当我用两根手指按下时,仍然会导致打印两行。

总而言之,当按下 2 个手指而不是同时按下两个手指时,我只需要调用 2 个手指部分。

最佳答案

请参阅“Handling Multi-Touch Gestures ”的文档。它详细说明了您正在寻找的内容。

本质上,每个 Activity 指针在与屏幕接触时都会被分配一个 ID。您的解决方案应考虑哪些 ID 发挥作用,并通过观察各种操作状态将其删除。

有一些类似的内容(但要注意对 getActionIndex() 等方法的兼容性调用):

更新代码示例

public class MotionActivity extends AppCompatActivity {

private int primaryPointerId = -1;
private int secondaryPointerId = -1;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(new FrameLayout(this));
}

@Override
public boolean onTouchEvent(MotionEvent event){
int action = event.getActionMasked();

switch(action) {
case MotionEvent.ACTION_DOWN:
primaryPointerId = event.getPointerId(0);

Log.d(getClass().getName(), "Primary pointer ID == [" + primaryPointerId + "]");

break;

case MotionEvent.ACTION_POINTER_DOWN:
secondaryPointerId = event.getPointerId(event.getActionIndex());

Log.d(getClass().getName(), "Secondary pointer ID == [" + secondaryPointerId + "]");

break;

case MotionEvent.ACTION_MOVE:
if(primaryPointerId > -1 && secondaryPointerId > -1) {
Log.d(getClass().getName(), "Two-point touch...");
} else {
Log.d(getClass().getName(), "One-point touch...");
}

break;

case MotionEvent.ACTION_POINTER_UP:
if(event.getPointerId(event.getActionIndex()) == primaryPointerId) {
primaryPointerId = secondaryPointerId;
}

secondaryPointerId = -1;

break;

case MotionEvent.ACTION_UP:
primaryPointerId = -1;

break;
}

return true;
}
}

关于java - Android 2指触摸触发1指触摸以及2指触摸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44579353/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com