当前位置: 代码迷 >> Android >> Path timeline android草根的兑现方式
  详细解决方案

Path timeline android草根的兑现方式

热度:125   发布时间:2016-05-01 10:31:50.0
Path timeline android草根的实现方式。
在网上找了下   想看看有没有这样的组件。 发现有一个国内的家伙实现了, 动画效果做得还蛮酷的。
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());                }            }        });

  相关解决方案