android - 动态改变高度的listview
怪我咯
怪我咯 2017-04-17 17:16:56
0
2
250

高德地图,谷歌地图,百度地图等android端搜索结果界面中,放置结果的listview响应触摸事件动态改变高度,在向上滑的过程中,不触发scroll事件是如何办到的?触摸listView的item,move过程改变listView高度,效果就是截图的样子(别嫌弃)。

怪我咯
怪我咯

走同样的路,发现不同的人生

모든 응답 (2)
Peter_Zhu

差不多是这个样子

@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); }
    Ty80

    提供一个思路吧。

    点击的并不是listview本身。比如你写个自定义view。然后里头是listview。

    向上滑动时:当点击你的自定义view时判断一下listview数据的个数。如果数量够多的话。那么就把touch事件拦截下来。去移动view的位置

    向下滑动时:不拦截事件。给listview写一个回调。当listview滑到第一条数据的时候。去滑动外层的自定义view

    你可以在一开始先把自定义view移出屏幕。之后再移回来。像图这样子。。。

      최신 다운로드
      더>
      웹 효과
      웹사이트 소스 코드
      웹사이트 자료
      프론트엔드 템플릿
      회사 소개 부인 성명 Sitemap
      PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!