Path timeline android草の根の実現方式。
2984 ワード
ネットで探しました このようなセットがありますか?国内のやつが実現したのを見つけました。アニメの効果はなかなかいいです。
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のonScrrollListenerの中でこの仕事をしたいと思います。 listviewスクロールの高さを算出することで、listviewが占めている高さと、listviewの中のitemsの総高さを算出することで、フロート層の位置を算出することができます。 実はY軸にはscrollbarのYがあります。 添付ファイルはコードです。
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のonScrrollListenerの中でこの仕事をしたいと思います。 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());
}
}
});