ここで少し手足を出します。この概念やコードを微調整する必要があることは間違いありません。
上記のコメントで行ったことをお勧めします。そのパブリックコンストラクターを拡張ViewPager
およびオーバーライドし、initViewPager()
(提供したソースに表示されている) のクローンであるカスタムメソッドを呼び出します。ただし、お気づきのとおり、mFlingDistance
、mMinimumVelocity
、およびmMaximumVelocity
はprivate
フィールドであるため、サブクラスからアクセスすることはできません。
(注:必要に応じて、コンストラクターが呼び出された後にこれらのメソッドを変更することもできます。)
ここが少し難しいところです。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 つの変数について、必要な値を指定してこれを繰り返します。これらがソースでどのように計算されているかを確認することをお勧めします。
残念ながら、リフレクションを使用してprivate
methodをオーバーライドすることをお勧めしたいdetermineTargetPage()
のですが、拡張的なリフレクション API を使用しても、これが可能だとは思えません。