diff --git a/sample/src/main/java/com/tmall/ultraviewpager/sample/PagerActivity.java b/sample/src/main/java/com/tmall/ultraviewpager/sample/PagerActivity.java index c59fc77..e208f35 100644 --- a/sample/src/main/java/com/tmall/ultraviewpager/sample/PagerActivity.java +++ b/sample/src/main/java/com/tmall/ultraviewpager/sample/PagerActivity.java @@ -234,6 +234,7 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { } if (buttonView == autoScrollCheckBox) { if (isChecked) { + ultraViewPager.setAutoScrollSpeed(1000); SparseIntArray special = new SparseIntArray(); special.put(0, 5000); special.put(1, 1500); diff --git a/ultraviewpager/src/main/java/com/tmall/ultraviewpager/IUltraViewPagerFeature.java b/ultraviewpager/src/main/java/com/tmall/ultraviewpager/IUltraViewPagerFeature.java index 14b0bbf..d8622e4 100644 --- a/ultraviewpager/src/main/java/com/tmall/ultraviewpager/IUltraViewPagerFeature.java +++ b/ultraviewpager/src/main/java/com/tmall/ultraviewpager/IUltraViewPagerFeature.java @@ -28,6 +28,7 @@ import android.graphics.Bitmap; import android.util.SparseIntArray; +import android.view.animation.Interpolator; /** * Created by mikeafc on 15/11/30. @@ -97,6 +98,21 @@ interface IUltraViewPagerFeature { */ void setAutoScroll(int intervalInMillis, SparseIntArray intervalArray); + /** + * Set the scroll speed for this ViewPager. + * + * @param duration The default duration to scroll + */ + void setAutoScrollSpeed(int duration); + + /** + * Set the scroll speed and interpolator for this ViewPager. + * + * @param duration The default duration to scroll + * @param interpolator The default interpolator to scroll + */ + void setAutoScrollSpeed(int duration, Interpolator interpolator); + /** * Disable auto-scroll mode */ diff --git a/ultraviewpager/src/main/java/com/tmall/ultraviewpager/UltraViewPager.java b/ultraviewpager/src/main/java/com/tmall/ultraviewpager/UltraViewPager.java index 70f4674..c9255fe 100644 --- a/ultraviewpager/src/main/java/com/tmall/ultraviewpager/UltraViewPager.java +++ b/ultraviewpager/src/main/java/com/tmall/ultraviewpager/UltraViewPager.java @@ -34,11 +34,11 @@ import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.util.AttributeSet; -import android.util.Log; import android.util.SparseIntArray; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; +import android.view.animation.Interpolator; import android.widget.RelativeLayout; /** @@ -328,6 +328,16 @@ public void setAutoScroll(int intervalInMillis, SparseIntArray intervalArray) { startTimer(); } + @Override + public void setAutoScrollSpeed(int duration) { + viewPager.setAutoScrollSpeed(duration); + } + + @Override + public void setAutoScrollSpeed(int duration, Interpolator interpolator) { + viewPager.setAutoScrollSpeed(duration, interpolator); + } + @Override public void disableAutoScroll() { stopTimer(); diff --git a/ultraviewpager/src/main/java/com/tmall/ultraviewpager/UltraViewPagerScroller.java b/ultraviewpager/src/main/java/com/tmall/ultraviewpager/UltraViewPagerScroller.java new file mode 100644 index 0000000..8e08899 --- /dev/null +++ b/ultraviewpager/src/main/java/com/tmall/ultraviewpager/UltraViewPagerScroller.java @@ -0,0 +1,37 @@ +package com.tmall.ultraviewpager; + +import android.content.Context; +import android.view.animation.Interpolator; +import android.widget.Scroller; + +/** + * Created by Jimmy Sun on 19/04/16. + */ +class UltraViewPagerScroller extends Scroller { + private int mDuration = 1000; + + UltraViewPagerScroller(Context context, Interpolator interpolator) { + super(context, interpolator); + } + + @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); + } + + /** + * Set the scroll speed. + * + * @param duration The default duration to scroll + */ + void setScrollDuration(int duration) { + mDuration = duration; + } +} diff --git a/ultraviewpager/src/main/java/com/tmall/ultraviewpager/UltraViewPagerView.java b/ultraviewpager/src/main/java/com/tmall/ultraviewpager/UltraViewPagerView.java index 1d7d759..9921771 100644 --- a/ultraviewpager/src/main/java/com/tmall/ultraviewpager/UltraViewPagerView.java +++ b/ultraviewpager/src/main/java/com/tmall/ultraviewpager/UltraViewPagerView.java @@ -30,13 +30,15 @@ import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.util.AttributeSet; -import android.util.TypedValue; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; +import android.view.animation.Interpolator; import com.tmall.ultraviewpager.transformer.UltraVerticalTransformer; +import java.lang.reflect.Field; + /** * Created by mikeafc on 15/11/25. */ @@ -266,6 +268,25 @@ public void setMultiScreen(float ratio) { } } + public void setAutoScrollSpeed(int duration) { + setAutoScrollSpeed(duration, null); + } + + public void setAutoScrollSpeed(int duration, Interpolator interpolator) { + if (duration >= 0) { + try { + Field mScroller = ViewPager.class.getDeclaredField("mScroller"); + mScroller.setAccessible(true); + UltraViewPagerScroller scroller = new UltraViewPagerScroller(getContext(), + interpolator); + scroller.setScrollDuration(duration); + mScroller.set(this, scroller); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + public void setEnableLoop(boolean status) { enableLoop = status; if (pagerAdapter != null) {