ListView のバウンス効果を通常のスクロールビューに追加する方法はありますか? バウンスとは、リストの一番下にヒットしたときの輪ゴムのような効果を意味します。
6 に答える
Androidのリストビューにエフェクトバウンスを追加
ステップ 1 : パッケージ com.base.view に新しいファイル BounceListView を作成する
public class BounceListView extends ListView
{
private static final int MAX_Y_OVERSCROLL_DISTANCE = 200;
private Context mContext;
private int mMaxYOverscrollDistance;
public BounceListView(Context context)
{
super(context);
mContext = context;
initBounceListView();
}
public BounceListView(Context context, AttributeSet attrs)
{
super(context, attrs);
mContext = context;
initBounceListView();
}
public BounceListView(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
mContext = context;
initBounceListView();
}
private void initBounceListView()
{
//get the density of the screen and do some maths with it on the max overscroll distance
//variable so that you get similar behaviors no matter what the screen size
final DisplayMetrics metrics = mContext.getResources().getDisplayMetrics();
final float density = metrics.density;
mMaxYOverscrollDistance = (int) (density * MAX_Y_OVERSCROLL_DISTANCE);
}
@Override
protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent)
{
//This is where the magic happens, we have replaced the incoming maxOverScrollY with our own custom variable mMaxYOverscrollDistance;
return super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, scrollRangeY, maxOverScrollX, mMaxYOverscrollDistance, isTouchEvent);
}
}
ステップ 2:レイアウトを変更してください
<ListView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
に
<com.base.view.BounceListView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
APIの見た目から、クラスを拡張するカスタム ビューを作成するとScrollView
、メソッドをオーバーライドできるはずです。簡単なGoogle検索を行った後、このリンクに出会いました.これがあなたがやろうとしていることのように見えます..onOverScrolled()
ScrollView
BounceListView の最適な実装を見つけました (LGPL ライセンスの下で)。ここにあります:https://github.com/Larphoid/android-Overscroll-ListView
カスタマイズされた Samsung デバイスをお持ちの可能性があります。バウンス効果は Android OS のデフォルトの動作ではなく、Samsung によって導入されたものであることを知っておく必要があります (実装も不十分で、ScrollView
動作を同じにする必要がありました)。オーバースクロールのサポートは Android 2.3 で導入されました。デフォルトの動作はバウンスではなく、スクロール速度/「力」に正比例する強さの光の輝きです。また、どこでも機能します(リストビュー、スクロールビュー、Web ビューなど)。
結論として、これについて心配する必要はありません。そのようにオーバースクロールさせるために渡すことができる単純な引数はありませんScrollView
。そして、クラスを拡張するのに苦労するのScrollView
は価値がありません、IMO. デフォルトの動作に頼るだけです。
サムスンがユーザーを混乱させて一貫性のない UI を提供したいのであれば、それはそれで構いません。
にバウンス効果を実装したい人向けListView
。
方法
この効果を追加する 1 つの方法は、addHeaderView
とaddFooterView
inを使用することListView
であり、それらのパディング (topPadding
ヘッダー ビューとbottomPadding
フッター ビューの場合) が0
初めて に設定されます。次に、 をオーバーライドしonTouchEvent
、移動距離に応じてパディングを変更します。
実装
ノート
このアイデアはandroid-pulltorefreshから借用されています。バウンス効果はプルしてリフレッシュするよりも単純であるため、コードも短くなります。^_^
これが誰かを助けることを願っています..