• Android学习之手势识别(GestureDetector)


        对于触摸屏的事件无非是按下、移动、抬起,如果是处理这几种简单的操作,使用OnTouch就可以完成,但是为了提高用户体验,识别复杂的手势,Android给我们提供的手势识别工具GestureDetector就可以帮上大忙了。

        要使用GestureDetector,需要实现OnGestureListener这个接口:

      //当用户按下时触发,由1个MotionEvent ACTION_DOWN触发 
      abstract boolean onDown(MotionEvent e);
    
      // 用户(轻触触摸屏后)松开,由一个1个MotionEvent ACTION_UP触发
      abstract boolean onSingleTapUp(MotionEvent e);  
    
       // 用户轻触触摸屏,尚未松开或拖动,由一个1个MotionEvent ACTION_DOWN触发
        // 注意和onDown()的区别,强调的是没有松开或者拖动的状态
      abstract void onShowPress(MotionEvent e);
    
      // 用户长按触摸屏,由多个MotionEvent ACTION_DOWN触发
      abstract void onLongPress(MotionEvent e);
    
      // 用户按下触摸屏,并拖动,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE触发
      abstract boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY);
    
      // 用户按下触摸屏、快速移动后松开,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE, 1个ACTION_UP触发
      abstract boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY); 

       下面就以一个简单的识别用户左右滑动为例: 

    public class MainActivity extends Activity implements OnTouchListener,OnGestureListener{
    
        private GestureDetector gesture;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            TextView tv = (TextView) this.findViewById(R.id.textView1);
            tv.setOnTouchListener(this);
            tv.setLongClickable(true);
            gesture = new GestureDetector(this, this);
        }
    
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            return gesture.onTouchEvent(event);
        }
    
        @Override
        public boolean onDown(MotionEvent e) {
            return false;
        }
    
        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
                float velocityY) {
        
            if(e1.getX() > e2.getX()){
                Toast.makeText(this, "用户手势往左边滑动", 3000).show();
            }else{
                Toast.makeText(this, "用户手势往右边滑动", 3000).show();
            }
            return false;
        }
    
        @Override
        public void onLongPress(MotionEvent e) {       
        }
    
        @Override
        public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
                float distanceY) {
            return false;
        }
    
        @Override
        public void onShowPress(MotionEvent e) {
        }
    
        @Override
        public boolean onSingleTapUp(MotionEvent e) {
            return false;
        }
    }

     效果图:

    注意:必须要设置你手势识别的View的LongClickable为true,否则有些手势无效。

  • 相关阅读:
    设计模式总结
    centos7.5 安装python3.7
    搭建yum软件源
    centos安装gitbook
    编译技术
    samba安装
    docker命令
    shell基础知识
    随笔
    虚拟机字节码执行引擎(三)
  • 原文地址:https://www.cnblogs.com/hbxblogs/p/2879848.html
Copyright © 2020-2023  润新知