zoukankan      html  css  js  c++  java
  • android中父view与子view关于触摸事件的理解

    android中的事件类型分为按键事件和屏幕触摸事件,Touch事件是屏幕触摸事件的基础事件,有必要对它进行深入的了解。 一个最简单的屏幕触摸动作触发了一系列Touch事件:ACTION_DOWN->ACTION_MOVE->ACTION_MOVE->ACTION_MOVE...->ACTION_MOVE->ACTION_UP
    当屏幕中包含一个ViewGroup,而这个ViewGroup又包含一个子view,这个时候android系统如何处理Touch事件呢?到底是 ViewGroup来处理Touch事件,还是子view来处理Touch事件呢?我只能很肯定的对你说不一定。呵呵,为什么呢?看看下面我的调查结果你 就明白了。
    android系统中的每个View的子类都具有下面三个和TouchEvent处理密切相关的方法:
    1)public boolean dispatchTouchEvent(MotionEvent ev)  这个方法用来分发TouchEvent

    2)public boolean onInterceptTouchEvent(MotionEvent ev) 这个方法用来拦截TouchEvent 3)public boolean onTouchEvent(MotionEvent ev) 这个方法用来处理TouchEvent
    当TouchEvent发生时,首先Activity将TouchEvent传递给最顶层的View, TouchEvent最先到达最顶层 view 的 dispatchTouchEvent ,然后由  dispatchTouchEvent 方法进行分发,

    如果dispatchTouchEvent返回true ,则交给这个view的onTouchEvent处理,

    如果dispatchTouchEvent返回 false ,则交给这个 view 的 interceptTouchEvent 方法来决定是否要拦截这个事件, 如果 interceptTouchEvent 返回 true ,也就是拦截掉了,则交给它的 onTouchEvent 来处理, 如果 interceptTouchEvent 返回 false ,那么就传递给子 view ,由子 view 的 dispatchTouchEvent 再来开始这个事件的分发。

    如果事件传递到某一层的子 view 的 onTouchEvent 上了,这个方法返回了 false ,那么这个事件会从这个 view 往上传递,都是 onTouchEvent 来接收。
    而如果传递到最上面的 onTouchEvent 也返回 false 的话,这个事件就会“消失”,而且接收不到下一次事件。

    复制代码
    private LayoutInflater inflater
    public View fristView;
    public View secondView;
    private MyViewPager myViewPager;
    public ViewPagerAdapter mViewPagerAdapter;
    private List<View> views;
    public Gallery mGallery;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            inflater = getLayoutInflater();
            fristView = inflater.inflate(R.layout.main1, null);
            secondView = inflater.inflate(R.layout.main2, null);
            views = new ArrayList<View>();
            views.add(fristView);
            views.add(secondView);
            mGallery = (Gallery) fristView.findViewById(R.id.gallery);
            mGallery.setAdapter(new ImageAdapter(this));
            myViewPager = (MyViewPager) findViewById(R.id.pager);
            mViewPagerAdapter = new ViewPagerAdapter(views);
            myViewPager.setAdapter(mViewPagerAdapter);
       }
    
    
    
    //界面列表
        private List<View> views;
       
        public ViewPagerAdapter (List<View> views){
            this.views = views;
        }
    
        //销毁arg1位置的界面
        @Override
        public void destroyItem(View arg0, int arg1, Object arg2) {
            ((ViewPager) arg0).removeView(views.get(arg1));        
        }
    
        @Override
        public void finishUpdate(View arg0) {
            // TODO Auto-generated method stub
            
        }
    
        //获得当前界面数
        @Override
        public int getCount() {
            if (views != null)
            {
                return views.size();
            }
            
            return 0;
        }
       
    
        //初始化arg1位置的界面
        @Override
        public Object instantiateItem(View arg0, int arg1) {
            
            ((ViewPager) arg0).addView(views.get(arg1), 0);
            
            return views.get(arg1);
        }
    
        //判断是否由对象生成界面
        @Override
        public boolean isViewFromObject(View arg0, Object arg1) {
            return (arg0 == arg1);
        }
    
        @Override
        public void restoreState(Parcelable arg0, ClassLoader arg1) {
            // TODO Auto-generated method stub
            
        }
    
        @Override
        public Parcelable saveState() {
            // TODO Auto-generated method stub
            return null;
        }
    
        @Override
        public void startUpdate(View arg0) {
            // TODO Auto-generated method stub
            
        }
  • 相关阅读:
    学习笔记1—多线程相关笔记
    【Java并发编程一】线程安全问题
    Intellij IDEA配置优化--转载
    idea使用阿里工具优化代码+阿里开发手册
    Navicat Premium 12.1.12.0安装与激活
    H5分享功能
    excel导出使用get请求参数过长问题
    百度地图Web引用
    idea通过mapper快速定位到xml文件
    Win10企业版永久激活方法(cmd命令)
  • 原文地址:https://www.cnblogs.com/crazywenza/p/2891420.html
Copyright © 2011-2022 走看看