84669인 학습
152542인 학습
20005인 학습
5487인 학습
7821인 학습
359900인 학습
3350인 학습
180660인 학습
48569인 학습
18603인 학습
40936인 학습
1549인 학습
1183인 학습
32909인 학습
高德地图,谷歌地图,百度地图等android端搜索结果界面中,放置结果的listview响应触摸事件动态改变高度,在向上滑的过程中,不触发scroll事件是如何办到的?触摸listView的item,move过程改变listView高度,效果就是截图的样子(别嫌弃)。
走同样的路,发现不同的人生
差不多是这个样子
@Override public boolean onTouchEvent(MotionEvent event) { //lastY:上一个event时坐标Y值(getRawY()),Y:此次event lastY = Y; Y = (int) event.getRawY(); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: //downY:记录按下时的值 downY = Y; break; case MotionEvent.ACTION_MOVE: //第一个item被拉倒顶端时,设置flag=1,开始动态改变listview的高度 int top = this.getChildAt(0).getTop(); if(top == 0 && (Y - downY) > 10 && flag == 0) { flag = 1; } if(flag == 1) { //动态改变listview高度 RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) this.getLayoutParams(); layoutParams.height = this.getHeight() - (Y - lastY > 0 ? Math.abs(Y - lastY) : - Math.abs(Y - lastY)); this.setLayoutParams(layoutParams); //阻止scroll事件 return true; } break; case MotionEvent.ACTION_UP: lastY = 0; Y = 0; flag = 0; break; } return super.onTouchEvent(event); }
提供一个思路吧。
点击的并不是listview本身。比如你写个自定义view。然后里头是listview。
向上滑动时:当点击你的自定义view时判断一下listview数据的个数。如果数量够多的话。那么就把touch事件拦截下来。去移动view的位置
向下滑动时:不拦截事件。给listview写一个回调。当listview滑到第一条数据的时候。去滑动外层的自定义view
你可以在一开始先把自定义view移出屏幕。之后再移回来。像图这样子。。。
差不多是这个样子
提供一个思路吧。
点击的并不是listview本身。比如你写个自定义view。然后里头是listview。
向上滑动时:当点击你的自定义view时判断一下listview数据的个数。如果数量够多的话。那么就把touch事件拦截下来。去移动view的位置
向下滑动时:不拦截事件。给listview写一个回调。当listview滑到第一条数据的时候。去滑动外层的自定义view
你可以在一开始先把自定义view移出屏幕。之后再移回来。像图这样子。。。