Adi*_*pta 12 android android-layout android-gesture
我是Android开发的新手,正在为盲人开展一个无障碍研究项目(Jelly Bean API 17级项目).我一直在试验一些手势,而且双指拖动手势实施起来非常困难.以下图片捕获了我实际需要的内容.

我希望盲人用户将两根手指水平拖动(屏幕上的任何位置),然后他将获得他/她在EditText中输入的文本的音频输出.同时根据两个手指在拖动时的距离,我们分别输出每个单词.(例如下面的例子)
示例:如果用户键入"今天是美好的一天"并将他的手指(x值)拖动(比方说)10个单位到左边我们输出"美好的一天"但是如果他拖动它说20个单位到左边我们输出"好"一天",对于30个单位到左"是一个美好的一天"等等.
我偶然发现它似乎检测到双指触摸:
TouchEvent(MotionEvent event)
Run Code Online (Sandbox Code Playgroud)
另外这个关于检测多个触摸的教程看起来很有希望,但是我需要它来处理触摸和拖动,我不确定是否可以像这样实现.
任何新的建议来实现这个或指向可以帮助的教程将是伟大的!
在此先感谢,Adit
Adi*_*pta 21
好的,感谢Gabe在这里以及关于此的众多博客,我找到了解决问题的方法!
首先,我在"Activity"类中初始化了我的变量
int GLOBAL_TOUCH_POSITION_X = 0;
int GLOBAL_TOUCH_CURRENT_POSITION_X = 0;
Run Code Online (Sandbox Code Playgroud)
接下来,在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;
}
});
Run Code Online (Sandbox Code Playgroud)
现在按如下方式定义函数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;
}
}
Run Code Online (Sandbox Code Playgroud)
你有它!"双指拖动"手势终于实现了.看起来,就像我可以在它上面写一篇小博文!:)