在看RecyclerView源码的时候发现有一个方法实现,叫onGenericMotionEvent(MotionEvent event),从方法注释看是专门响应一些外接设备的操作的,比如游戏手柄,鼠标,滚轮,触控板等。从RecyclerView的onGenericMotionEvent实现来看,确实也是如此。
代码如下:

public boolean onGenericMotionEvent(MotionEvent event) {        if (mLayout == null) {            return false;        }        if (mLayoutFrozen) {            return false;        }        if (event.getAction() == MotionEventCompat.ACTION_SCROLL) {            final float vScroll, hScroll;            if ((event.getSource() & InputDeviceCompat.SOURCE_CLASS_POINTER) != 0) {                if (mLayout.canScrollVertically()) {                    // Inverse the sign of the vertical scroll to align the scroll orientation                    // with AbsListView.                    vScroll = -event.getAxisValue(MotionEvent.AXIS_VSCROLL);                } else {                    vScroll = 0f;                }                if (mLayout.canScrollHorizontally()) {                    hScroll = event.getAxisValue(MotionEvent.AXIS_HSCROLL);                } else {                    hScroll = 0f;                }            } else if ((event.getSource() & InputDeviceCompat.SOURCE_ROTARY_ENCODER) != 0) {                final float axisScroll = event.getAxisValue(MotionEventCompat.AXIS_SCROLL);                if (mLayout.canScrollVertically()) {                    // Invert the sign of the vertical scroll to align the scroll orientation                    // with AbsListView.                    vScroll = -axisScroll;                    hScroll = 0f;                } else if (mLayout.canScrollHorizontally()) {                    vScroll = 0f;                    hScroll = axisScroll;                } else {                    vScroll = 0f;                    hScroll = 0f;                }            } else {                vScroll = 0f;                hScroll = 0f;            }            if (vScroll != 0 || hScroll != 0) {                scrollByInternal((int) (hScroll * mScaledHorizontalScrollFactor),                        (int) (vScroll * mScaledVerticalScrollFactor), event);            }        }        return false;    }

RecyclerView只正对滚动事件做了处理,然后我们可以通过event.getSource()方法获取到是哪个外接设备触发的事件,有兴趣的同学可以看一下。

更多相关文章

  1. setBackground、setBackgroundDrawable、setBackgroundResource
  2. UBUNTU LINUX中连接ANDROID真机调试
  3. [转]android 网络编程 HttpGet类和HttpPost类使用详解
  4. Android(安卓)Service最全面的解析
  5. Android(安卓)NDK 线程回调Java层方法
  6. 疯狂安卓Android自学笔记
  7. javap -s 查看java方法签名
  8. Android(安卓)几种网络请求的区别与联系
  9. android下的回调方法

随机推荐

  1. Android(安卓)Studio的TextView实现滚动
  2. Android(安卓)ANT 如何编译Jar 和 APK
  3. ■Android中尺寸单位杂谈
  4. Android屏幕适配总结
  5. 手动安装Android(安卓)Platform
  6. android之图片切圆角
  7. Android(安卓)获取内外置存储卡方法
  8. Android(安卓)四种启动模式详解
  9. Android之个性化ListView实现
  10. 详解Android客户端与服务器交互方式