浏览 1645 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2013-04-27
http://www.eoeandroid.com/forum.php?mod=viewthread&tid=187725&extra=page%3D1&page=1 这里下载: http://ishare.iask.sina.com.cn/f/35209241.html 不过看了下代码感觉还蛮复杂的, 后来就想自己搞搞, 思考一会后发现其实只要知道scrollbar的位置 然后再scrollbar上面浮一个view不就是了吗? 然后很自然的想到在listview的 onScrollListener里面去干这件事。 通过算出listview滚动的高度,listview所占的高度,和listview里面items的总高度, 可以算出浮动层所在的位置, 其实在Y轴上就是scrollbar的Y。 附件里面是代码。 list_view.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if (list_view.getChildAt(0) != null) { Log.i(TAG, "getChildAt(0) Top:" + list_view.getChildAt(0).getTop()); Log.i(TAG, "getFirstVisiblePosition:" + list_view.getFirstVisiblePosition()); // Log.i(TAG, "FirstVisiblePosition Top:" + list_view.getChildAt(list_view.getFirstVisiblePosition()).getTop()); int scrolly = -list_view.getChildAt(0).getTop() + list_view.getChildAt(0).getMeasuredHeight() * list_view.getFirstVisiblePosition() + list_view.getDividerHeight() * list_view.getChildAt(0).getMeasuredHeight(); Log.i(TAG, "ScrollY:" + scrolly); int listviewHeight = list_view.getMeasuredHeight(); int listviewContentHeight = list_view.getChildAt(0).getMeasuredHeight() * 100; Log.i(TAG, "listviewHeight:" + listviewHeight + ", listviewContentHeight:" + listviewContentHeight); float floatY = (float)listviewHeight / listviewContentHeight * scrolly; RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) tvText.getLayoutParams(); int RealScrollY = (int)floatY - tvText.getMeasuredHeight() / 2; Log.i(TAG, "RealScrollY:" + RealScrollY); layoutParams.topMargin = RealScrollY; tvText.setLayoutParams(layoutParams); // layoutParams.y = RealScrollY; // tvText.layout(0, RealScrollY, tvText.getMeasuredWidth(), RealScrollY + tvText.getMeasuredHeight()); } } }); 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |