[解決済み] Viewpagerコントローラの速度低下について
2022-10-18 17:11:53
質問
androidのビューページャーアダプターで、スクロール速度を遅くする方法はありますか?
このコードを見ても 何を間違えているのかがわからない。
try{
Field mScroller = mPager.getClass().getDeclaredField("mScroller");
mScroller.setAccessible(true);
Scroller scroll = new Scroller(cxt);
Field scrollDuration = scroll.getClass().getDeclaredField("mDuration");
scrollDuration.setAccessible(true);
scrollDuration.set(scroll, 1000);
mScroller.set(mPager, scroll);
}catch (Exception e){
Toast.makeText(cxt, "something happened", Toast.LENGTH_LONG).show();
}
何も変わらないのに例外が発生しない?
どのように解決するのですか?
私はHighFlyerのコードから始めました。これは確かにmScrollerフィールドを変更しましたが(これは素晴らしいスタートです)、ViewPagerがスクロールを要求するときに明示的にmScrollerに期間を渡すので、スクロールの期間を延長する助けにはなりませんでした。
ViewPager を拡張しても、重要なメソッド (smoothScrollTo) がオーバーライドできないため、機能しませんでした。
結局、このコードでScrollerを拡張することで解決しました。
public class FixedSpeedScroller extends Scroller {
private int mDuration = 5000;
public FixedSpeedScroller(Context context) {
super(context);
}
public FixedSpeedScroller(Context context, Interpolator interpolator) {
super(context, interpolator);
}
public FixedSpeedScroller(Context context, Interpolator interpolator, boolean flywheel) {
super(context, interpolator, flywheel);
}
@Override
public void startScroll(int startX, int startY, int dx, int dy, int duration) {
// Ignore received duration, use fixed one instead
super.startScroll(startX, startY, dx, dy, mDuration);
}
@Override
public void startScroll(int startX, int startY, int dx, int dy) {
// Ignore received duration, use fixed one instead
super.startScroll(startX, startY, dx, dy, mDuration);
}
}
そして、このように使うことで
try {
Field mScroller;
mScroller = ViewPager.class.getDeclaredField("mScroller");
mScroller.setAccessible(true);
FixedSpeedScroller scroller = new FixedSpeedScroller(mPager.getContext(), sInterpolator);
// scroller.setFixedDuration(5000);
mScroller.set(mPager, scroller);
} catch (NoSuchFieldException e) {
} catch (IllegalArgumentException e) {
} catch (IllegalAccessException e) {
}
基本的にデュレーションを5秒にハードコーディングして、ViewPagerに使わせています。
これが役に立つといいのですが。
関連
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] Androidの「コンテキスト」とは何ですか?
-
[解決済み] AndroidでPythonを実行する方法はありますか?
-
[解決済み] AndroidのListViewで画像を遅延ロードする方法
-
[解決済み] EclipseのAndroidプラグインで "Debug certificate expired "エラーが発生する。
-
[解決済み] Androidで画面の大きさをピクセル単位で取得する方法
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
-
[解決済み] Androidでマイナスマージンを使用するのは悪いことですか?
-
[解決済み] Androidのadb logcatでTAG名で特定のメッセージを除外する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 深くネストされたスタックから離れるとき、Fragmentのバックスタックをクリーンアップする方法はこれで良いのでしょうか?
-
[解決済み] CardView layout_width="match_parent "が親のRecyclerViewの幅と一致しない。
-
[解決済み] Androidでマイナスマージンを使用するのは悪いことですか?
-
[解決済み] Android Studio - あいまいなメソッド呼び出し getClass()
-
[解決済み] アプリ内課金テスト:android.test.purchased already owned
-
[解決済み] データベースでリサイクルビューを使用する
-
[解決済み] 通知をクリックした後にアプリケーションを開く
-
[解決済み] アンドロイドでシェイクを検出するには?
-
[解決済み] proguard hell - 参照されているクラスが見つかりません。
-
[解決済み] AsyncTaskLoaderとAsyncTaskの比較