关于如何让SlidingDrawer在展开后,滑动内容区域可回抽屉。

如过程图:

内容区域是一个可滑动区域(内容会超过1屏幕),业务需求是: 当内容为顶端时,向下滑动可以使得抽屉收回。

这个任务乍看起来很麻烦,其实很简答。当然这个简单是相对于找到好的办法去解决该问题而说的。


SlidingDrawer基础知识就不再普及了,说下具体实现的思路。

解决 如何判定内容区域就是在顶端?

方法: Content 的布局是一个Listview,里面有2个item,Item1是一个不可见的,大小为1px的View。 用于标识当前可见View,在ListView中设置滑动监听,在OnScroll里有参数 firstVisibleItem 来用于告诉你,当前显示的是第几个item。

如下:

  lv.setOnScrollListener(new OnScrollListener() {
 			
 			@Override
 			public void onScrollStateChanged(AbsListView view, int scrollState) {
 				// TODO Auto-generated method stub
 				
 			}
 			
 			@Override
 			public void onScroll(AbsListView view, int firstVisibleItem,
 					int visibleItemCount, int totalItemCount) {
// 				Log.e("",""+ firstVisibleItem);
 				
 				// TODO Auto-generated method stub
 				if(firstVisibleItem==0){
 					flag = true;
 				}else{
 					flag = false ;
 				}
 			}
 		});
    }
同时,我设置了一个Flag用于标识,当Item1可见时,就是在Listview的顶端。再向下滑动的时候,同时关闭SlidingDrawer
OnTouchListener lvOnTouchListener = new OnTouchListener() {
		
		@Override
		public boolean onTouch(View v, MotionEvent event) {
			// TODO Auto-generated method stub
		switch (event.getAction()) {
					
					case MotionEvent.ACTION_DOWN:
						 y = event.getY();
					break ;
					case MotionEvent.ACTION_MOVE:
					final float preY = y;
		            float nowY = event.getY();
		            int deltaY = (int) (preY - nowY);
//		            Log.e("deltaY", ""+deltaY);
		            
					if(deltaY<0 && flag){
						sd.animateClose();
					}
						break;
		
					default:
						break;
					}
					return false;
		}
	};
sd.animateClose();



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值