13

ListView のバウンス効果を通常のスクロールビューに追加する方法はありますか? バウンスとは、リストの一番下にヒットしたときの輪ゴムのような効果を意味します。

4

6 に答える 6

19

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"
/>
于 2012-11-15T03:10:01.767 に答える
11

APIの見た目から、クラスを拡張するカスタム ビューを作成するとScrollView、メソッドをオーバーライドできるはずです。簡単なGoogle検索を行った後、このリンクに出会いました.これがあなたがやろうとしていることのように見えます..onOverScrolled()ScrollView

于 2011-08-26T13:52:02.860 に答える
5

BounceListView の最適な実装を見つけました (LGPL ライセンスの下で)。ここにあります:https://github.com/Larphoid/android-Overscroll-ListView

于 2013-10-01T23:33:06.943 に答える
3

カスタマイズされた Samsung デバイスをお持ちの可能性があります。バウンス効果は Android OS のデフォルトの動作ではなく、Samsung によって導入されたものであることを知っておく必要があります (実装も不十分で、ScrollView動作を同じにする必要がありました)。オーバースクロールのサポートは Android 2.3 で導入されました。デフォルトの動作はバウンスではなく、スクロール速度/「力」に正比例する強さの光の輝きです。また、どこでも機能します(リストビュー、スクロールビュー、Web ビューなど)。

結論として、これについて心配する必要はありません。そのようにオーバースクロールさせるために渡すことができる単純な引数はありませんScrollView。そして、クラスを拡張するのに苦労するのScrollViewは価値がありません、IMO. デフォルトの動作に頼るだけです。

サムスンがユーザーを混乱させて一貫性のない UI を提供したいのであれば、それはそれで構いません。

于 2011-08-26T13:59:49.430 に答える
0

にバウンス効果を実装したい人向けListView

方法

この効果を追加する 1 つの方法は、addHeaderViewaddFooterViewinを使用することListViewであり、それらのパディング (topPaddingヘッダー ビューとbottomPaddingフッター ビューの場合) が0初めて に設定されます。次に、 をオーバーライドしonTouchEvent、移動距離に応じてパディングを変更します。

実装

サンプルコード

ノート

このアイデアはandroid-pulltorefreshから借用されています。バウンス効果はプルしてリフレッシュするよりも単純であるため、コードも短くなります。^_^

これが誰かを助けることを願っています..

于 2015-08-12T09:31:21.903 に答える