码迷,mamicode.com
首页 > 其他好文 > 详细

Detecting Common Gestures

时间:2015-05-20 09:48:48      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:事件   gesture   手势   

当用户将一个或多个手指放在屏幕上时,“touch gesture“(触碰手势)就会发生,然后你的应用程序就会把你的 ”触碰“过程解释为一个特有的手势。

这个过程分为两个步奏,

1.收集 触碰事件的数据。
2.将收集到的数据翻译(解释),查看是否符合你的程序所支持的任何手势的标准。

收集数据(Gather Data)

当用户将手指放在屏幕上的时候,这个会在View组件上触发 onTouchEvent()回调方法,然后就会接收 touch event(触碰事件),每一个事件都会包含 位置,压力,尺寸,其他手指的触碰的信息,等等。通过这些信息,触碰事件被识别为一个手势。然后onTouchEvent()就会被多次触发。

当用户第一次触碰屏幕,手势 就开始了。然后系统会记录 用户手指的位置轨迹,当用户手指离开屏幕的时候结束。通过这种交互机制,MotionEvent类就会被传递给onTouchEvent()用来提供详细的交互信息。然后你的应用程序就可以根据MotionEvent提供的信息来决定这个手势是否是你要监测的手势。

Capturing touch events for an Activity or View

为了与touch event交互,Activity 或者View,要复写onTouchEvent()方法。

下面的代码 通过getActionMasked()方法从event中获取action。 这个方法会返回给你一系列数据,根据这些数据来决定 你需要监测的是哪些手势。

public class MainActivity extends Activity {
...
// This example shows an Activity, but you would use the same approach if
// you were subclassing a View.
@Override
public boolean onTouchEvent(MotionEvent event){ 

    int action = MotionEventCompat.getActionMasked(event);

    switch(action) {
        case (MotionEvent.ACTION_DOWN) :
            Log.d(DEBUG_TAG,"Action was DOWN");
            return true;
        case (MotionEvent.ACTION_MOVE) :
            Log.d(DEBUG_TAG,"Action was MOVE");
            return true;
        case (MotionEvent.ACTION_UP) :
            Log.d(DEBUG_TAG,"Action was UP");
            return true;
        case (MotionEvent.ACTION_CANCEL) :
            Log.d(DEBUG_TAG,"Action was CANCEL");
            return true;
        case (MotionEvent.ACTION_OUTSIDE) :
            Log.d(DEBUG_TAG,"Movement occurred outside bounds " +
                    "of current screen element");
            return true;      
        default : 
            return super.onTouchEvent(event);
    }      
}

这种监测方法是通过 过程来监测用户手势的,如果你只需要监测一些常规的手势,例如: 双击,长按,抛掷,等。你可以通过GestureDetector类来监听。 这样你就可以不用监测 每一个独立的 touch事件。

Capturing touch events for a single view

你可以将 View.OnTouchListener 对象 附加 在任何View对象中通过 setOnTouchListener()方法。这样我们即使不继承View对象,也可以实现对 touch event的监听。

View myView = findViewById(R.id.my_view); 
myView.setOnTouchListener(new OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        // ... Respond to touch events       
        return true;
    }
});

需要注意的是,如果你自定义一个Listener然后在ACTION_DOWN事件中返回false,那么其他 后续动作事件,例如ACTION_MOVE和ACTION_UP将不会被调用。因为ACTION_DOWN是所有touch event的开始。

如果你创建了一个自定义的View控件,你可以通过复写onTouchEvent(),就像上面描述的一样。

Detect Gestures

未完……

Detecting Common Gestures

标签:事件   gesture   手势   

原文地址:http://blog.csdn.net/u010940300/article/details/45856177

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!