在线性布局中实现手势滑动问题

    关于在线性布局中实现手势滑动的问题,蛋疼了将近一天的时间,终于解决问题了,现在总结并分享如下:

     我写的demo其实很简单,布局文件就一个线性布局,里面什么也没有。之所以想到在布局文件中实现手势滑动而不是在activity中,是因为我的项目中要用到在特定布局中实现手势滑动的事件监听。说起在线性布局中实现手势滑动,涉及到一个知识点,我也是今天才知道:事件拦截。其实事件拦截是很简单的,我的拦截代码如下:

ll.setOnTouchListener(new View.OnTouchListener() {
   @Override
   public boolean onTouch(View v, MotionEvent event) {
      return mGestureDetector.onTouchEvent(event);
   }
  });

    将对线性布局的touch事件转化为手势事件,反过来讲,手势事件被线性布局的touch事件拦截了。这并不是我蛋疼的地方。我蛋疼的是,我这样处理后,在屏幕上用鼠标做任何手势,依然没有任何的反应。我在网上搜罗了很多关于手势的资料,基本上都和我写的代码以及思路一样。我就开始尝试了,纵欲让我解决了,代码如下:

ll = (LinearLayout) findViewById(R.id.ll);
        ll.setClickable(true);
//        ll.setFocusable(true);
       
        ll.setOnTouchListener(new View.OnTouchListener() {
   @Override
   public boolean onTouch(View v, MotionEvent event) {
    v.setClickable(true);
//    v.setFocusable(true);
    return mGestureDetector.onTouchEvent(event);
   }
  });

   居然要设置setClickable,我觉得很奇怪,我想在模拟器上用鼠标滑动应该是属于点击事件吧,没有真机可以测试,暂且这样写了。建议最好将setFocusable也设置一下,这样可以保证没什么问题。

   事件拦截的处理方式很有效果,对于那些本来就有touch事件的控件来说,可以事件自己定义的手势效果,但是,对于怎么恢复那些控件本身的touch事件,这个有待解决。

本文出自 “花样年华” 博客,谢绝转载!

你可能感兴趣的:(职场,手势,休闲,线性布局)