プログラムによるスライド時にViewPagerのアニメーション時間を変更する
2023-12-02 09:58:20
質問
以下のコードでスライドを変更しています。
viewPager.setCurrentItem(index++, true);
しかし、変化が速すぎます。アニメーションの速度を手動で設定する方法はありませんか?
どのように解決するのですか?
私は自分自身を行いたいと思い、解決策を達成しました(ただし、反射を使用して)。
私はまだそれをテストしていないが、それは
になるはずです。
が動作するか、最小限の修正で済むはずです。
Galaxy Nexus JB 4.2.1でテストしています。あなたは
ViewPagerCustomDuration
の代わりに、XML で
ViewPager
を追加すると、このようになります。
ViewPagerCustomDuration vp = (ViewPagerCustomDuration) findViewById(R.id.myPager);
vp.setScrollDurationFactor(2); // make the animation twice as slow
ViewPagerCustomDuration.java
:
import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.animation.Interpolator;
import java.lang.reflect.Field;
public class ViewPagerCustomDuration extends ViewPager {
public ViewPagerCustomDuration(Context context) {
super(context);
postInitViewPager();
}
public ViewPagerCustomDuration(Context context, AttributeSet attrs) {
super(context, attrs);
postInitViewPager();
}
private ScrollerCustomDuration mScroller = null;
/**
* Override the Scroller instance with our own class so we can change the
* duration
*/
private void postInitViewPager() {
try {
Field scroller = ViewPager.class.getDeclaredField("mScroller");
scroller.setAccessible(true);
Field interpolator = ViewPager.class.getDeclaredField("sInterpolator");
interpolator.setAccessible(true);
mScroller = new ScrollerCustomDuration(getContext(),
(Interpolator) interpolator.get(null));
scroller.set(this, mScroller);
} catch (Exception e) {
}
}
/**
* Set the factor by which the duration will change
*/
public void setScrollDurationFactor(double scrollFactor) {
mScroller.setScrollDurationFactor(scrollFactor);
}
}
ScrollerCustomDuration.java
:
import android.annotation.SuppressLint;
import android.content.Context;
import android.view.animation.Interpolator;
import android.widget.Scroller;
public class ScrollerCustomDuration extends Scroller {
private double mScrollFactor = 1;
public ScrollerCustomDuration(Context context) {
super(context);
}
public ScrollerCustomDuration(Context context, Interpolator interpolator) {
super(context, interpolator);
}
@SuppressLint("NewApi")
public ScrollerCustomDuration(Context context, Interpolator interpolator, boolean flywheel) {
super(context, interpolator, flywheel);
}
/**
* Set the factor by which the duration will change
*/
public void setScrollDurationFactor(double scrollFactor) {
mScrollFactor = scrollFactor;
}
@Override
public void startScroll(int startX, int startY, int dx, int dy, int duration) {
super.startScroll(startX, startY, dx, dy, (int) (duration * mScrollFactor));
}
}
これが誰かの助けになることを願っています。
関連
-
[解決済み] ViewPagerで指のスワイプによるページングを無効にし、プログラムによるスワイプはできるようにするにはどうすればよいですか?
-
[解決済み] Bitmapオブジェクトに画像を読み込む際にOutOfMemoryが発生する問題
-
[解決済み] アプリケーションを終了することは嫌われますか?
-
[解決済み] TextViewのリンクをクリック可能にする方法
-
[解決済み] 制約条件の変更をアニメーションで表現するには?
-
[解決済み] ViewPagerでFragmentが表示されるタイミングを決定する方法
-
[解決済み] Android標準のボタンを色違いに
-
[解決済み] RecyclerView onClick
-
[解決済み] 非推奨のandroid.support.v4.app.ActionBarDrawerToggleの置き換え方法
-
[解決済み] WhatsAppでメッセージを送信する
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ViewPagerで指のスワイプによるページングを無効にし、プログラムによるスワイプはできるようにするにはどうすればよいですか?
-
[解決済み] HttpPostによる画像送信
-
[解決済み] Android ConstraintLayout - あるビューを別のビューの上に配置する
-
[解決済み] Gmailの3分割アニメーションシナリオの完全動作サンプル?
-
[解決済み] Androidアプリケーションのヒープサイズを大きくするには?
-
[解決済み] Android StudioからADBを手動で再起動する方法
-
[解決済み] FragmentPagerAdapterのgetItemが呼び出されない
-
[解決済み] 非推奨のandroid.support.v4.app.ActionBarDrawerToggleの置き換え方法
-
[解決済み] Android Lintが翻訳されていない文字列を訴えないようにする。
-
[解決済み] Viewpagerコントローラの速度低下について