android2.3 监控鼠标滑动事件

鼠标滑过图标时(ImageButton), 在button的onTouch事件中,能检测到鼠标的滑动。

1. ViewRoot.javad ispatchMotion(MotionEvent event, boolean sendDone) 能检测到鼠标的事件。

 

    boolean isDown = false;
    private void dispatchMotion(MotionEvent event, boolean sendDone) {
        int source = event.getSource();
        int action = event.getAction();
        if ((source & InputDevice.SOURCE_CLASS_POINTER) != 0) {
            boolean isMouse = ((source & InputDevice.SOURCE_MOUSE) ^ InputDevice.SOURCE_MOUSE) == 0;
            dispatchPointer(event, sendDone);
            
        } else if ((source & InputDevice.SOURCE_CLASS_TRACKBALL) != 0) {
            dispatchTrackball(event, sendDone);
        } else {
            // TODO
            Log.v(TAG, "Dropping unsupported motion event (unimplemented): " + event);
            if (sendDone) {
                finishInputEvent();
            }
        }
    }

2. 在ViewGroup.java中,接受自定义的事件。

在dispatchTouchEvent(MotionEvent ev)方法中,增加对事件的处理。

if (action == MotionEvent.ACTION_HOVER_MOVE) {  
            if (mMotionTarget != null) {
                mMotionTarget = null;
            }
            // If we're disallowing intercept or if we're allowing and we didn't  
            // intercept  
            if (disallowIntercept || !onInterceptTouchEvent(ev)) {  
                // We know we want to dispatch the event down, find a child  
                // who can handle it, start with the front-most child.  
                final int scrolledXInt = (int) scrolledXFloat;  
                final int scrolledYInt = (int) scrolledYFloat;  
                final View[] children = mChildren;  
                final int count = mChildrenCount;  
                for (int i = count - 1; i >= 0; i--) {  
                    final View child = children[i];  
                    if ((child.mViewFlags & VISIBILITY_MASK) == VISIBLE  
                            || child.getAnimation() != null) {  
                        child.getHitRect(frame);  
                        if (frame.contains(scrolledXInt, scrolledYInt)) {  
                            // offset the event to the view's coordinate system  
                           final float xc = scrolledXFloat - child.mLeft;  
                            final float yc = scrolledYFloat - child.mTop;  
                            ev.setLocation(xc, yc);  
                            if (child.dispatchTouchEvent(ev))  {  
                                mMotionTarget = child;
                                return true;  
                            }  
                            // The event didn't get handled, try the next view.  
                            // Don't reset the event's location, it's not  
                            // necessary here.  
                        }  
                    }  
                } 
		return true;            }  
        }

MotionEvent.ACTION_HOVER 的定义见下一篇。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值