百度地图查询视野范围内的建筑物(二)

本文探讨了在Android应用中,如何处理键盘事件与百度地图内部事件之间的冲突,特别是如何在使用键盘上下左右键时,避免触发百度地图的MoveFinished事件,同时保持应用的正常交互体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本篇博客主要的研究内容主要解决基于使用键盘上下左右键时,无法触发百度地图的MoveFinished的事件的问题。百度地图查询视野范围内的建筑物参看博客http://blog.csdn.net/fengshuiyue/article/details/9155463。

  1. android手机按键事件消息传递过程
    • 只有一个Activity时:一次拇指点击事件(包括ACTION_DOWN,ACTION_UP),调用时序如下:

    dispatchTouchEvent
    onUserInteraction
    onTouchEvent (ACTION_DOWN)
    dispatchTouchEvent 
    onTouchEvent (ACTION_UP,不会触发onUserInteraction)

    • 只有一个Activity,当键盘键按下时,时序如下:
    dispatchKeyEvent
    onUserInteraction
    onKeyDown
    dispatchKeyEvent
    onUserInteraction
    onKeyUp (注意与触摸不同,当松开按键时onUserInteraction也会触发。)
    • Activity里有一个Layout,在Layout里有个按钮。一次拇指触摸点击事件(包括ACTION_DOWN,ACTION_UP),方法逻辑顺序如下:
    Activity的dispatchTouchEvent
    Activity的onUserInteraction
    Layout的dispatchTouchEvent
    Layout的onInterceptTouchEvent
    Button的onTouchEvent(ACTION_DOWN)
    紧跟着是一个ACTION_UP事件
    Activity的dispatchTouchEvent(不触发Activity的onUserInteraction,它对ACTION_UP不起作用。)
    Layout的dispatchTouchEvent
    Layout的onInterceptTouchEvent
    Button的onTouchEvent
    Button的onClick

    VIEW和Activity本身都有相应键盘事件的ONKEYUP和ONKEYDOWN。对于VIEW,可以setOnKeyListener监听键盘事件,如果既对VIEW写了上述侦听,又覆写了ONKEYUP,DOWN事件,那么首先进入ONKEYDOWN,ONKEYUP。

    上述只要有一个函数中返回true,则相应到当前函数位置,不在继续传递。

  2. 地图工程对于上下左右键的处理
    • 思路:在activity方法中,复写dispatchKeyEvent方法
    • 代码
    public boolean dispatchKeyEvent (KeyEvent event){
    		Log.e(TAG,"dispatchKeyEvent");
    		if((event.getKeyCode() ==KeyEvent.KEYCODE_DPAD_LEFT
    				||event.getKeyCode()==KeyEvent.KEYCODE_DPAD_RIGHT
    				||event.getKeyCode()==KeyEvent.KEYCODE_DPAD_UP
    				||event.getKeyCode()==KeyEvent.KEYCODE_DPAD_DOWN)
    				&&level == LEVEL_MAP){
    			Log.e(TAG,"dispatchKeyEvent return true");
    			boolean flag = mMapView.dispatchKeyEvent(event);
    			if(flag){
    				BsnsDisAllActivity.this.getBsnsDisInfo(BsnsDisAllActivity.this.getGeoPointMap());
    			}
    			Log.e(TAG,"mMapView dispathKeyEvent:"+flag);
    			return flag;
    		}
    		return super.dispatchKeyEvent(event);	
    	}

  3. 疑问
  • 百度地图是如何早于activity的onKeydown事件捕获到上下左右键的按键信息?
  • 百度地图在相应上下左右键按键信息后,没有触发MoveFinished事件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风水月

从心底相信自己是成功的第一步

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值