首页
JAVA笔记
数据库笔记
混乱记忆
小站记
您现在的位置
android onGenericMotionEvent 的作用
简介: 在看一些高级组件的源码的时候会发现有对 onGenericMotionEvent 的重写,这里记录它的作用
onGenericMotionEvent 从字面上来看无法看出它的作用和使用场景,通过查看 ScrollView 和 ListView 中 onGenericMotionEvent 的重写代码,我认为是对 滚轮的处理,虽然现在滚轮在手机上不常见,但是大多数手机现在都可以接蓝牙鼠标。

ScrollView 的 实现代码如下:
 @Override
    public boolean onGenericMotionEvent(MotionEvent event) {
        if ((event.getSource() & InputDevice.SOURCE_CLASS_POINTER) != 0) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_SCROLL: {
                    //过滤掉触摸拖拽时的事件
                    if (!mIsBeingDragged) {
                        final float vscroll = event.getAxisValue(MotionEvent.AXIS_VSCROLL);
                        if (vscroll != 0) {
                            final int delta = (int) (vscroll * getVerticalScrollFactor());
                            final int range = getScrollRange();
                            int oldScrollY = mScrollY;
                            int newScrollY = oldScrollY - delta;
                    //判断是向上滚动还是向下滚动
                            if (newScrollY < 0) {
                                newScrollY = 0;
                            } else if (newScrollY > range) {
                                newScrollY = range;
                            }
                            if (newScrollY != oldScrollY) {
                    //滚动到指定的地方
                                super.scrollTo(mScrollX, newScrollY);
                                return true;
                            }
                        }
                    }
                }
            }
        }
        return super.onGenericMotionEvent(event);
    }
最近更新