gpt4 book ai didi

android - 如何在Android上实现一个 "Two Finger Drag"的手势?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:53:47 26 4
gpt4 key购买 nike

我是 Android 开发的新手,正在从事一项针对盲人的无障碍功能研究项目(Jelly Bean API 级别 17 项目)。我一直在试验一些手势,双指拖动 手势确实很难实现。下图很好地捕捉到了我实际需要的东西。

drag gesture

我希望盲人用户水平拖动两根手指(屏幕上的任何位置),他/她将获得他/她在 EditText 中键入的文本的音频输出。同样根据两个手指在拖动时移动的距离,我们分别输出每个单词。(示例如下)

Example: If the user types "Today is a good day" and drags his finger (x value) by (say) 10 units to Left we output "good day" but if he drags it say 20 units to Left we output "a good day", for 30 units to Left "is a good day" etc etc.

我偶然发现它似乎检测到双指触摸:

TouchEvent(MotionEvent event)

还有关于 detecting multiple touches 的教程看起来很有前途,但我需要它为 touchdrag 工作,我不确定是否可以这样实现。

任何新的实现建议或指向可以提供帮助的教程的指针都会很棒!

提前致谢,编辑

最佳答案

好的 所以感谢这里的 Gabe 和众多关于此的博客,我找到了解决我的问题的方法!

首先我在“Activity”类中初始化了我的变量

int GLOBAL_TOUCH_POSITION_X = 0;
int GLOBAL_TOUCH_CURRENT_POSITION_X = 0;

接下来,在 onCreate() 内部:

//Two-Finger Drag Gesture detection
RelativeLayout TextLoggerLayout = (RelativeLayout)findViewById(R.id.ActivityrView);
TextLoggerLayout.setOnTouchListener(
new RelativeLayout.OnTouchListener(){

@Override
public boolean onTouch(View v, MotionEvent m) {
handleTouch(m);
return true;
}

});

现在定义函数 handleTouch(m) 如下,它输出“双指触摸”的当前位置以及触摸的初始位置:

void handleTouch(MotionEvent m){
//Number of touches
int pointerCount = m.getPointerCount();
if(pointerCount == 2){
int action = m.getActionMasked();
int actionIndex = m.getActionIndex();
String actionString;
TextView tv = (TextView) findViewById(R.id.testDiffText);
switch (action)
{
case MotionEvent.ACTION_DOWN:
GLOBAL_TOUCH_POSITION_X = (int) m.getX(1);
actionString = "DOWN"+" current "+GLOBAL_TOUCH_CURRENT_POSITION_X+" prev "+GLOBAL_TOUCH_POSITION_X;
tv.setText(actionString);
break;
case MotionEvent.ACTION_UP:
GLOBAL_TOUCH_CURRENT_POSITION_X = 0;
actionString = "UP"+" current "+GLOBAL_TOUCH_CURRENT_POSITION_X+" prev "+GLOBAL_TOUCH_POSITION_X;
tv.setText(actionString);
break;
case MotionEvent.ACTION_MOVE:
GLOBAL_TOUCH_CURRENT_POSITION_X = (int) m.getX(1);
int diff = GLOBAL_TOUCH_POSITION_X-GLOBAL_TOUCH_CURRENT_POSITION_X;
actionString = "Diff "+diff+" current "+GLOBAL_TOUCH_CURRENT_POSITION_X+" prev "+GLOBAL_TOUCH_POSITION_X;
tv.setText(actionString);
break;
case MotionEvent.ACTION_POINTER_DOWN:
GLOBAL_TOUCH_POSITION_X = (int) m.getX(1);
actionString = "DOWN"+" current "+GLOBAL_TOUCH_CURRENT_POSITION_X+" prev "+GLOBAL_TOUCH_POSITION_X;
tv.setText(actionString);
break;
default:
actionString = "";
}

pointerCount = 0;
}
else {
GLOBAL_TOUCH_POSITION_X = 0;
GLOBAL_TOUCH_CURRENT_POSITION_X = 0;
}
}

给你! “双指拖动”手势终于实现了。看起来,我也可以在上面写一篇小博文了!! :)

关于android - 如何在Android上实现一个 "Two Finger Drag"的手势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14818530/

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