Ändern der Geschwindigkeit des Übergangs von ViewPager und setCurrentItem

Ich habe einen ViewPager, den ich automatisch alle 5 Sekunden drehen möchte, während ich auch dem Benutzer erlauben kann, auch zu wischen. Wenn ich aber den automatischen Wechsel setze, passiert die Übergangsanimation zwischen den Seiten wirklich schnell, und ich möchte, dass dies langsamer ist.

Ich habe hier die Antworten auf diese Frage gesehen

  • Android-Einstellungen Fehler, "String kann nicht in int"
  • Wie man Fehler behebt "Konnte Mac OS X Version von sw_vers Ausgabe nicht entdecken: '10 .12 '" von Appium
  • Android Paint: Wie bekomme ich "Airbrush" -Effekt?
  • Android Wikipedia Artikelsuche nicht richtig in meiner Webansicht anzeigen?
  • Wie kann ich einen einzigen Test mit gradle android ausführen?
  • Wie kann ich das Bild in Android ändern?
  • Verlangsamende Geschwindigkeit von Viewpager-Controller in Android

    Aber sie alle verwenden Reflexion. Kennt jemand irgendeine Weise, die automatische Geschwindigkeit eines ViewPagers zu verlangsamen, ohne Reflexion zu verwenden?

    Ich dachte daran, einen PageTransformer zu benutzen, aber nicht sicher, ob das funktionieren würde, und auch das würde wahrscheinlich die Geschwindigkeit beeinflussen, wenn der Benutzer sowohl die automatische als auch die automatische abwischen würde? Es sei denn, ich kann irgendwie den Unterschied erkennen und dann eine oder andere PageTransformation?

  • Anpassen von Webseiteninhalten in einer Webansicht (Android)
  • Mockito + Dexmaker auf Android
  • C / C ++ printfs - Wo wird es in einem Android nativen Code angezeigt?
  • Kann ich ein BuildConfig-Flag setzen, das zurückgibt, ob ein apk mit dem `connectedAndroidTest` gradle-Task gebaut wird oder nicht?
  • Wie beeinflusst der Doze-Modus den Hintergrund / die Vordergrunddienste mit / ohne Teil- / Vollwackel
  • Wie zeigt man Unbestimmte Fortschrittsleiste an, wenn die Refresh-Taste in ActionBarSherlock gedrückt wird?
  • 2 Solutions collect form web for “Ändern der Geschwindigkeit des Übergangs von ViewPager und setCurrentItem”

    Verwenden Sie diese benutzerdefinierte View

     public class ViewPagerCustomDuration extends ViewPager { private FixedSpeedScroller mScroller = null; public ViewPagerCustomDuration(Context context) { super(context); init(); } public ViewPagerCustomDuration(Context context, AttributeSet attrs) { super(context, attrs); init(); } /* * Override the Scroller instance with our own class so we can change the * duration */ private void init() { try { Class<?> viewpager = ViewPager.class; Field scroller = viewpager.getDeclaredField("mScroller"); scroller.setAccessible(true); mScroller = new FixedSpeedScroller(getContext(), new DecelerateInterpolator()); scroller.set(this, mScroller); } catch (Exception ignored) { } } /* * Set the factor by which the duration will change */ public void setScrollDuration(int duration) { mScroller.setScrollDuration(duration); } private class FixedSpeedScroller extends Scroller { private int mDuration = 500; 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); } public void setScrollDuration(int duration) { mDuration = duration; } } } 

    Zeitplan-Timer-Option verwenden, um die Seiten automatisch zu drehen.

     int i = 0; static Timer timer = new Timer(); //Scroller scroll = new Scroller(this); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.simple_circles); mAdapter = new TestFragmentAdapter(getSupportFragmentManager()); mPager = (ViewPager) findViewById(R.id.pager); mPager.setAdapter(mAdapter); mIndicator = (CirclePageIndicator) findViewById(R.id.indicator); mIndicator.setViewPager(mPager); mPager.setCurrentItem(i); SwitchPage(3); } public void SwitchPage(int seconds) 

    {

     if(timer != null) { timer.cancel(); } timer = new Timer(); // At this line a new Thread will be created timer.schedule(new SwitchPageTask(), 2000, seconds * 2000); // delay in milliseconds } class SwitchPageTask extends TimerTask { @Override public void run() { runOnUiThread(new Runnable() { public void run() { if(i < mAdapter.getCount()) { i++; mPager.setCurrentItem(i, true); } else { i=0; mPager.setCurrentItem(i, true); } } }); } } just cancel the timer like.. timer.cancel().. or cancel timer from another activity or fragment activity.. textView1_page3.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (SampleCirclesDefault.timer != null) { SampleCirclesDefault.timer.cancel(); Toast.makeText(getActivity(), "timer cancled", 1).show(); } } }); 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.