Android自定义拖拉窗控件

    在项目中有这样一个需求,一张全屏的地图,上面覆盖一个窗口显示路线列表,而这个窗口是个拖拉窗,可以全屏,半屏,和不显示,这个跟IOS7和android中的消息栏有点像,只不过可以拖到中间。Android中有一个SlidingDrawer控件,但无法满足上面说的三个状态,自己就写了一个,把demo简单介绍一下。

    实现原理还是比较简单,一个FrameLayout做容器,里面直接显示地图,然后再在上面放一个Layout做为drawer layout,剩下的就是让这个drawer layout在处理onTouch事件,拖动时改变位置,点击时改变状态等。需要注意的一个问题是,手指离开屏幕后,drawer layout能自动滑动到对应的状态位置(底部,中间,上面),此时只能使用property animation或者自己去重绘动画,如果使用属性动画的话,程序又要支持低版本,可以使用nineoldandroid兼容包(属性动画api11才开始支持)。

demo github地址:https://github.com/dfqin/SlidingDrawer


部分代码:

private void move2Bottom(int duration){
			if(duration < 100){
				duration = 100;
				Log.e("", "move2Top(int duration, boolean isUp) pass the wrong duration");
			}
			state = DrawerState.Bottom;
			ObjectAnimator ani;
			if(duration == FAST_ANIMATION_DURATION || duration < 200){
				ani = ObjectAnimator.ofFloat(drawer, "translationY", 0, containerHeight - drawer.getTop() - DRAG_BAR_VALUE ).setDuration(duration);
			} else {
				int offTemp = containerHeight - drawer.getTop() - DRAG_BAR_VALUE;
				ani = ObjectAnimator.ofFloat(drawer, "translationY", 0, offTemp, offTemp - ANIMATION_BOUND_VALUE, offTemp ).setDuration(duration);
			}
			ani.addListener(this);
			ani.start();
		}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值