您的位置:首页 > 移动开发 > Android开发

Android---Touch事件的传递机制 & Viewpager和View的事件相应规则

2018-01-20 17:40 1021 查看
一、Touch事件的传递机制



二、viewpager和view的事件响应规则  
1. 当滑动很慢并且滑动很短距离的时候,viewpager和view的事件全部执行
2. 当滑动很快并且滑动较长的距离或者切换的界面的时候,会执行view的Cancel事件,结束掉view的所有事件,会只执行viewpager的事件
        public
boolean dispatchTouchEvent(MotionEvent ev) {

switch (ev.getAction()) {

case MotionEvent.ACTION_DOWN:

//getParent() : 获取控件的父控件  

getParent().requestDisallowInterceptTouchEvent(true);   //设置是否父控件拦截事件,true:传递事件,false:拦截事件

startX = (int) ev.getX();

startY = (int) ev.getY();

break;
 }

三、Viewpager和内部嵌套的View的事件交互规则
     //1,按下事件作用在内部view上
      //2,当滑动稍许距离,加速度未达到一定值时,对应滑动事件作用在view身上
      //3,当滑动达到一定距离,并且加速度达到一定值,(比如翻页 切换界面)内部的view触发cancel事件,然后将滑动的事件返还给父控件(ViewPager)
        @Override
        public Object instantiateItem(ViewGroup container, int position) {

            View view = View.inflate(getApplicationContext(),R.layout.item,null);



            view.setOnTouchListener(new OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    switch (event.getAction()) {
                    case MotionEvent.ACTION_UP:
                        Log.i(tag, "view MotionEvent.ACTION_UP");
                        break;
                    case MotionEvent.ACTION_DOWN:
                        Log.i(tag, "view MotionEvent.ACTION_DOWN");
                        
                        break;
                    case MotionEvent.ACTION_MOVE:
                        Log.i(tag, "view MotionEvent.ACTION_MOVE");
                        
                        break;
                    case MotionEvent.ACTION_CANCEL:
                        Log.i(tag, "view MotionEvent.ACTION_CANCEL");
                        break;
                    }
                    return true;
                }
            });

            container.addView(view);
            return view;
        }  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: