Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.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上的手势?_Android_Android Layout_Android Gesture - Fatal编程技术网

如何实施";“双指拖动”;Android上的手势?

如何实施";“双指拖动”;Android上的手势?,android,android-layout,android-gesture,Android,Android Layout,Android Gesture,我是Android开发的新手,目前正在从事一个针对盲人的易访问性研究项目(Jelly Bean API 17级项目)。我一直在尝试一些手势,双指拖动手势很难实现。下图很好地捕捉了我实际需要的内容 我希望盲人用户水平拖动两个手指(屏幕上的任何位置),他将获得他/她在编辑文本中键入的文本的音频输出。此外,根据拖动时两个手指移动的距离,我们分别输出每个单词。(下面的示例) 示例:如果用户键入“今天是个好日子”并拖动手指 (x值)按左边10个单位,我们输出“good day”,但如果他 拖到左边20个

我是Android开发的新手,目前正在从事一个针对盲人的易访问性研究项目(Jelly Bean API 17级项目)。我一直在尝试一些手势,双指拖动手势很难实现。下图很好地捕捉了我实际需要的内容

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

示例:如果用户键入“今天是个好日子”并拖动手指 (x值)按左边10个单位,我们输出“good day”,但如果他 拖到左边20个单位,我们输出“一个好日子”,30个单位 左边是“好日子”等等

我无意中发现了一个似乎能检测到两个手指接触的东西:

TouchEvent(MotionEvent event)
另外,关于的本教程似乎很有希望,但我需要它用于触摸拖动,我不确定是否可以这样实现

任何新的建议,以实现这一点或指向教程,可以帮助将是伟大的

提前感谢,,
Adit

触摸和拖动是一系列事件。首先你有一个向下的动作,然后你有一个或多个动作,然后你有一个向上的动作。在向下方向上检测到一个起点,然后在移动时发生拖动。阻力在上升时停止


要进行双指拖动,仅当
MotionEvent.getPointerCount()==2
时才注意拖动

好吧,多亏了这里的Gabe和众多的博客,我找到了解决我问题的办法

首先,我在“活动”类中初始化了变量

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上基本的1和2个手指手势的功能,只需非常简单的插入功能

大多数手势都可以轻松设置

view.setOn2FingerGestureListener ( new On2FingerGestureListener () {
@Override 
onSwipeup() {
}
onSwipedown() {
}
});

它是开源的,可以作为.jar下载

检测用户第一次触摸的点(向下事件)。保存它。在移动事件中,检查两个手指是否向下。如果是这样,通过从下方减去该点来检查其移动了多远。滚动那么多。你好@Adit。。您是否可以共享playstore链接?请检查您为什么不使用actionIndex?从另一个角度看,该库位于: