9

ViewPager でページをスクロールするためのタッチしきい値を変更する方法を見つけることができません: http://developer.android.com/reference/android/support/v4/view/ViewPager.html

ソース コードを見ると、ViewPager には、移動タッチ ジェスチャの距離 > しきい値の範囲かどうかを確認する決定ターゲットページというメソッドがありますが、この範囲を変更する方法はないようです。

このしきい値を制御する方法に関する提案はありますか (可能な場合)?

4

1 に答える 1

11

ここで少し手足を出します。この概念やコードを微調整する必要があることは間違いありません。

上記のコメントで行ったことをお勧めします。そのパブリックコンストラクターを拡張ViewPagerおよびオーバーライドし、initViewPager()(提供したソースに表示されている) のクローンであるカスタムメソッドを呼び出します。ただし、お気づきのとおり、mFlingDistancemMinimumVelocity、およびmMaximumVelocityprivateフィールドであるため、サブクラスからアクセスすることはできません。

(注:必要に応じて、コンストラクターが呼び出された後にこれらのメソッドを変更することもできます。)

ここが少し難しいところです。Android では、Java Reflection APIを使用して、これらのフィールドにアクセスできるようにすることができます。

次のように動作するはずです。

Class clss = getClass.getSuperClass();
Field flingField = clss.getDeclaredField("mFlingDistance"); // Of course create other variables for the other two fields
flingField.setAccessible(true);
flingField.setInt(this, <whatever int value you want>); // "this" must be the reference to the subclass object

次に、他の 2 つの変数について、必要な値を指定してこれを繰り返します。これらがソースでどのように計算されているかを確認することをお勧めします。

残念ながら、リフレクションを使用してprivatemethodをオーバーライドすることをお勧めしたいdetermineTargetPage()のですが、拡張的なリフレクション API を使用しても、これが可能だとは思えません。

于 2012-07-31T06:37:19.783 に答える