Skip to content

Commit 6aa88f8

Browse files
committed
AutoHideButtonFloat for ListView
This the extended version of the AutoHideButtonFloat view for using with ListViews. Use `setListView` to assign the respective ListView and use AutoHideFloatButton.setOnScrollListener to set extra listener for the ListView.
1 parent 9324f50 commit 6aa88f8

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package com.gc.materialdesign.views;
2+
3+
import android.content.Context;
4+
import android.util.AttributeSet;
5+
import android.view.View;
6+
import android.widget.AbsListView;
7+
import android.widget.ListView;
8+
9+
import com.gc.materialdesign.views.ButtonFloat;
10+
import com.nineoldandroids.view.ViewPropertyAnimator;
11+
12+
/**
13+
* Created by hamedpc on 4/25/2015.
14+
* This widget uses NineOldAndroid to animate the view so you're gonna need to include it in your project
15+
*/
16+
public class AutoHideButtonFloat extends ButtonFloat implements AbsListView.OnScrollListener {
17+
ListView listView;
18+
private boolean floatHiding = false, floatShowing = false;
19+
private int mLastFirstVisibleItem;
20+
private View view = this;
21+
private AbsListView.OnScrollListener onScrollListener;
22+
23+
public AutoHideButtonFloat(Context context, AttributeSet attrs) {
24+
super(context, attrs);
25+
}
26+
27+
public void setOnScrollListener(AbsListView.OnScrollListener onScrollListener) {
28+
this.onScrollListener = onScrollListener;
29+
}
30+
31+
public void setListView(ListView listView) {
32+
this.listView = listView;
33+
this.listView.setOnScrollListener(this);
34+
}
35+
36+
@Override
37+
public void onScrollStateChanged(AbsListView absListView, int scrollState) {
38+
switch (scrollState) {
39+
case AbsListView.SCROLL_AXIS_NONE:
40+
floatHiding = false;
41+
floatShowing = false;
42+
ViewPropertyAnimator.animate(view).translationY(0).setDuration(300);
43+
break;
44+
}
45+
if (onScrollListener != null)
46+
onScrollListener.onScrollStateChanged(absListView, scrollState);
47+
}
48+
49+
@Override
50+
public void onScroll(AbsListView absListView, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
51+
52+
if (mLastFirstVisibleItem < firstVisibleItem) {
53+
if (floatShowing) floatShowing = false;
54+
if (!floatHiding) {
55+
ViewPropertyAnimator.animate(view).translationY(500).setDuration(300);
56+
floatHiding = true;
57+
}
58+
}
59+
if (mLastFirstVisibleItem > firstVisibleItem) {
60+
if (floatHiding) {
61+
floatHiding = false;
62+
}
63+
if (!floatShowing) {
64+
ViewPropertyAnimator.animate(view).translationY(0).setDuration(300);
65+
floatShowing = true;
66+
}
67+
}
68+
mLastFirstVisibleItem = firstVisibleItem;
69+
if (onScrollListener != null)
70+
onScrollListener.onScroll(absListView, firstVisibleItem, visibleItemCount, totalItemCount);
71+
}
72+
}

0 commit comments

Comments
 (0)