diff --git a/build.gradle b/build.gradle
index 49166ee..745beef 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,21 +1,24 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
-task wrapper(type: Wrapper) {
- gradleVersion = '2.2.1'
-}
-
buildscript {
repositories {
- mavenCentral()
+ jcenter()
}
dependencies {
- classpath 'com.android.tools.build:gradle:1.1.2'
- classpath 'com.jakewharton.sdkmanager:gradle-plugin:0.10.+'
+ classpath 'com.android.tools.build:gradle:2.2.0'
}
}
allprojects {
repositories {
- mavenCentral()
+ jcenter()
}
}
+
+task clean(type: Delete) {
+ delete rootProject.buildDir
+}
+
+project.ext {
+ minSDKVersion = "9"
+}
\ No newline at end of file
diff --git a/demo/build.gradle b/demo/build.gradle
index de31b19..76b9831 100644
--- a/demo/build.gradle
+++ b/demo/build.gradle
@@ -1,16 +1,16 @@
-apply plugin: 'android-sdk-manager'
+
apply plugin: 'com.android.application'
android {
- compileSdkVersion 22
- buildToolsVersion "22.0.1"
+ compileSdkVersion 24
+ buildToolsVersion "24.0.2"
defaultConfig {
- minSdkVersion 8
- targetSdkVersion 22
+ minSdkVersion project.minSDKVersion
+ targetSdkVersion 24
versionCode 2
- versionName "1.0.1"
+ versionName "1.0.2"
}
buildTypes {
release {
@@ -22,7 +22,7 @@ android {
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile project(':library')
- compile 'com.android.support:appcompat-v7:22.+'
+ compile 'com.android.support:appcompat-v7:24.2.1'
compile 'com.nineoldandroids:library:2.4.0'
compile 'com.daimajia.androidanimations:library:1.0.3@aar'
}
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 918e0f3..69ba861 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Sun May 03 23:34:25 CST 2015
+#Mon Sep 26 15:56:13 CAT 2016
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/library/build.gradle b/library/build.gradle
index b2e8cc6..4e4a762 100644
--- a/library/build.gradle
+++ b/library/build.gradle
@@ -1,14 +1,14 @@
apply plugin: 'com.android.library'
android {
- compileSdkVersion 22
- buildToolsVersion "22.0.1"
+ compileSdkVersion 24
+ buildToolsVersion "24.0.2"
defaultConfig {
- minSdkVersion 8
- targetSdkVersion 22
- versionCode 15
- versionName "1.1.5"
+ minSdkVersion project.minSDKVersion
+ targetSdkVersion 24
+ versionCode 16
+ versionName "1.1.6"
}
buildTypes {
release {
@@ -16,15 +16,14 @@ android {
}
}
lintOptions {
- abortOnError false
- }
+ abortOnError false
+ }
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
- compile 'com.android.support:appcompat-v7:22.1.1'
- compile "com.android.support:support-v4:22.1.1"
+ compile 'com.android.support:appcompat-v7:24.2.1'
+ compile 'com.android.support:support-v4:24.2.1'
compile 'com.squareup.picasso:picasso:2.5.2'
- compile 'com.nineoldandroids:library:2.4.0'
}
apply from: './gradle-mvn-push.gradle'
diff --git a/library/gradle-mvn-push.gradle b/library/gradle-mvn-push.gradle
index 873d7b0..149c5f7 100644
--- a/library/gradle-mvn-push.gradle
+++ b/library/gradle-mvn-push.gradle
@@ -92,7 +92,7 @@ afterEvaluate { project ->
sign configurations.archives
}
- task apklib(type: Zip){
+ task apklib(type: Zip) {
appendix = extension = 'apklib'
from 'AndroidManifest.xml'
@@ -109,7 +109,7 @@ afterEvaluate { project ->
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
options.links("http://docs.oracle.com/javase/7/docs/api/");
- options.linksOffline "http://d.android.com/reference","${android.sdkDirectory}/docs/reference"
+ options.linksOffline "http://d.android.com/reference", "${android.sdkDirectory}/docs/reference"
exclude '**/BuildConfig.java'
exclude '**/R.java'
failOnError = false
diff --git a/library/gradle.properties b/library/gradle.properties
index e912316..4d33d20 100644
--- a/library/gradle.properties
+++ b/library/gradle.properties
@@ -1,22 +1,17 @@
# Project-wide Gradle settings.
-
# IDE (e.g. Android Studio) users:
# Settings specified in this file will override any Gradle settings
# configured through the IDE.
-
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
-
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx10248m -XX:MaxPermSize=256m
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
-
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
-
POM_NAME=AndroidImageSlider Library
POM_ARTIFACT_ID=library
POM_PACKAGING=aar
diff --git a/library/src/main/AndroidManifest.xml b/library/src/main/AndroidManifest.xml
index e6cc2e8..513fb6f 100644
--- a/library/src/main/AndroidManifest.xml
+++ b/library/src/main/AndroidManifest.xml
@@ -1,5 +1,6 @@
+
\ No newline at end of file
diff --git a/library/src/main/java/com/daimajia/slider/library/Animations/BaseAnimationInterface.java b/library/src/main/java/com/daimajia/slider/library/Animations/BaseAnimationInterface.java
index c7df71a..ed1b23e 100644
--- a/library/src/main/java/com/daimajia/slider/library/Animations/BaseAnimationInterface.java
+++ b/library/src/main/java/com/daimajia/slider/library/Animations/BaseAnimationInterface.java
@@ -5,16 +5,16 @@
/**
* This interface gives you chance to inject your own animation or do something when the
* {@link com.daimajia.slider.library.Tricks.ViewPagerEx} animation (PagerTransformer) starts or ends.
- *
- *
+ *
+ *
* There are two items you have to know. The first item is the slider you are dragging. This item
* I call it Current Item. The second is the slider that gonna to show. I call that Next Item.
- *
+ *
* When you start to drag the slider in front of you, onPrepareCurrentItemLeaveScreen() and
* onPrepareNextItemShowInScreen will be called.
- *
+ *
* When you finish drag, the onCurrentItemDisappear and onNextItemAppear will be invoked.
- *
+ *
* You can see a demo class {@link com.daimajia.slider.library.Animations.DescriptionAnimation},
* this class gives the description text an animation.
*/
@@ -22,24 +22,28 @@ public interface BaseAnimationInterface {
/**
* When the current item prepare to start leaving the screen.
+ *
* @param current
*/
public void onPrepareCurrentItemLeaveScreen(View current);
/**
* The next item which will be shown in ViewPager/
+ *
* @param next
*/
public void onPrepareNextItemShowInScreen(View next);
/**
* Current item totally disappear from screen.
+ *
* @param view
*/
public void onCurrentItemDisappear(View view);
/**
* Next item totally show in screen.
+ *
* @param view
*/
public void onNextItemAppear(View view);
diff --git a/library/src/main/java/com/daimajia/slider/library/Animations/DescriptionAnimation.java b/library/src/main/java/com/daimajia/slider/library/Animations/DescriptionAnimation.java
index 6c03d99..29df46c 100644
--- a/library/src/main/java/com/daimajia/slider/library/Animations/DescriptionAnimation.java
+++ b/library/src/main/java/com/daimajia/slider/library/Animations/DescriptionAnimation.java
@@ -1,11 +1,10 @@
package com.daimajia.slider.library.Animations;
+import android.animation.ObjectAnimator;
+import android.animation.ValueAnimator;
import android.view.View;
import com.daimajia.slider.library.R;
-import com.nineoldandroids.animation.ObjectAnimator;
-import com.nineoldandroids.animation.ValueAnimator;
-import com.nineoldandroids.view.ViewHelper;
/**
* A demo class to show how to use {@link com.daimajia.slider.library.Animations.BaseAnimationInterface}
@@ -16,19 +15,20 @@ public class DescriptionAnimation implements BaseAnimationInterface {
@Override
public void onPrepareCurrentItemLeaveScreen(View current) {
View descriptionLayout = current.findViewById(R.id.description_layout);
- if(descriptionLayout!=null){
+ if (descriptionLayout != null) {
current.findViewById(R.id.description_layout).setVisibility(View.INVISIBLE);
}
}
/**
* When next item is coming to show, let's hide the description layout.
+ *
* @param next
*/
@Override
public void onPrepareNextItemShowInScreen(View next) {
View descriptionLayout = next.findViewById(R.id.description_layout);
- if(descriptionLayout!=null){
+ if (descriptionLayout != null) {
next.findViewById(R.id.description_layout).setVisibility(View.INVISIBLE);
}
}
@@ -42,17 +42,18 @@ public void onCurrentItemDisappear(View view) {
/**
* When next item show in ViewPagerEx, let's make an animation to show the
* description layout.
+ *
* @param view
*/
@Override
public void onNextItemAppear(View view) {
View descriptionLayout = view.findViewById(R.id.description_layout);
- if(descriptionLayout!=null){
- float layoutY = ViewHelper.getY(descriptionLayout);
+ if (descriptionLayout != null) {
+ float layoutY = View.Y.get(descriptionLayout);
view.findViewById(R.id.description_layout).setVisibility(View.VISIBLE);
ValueAnimator animator = ObjectAnimator.ofFloat(
- descriptionLayout,"y",layoutY + descriptionLayout.getHeight(),
+ descriptionLayout, "y", layoutY + descriptionLayout.getHeight(),
layoutY).setDuration(500);
animator.start();
}
diff --git a/library/src/main/java/com/daimajia/slider/library/Indicators/PagerIndicator.java b/library/src/main/java/com/daimajia/slider/library/Indicators/PagerIndicator.java
index b10abee..d3e482d 100644
--- a/library/src/main/java/com/daimajia/slider/library/Indicators/PagerIndicator.java
+++ b/library/src/main/java/com/daimajia/slider/library/Indicators/PagerIndicator.java
@@ -22,7 +22,7 @@
/**
* Pager Indicator.
*/
-public class PagerIndicator extends LinearLayout implements ViewPagerEx.OnPageChangeListener{
+public class PagerIndicator extends LinearLayout implements ViewPagerEx.OnPageChangeListener {
private Context mContext;
@@ -56,8 +56,8 @@ public class PagerIndicator extends LinearLayout implements ViewPagerEx.OnPageCh
private Drawable mUnselectedDrawable;
/**
- *This value is from {@link com.daimajia.slider.library.SliderAdapter} getRealCount() represent
- *
+ * This value is from {@link com.daimajia.slider.library.SliderAdapter} getRealCount() represent
+ *
* the indicator count that we should draw.
*/
private int mItemCount = 0;
@@ -74,41 +74,69 @@ public class PagerIndicator extends LinearLayout implements ViewPagerEx.OnPageCh
private float mDefaultUnSelectedWidth;
private float mDefaultUnSelectedHeight;
-
- public enum IndicatorVisibility{
- Visible,
- Invisible;
- };
-
private GradientDrawable mUnSelectedGradientDrawable;
- private GradientDrawable mSelectedGradientDrawable;
+ ;
+ private GradientDrawable mSelectedGradientDrawable;
private LayerDrawable mSelectedLayerDrawable;
private LayerDrawable mUnSelectedLayerDrawable;
-
private float mPadding_left;
private float mPadding_right;
private float mPadding_top;
private float mPadding_bottom;
-
private float mSelectedPadding_Left;
private float mSelectedPadding_Right;
private float mSelectedPadding_Top;
private float mSelectedPadding_Bottom;
-
private float mUnSelectedPadding_Left;
private float mUnSelectedPadding_Right;
private float mUnSelectedPadding_Top;
private float mUnSelectedPadding_Bottom;
-
/**
* Put all the indicators into a ArrayList, so we can remove them easily.
*/
private ArrayList mIndicators = new ArrayList();
+ private DataSetObserver dataChangeObserver = new DataSetObserver() {
+ @Override
+ public void onChanged() {
+ PagerAdapter adapter = mPager.getAdapter();
+ int count = 0;
+ if (adapter instanceof InfinitePagerAdapter) {
+ count = ((InfinitePagerAdapter) adapter).getRealCount();
+ } else {
+ count = adapter.getCount();
+ }
+ if (count > mItemCount) {
+ for (int i = 0; i < count - mItemCount; i++) {
+ ImageView indicator = new ImageView(mContext);
+ indicator.setImageDrawable(mUnselectedDrawable);
+ indicator.setPadding((int) mUnSelectedPadding_Left,
+ (int) mUnSelectedPadding_Top,
+ (int) mUnSelectedPadding_Right,
+ (int) mUnSelectedPadding_Bottom);
+ addView(indicator);
+ mIndicators.add(indicator);
+ }
+ } else if (count < mItemCount) {
+ for (int i = 0; i < mItemCount - count; i++) {
+ removeView(mIndicators.get(0));
+ mIndicators.remove(0);
+ }
+ }
+ mItemCount = count;
+ mPager.setCurrentItem(mItemCount * 20 + mPager.getCurrentItem());
+ }
+
+ @Override
+ public void onInvalidated() {
+ super.onInvalidated();
+ redraw();
+ }
+ };
public PagerIndicator(Context context) {
- this(context,null);
+ this(context, null);
}
public PagerIndicator(Context context, AttributeSet attrs) {
@@ -116,20 +144,20 @@ public PagerIndicator(Context context, AttributeSet attrs) {
mContext = context;
- final TypedArray attributes = context.obtainStyledAttributes(attrs,R.styleable.PagerIndicator,0,0);
+ final TypedArray attributes = context.obtainStyledAttributes(attrs, R.styleable.PagerIndicator, 0, 0);
- int visibility = attributes.getInt(R.styleable.PagerIndicator_visibility,IndicatorVisibility.Visible.ordinal());
+ int visibility = attributes.getInt(R.styleable.PagerIndicator_visibility, IndicatorVisibility.Visible.ordinal());
- for(IndicatorVisibility v : IndicatorVisibility.values()){
- if(v.ordinal() == visibility){
+ for (IndicatorVisibility v : IndicatorVisibility.values()) {
+ if (v.ordinal() == visibility) {
mVisibility = v;
break;
}
}
int shape = attributes.getInt(R.styleable.PagerIndicator_shape, Shape.Oval.ordinal());
- for(Shape s: Shape.values()){
- if(s.ordinal() == shape){
+ for (Shape s : Shape.values()) {
+ if (s.ordinal() == shape) {
mIndicatorShape = s;
break;
}
@@ -141,89 +169,86 @@ public PagerIndicator(Context context, AttributeSet attrs) {
0);
mDefaultSelectedColor = attributes.getColor(R.styleable.PagerIndicator_selected_color, Color.rgb(255, 255, 255));
- mDefaultUnSelectedColor = attributes.getColor(R.styleable.PagerIndicator_unselected_color, Color.argb(33,255,255,255));
+ mDefaultUnSelectedColor = attributes.getColor(R.styleable.PagerIndicator_unselected_color, Color.argb(33, 255, 255, 255));
- mDefaultSelectedWidth = attributes.getDimension(R.styleable.PagerIndicator_selected_width,(int)pxFromDp(6));
- mDefaultSelectedHeight = attributes.getDimensionPixelSize(R.styleable.PagerIndicator_selected_height,(int)pxFromDp(6));
+ mDefaultSelectedWidth = attributes.getDimension(R.styleable.PagerIndicator_selected_width, (int) pxFromDp(6));
+ mDefaultSelectedHeight = attributes.getDimensionPixelSize(R.styleable.PagerIndicator_selected_height, (int) pxFromDp(6));
- mDefaultUnSelectedWidth = attributes.getDimensionPixelSize(R.styleable.PagerIndicator_unselected_width,(int)pxFromDp(6));
- mDefaultUnSelectedHeight = attributes.getDimensionPixelSize(R.styleable.PagerIndicator_unselected_height,(int)pxFromDp(6));
+ mDefaultUnSelectedWidth = attributes.getDimensionPixelSize(R.styleable.PagerIndicator_unselected_width, (int) pxFromDp(6));
+ mDefaultUnSelectedHeight = attributes.getDimensionPixelSize(R.styleable.PagerIndicator_unselected_height, (int) pxFromDp(6));
mSelectedGradientDrawable = new GradientDrawable();
mUnSelectedGradientDrawable = new GradientDrawable();
- mPadding_left = attributes.getDimensionPixelSize(R.styleable.PagerIndicator_padding_left,(int)pxFromDp(3));
- mPadding_right = attributes.getDimensionPixelSize(R.styleable.PagerIndicator_padding_right,(int)pxFromDp(3));
- mPadding_top = attributes.getDimensionPixelSize(R.styleable.PagerIndicator_padding_top,(int)pxFromDp(0));
- mPadding_bottom = attributes.getDimensionPixelSize(R.styleable.PagerIndicator_padding_bottom,(int)pxFromDp(0));
+ mPadding_left = attributes.getDimensionPixelSize(R.styleable.PagerIndicator_padding_left, (int) pxFromDp(3));
+ mPadding_right = attributes.getDimensionPixelSize(R.styleable.PagerIndicator_padding_right, (int) pxFromDp(3));
+ mPadding_top = attributes.getDimensionPixelSize(R.styleable.PagerIndicator_padding_top, (int) pxFromDp(0));
+ mPadding_bottom = attributes.getDimensionPixelSize(R.styleable.PagerIndicator_padding_bottom, (int) pxFromDp(0));
- mSelectedPadding_Left = attributes.getDimensionPixelSize(R.styleable.PagerIndicator_selected_padding_left,(int)mPadding_left);
- mSelectedPadding_Right = attributes.getDimensionPixelSize(R.styleable.PagerIndicator_selected_padding_right,(int)mPadding_right);
- mSelectedPadding_Top = attributes.getDimensionPixelSize(R.styleable.PagerIndicator_selected_padding_top,(int)mPadding_top);
- mSelectedPadding_Bottom = attributes.getDimensionPixelSize(R.styleable.PagerIndicator_selected_padding_bottom,(int)mPadding_bottom);
+ mSelectedPadding_Left = attributes.getDimensionPixelSize(R.styleable.PagerIndicator_selected_padding_left, (int) mPadding_left);
+ mSelectedPadding_Right = attributes.getDimensionPixelSize(R.styleable.PagerIndicator_selected_padding_right, (int) mPadding_right);
+ mSelectedPadding_Top = attributes.getDimensionPixelSize(R.styleable.PagerIndicator_selected_padding_top, (int) mPadding_top);
+ mSelectedPadding_Bottom = attributes.getDimensionPixelSize(R.styleable.PagerIndicator_selected_padding_bottom, (int) mPadding_bottom);
- mUnSelectedPadding_Left = attributes.getDimensionPixelSize(R.styleable.PagerIndicator_unselected_padding_left,(int)mPadding_left);
- mUnSelectedPadding_Right = attributes.getDimensionPixelSize(R.styleable.PagerIndicator_unselected_padding_right,(int)mPadding_right);
- mUnSelectedPadding_Top = attributes.getDimensionPixelSize(R.styleable.PagerIndicator_unselected_padding_top,(int)mPadding_top);
- mUnSelectedPadding_Bottom = attributes.getDimensionPixelSize(R.styleable.PagerIndicator_unselected_padding_bottom,(int)mPadding_bottom);
+ mUnSelectedPadding_Left = attributes.getDimensionPixelSize(R.styleable.PagerIndicator_unselected_padding_left, (int) mPadding_left);
+ mUnSelectedPadding_Right = attributes.getDimensionPixelSize(R.styleable.PagerIndicator_unselected_padding_right, (int) mPadding_right);
+ mUnSelectedPadding_Top = attributes.getDimensionPixelSize(R.styleable.PagerIndicator_unselected_padding_top, (int) mPadding_top);
+ mUnSelectedPadding_Bottom = attributes.getDimensionPixelSize(R.styleable.PagerIndicator_unselected_padding_bottom, (int) mPadding_bottom);
mSelectedLayerDrawable = new LayerDrawable(new Drawable[]{mSelectedGradientDrawable});
mUnSelectedLayerDrawable = new LayerDrawable(new Drawable[]{mUnSelectedGradientDrawable});
- setIndicatorStyleResource(mUserSetSelectedIndicatorResId,mUserSetUnSelectedIndicatorResId);
+ setIndicatorStyleResource(mUserSetSelectedIndicatorResId, mUserSetUnSelectedIndicatorResId);
setDefaultIndicatorShape(mIndicatorShape);
- setDefaultSelectedIndicatorSize(mDefaultSelectedWidth,mDefaultSelectedHeight,Unit.Px);
- setDefaultUnselectedIndicatorSize(mDefaultUnSelectedWidth,mDefaultUnSelectedHeight,Unit.Px);
+ setDefaultSelectedIndicatorSize(mDefaultSelectedWidth, mDefaultSelectedHeight, Unit.Px);
+ setDefaultUnselectedIndicatorSize(mDefaultUnSelectedWidth, mDefaultUnSelectedHeight, Unit.Px);
setDefaultIndicatorColor(mDefaultSelectedColor, mDefaultUnSelectedColor);
setIndicatorVisibility(mVisibility);
attributes.recycle();
}
- public enum Shape{
- Oval,Rectangle
- }
-
/**
* if you are using the default indicator, this method will help you to set the shape of
* indicator, there are two kind of shapes you can set, oval and rect.
+ *
* @param shape
*/
- public void setDefaultIndicatorShape(Shape shape){
- if(mUserSetSelectedIndicatorResId == 0){
- if(shape == Shape.Oval){
+ public void setDefaultIndicatorShape(Shape shape) {
+ if (mUserSetSelectedIndicatorResId == 0) {
+ if (shape == Shape.Oval) {
mSelectedGradientDrawable.setShape(GradientDrawable.OVAL);
- }else{
+ } else {
mSelectedGradientDrawable.setShape(GradientDrawable.RECTANGLE);
}
}
- if(mUserSetUnSelectedIndicatorResId == 0){
- if(shape == Shape.Oval){
+ if (mUserSetUnSelectedIndicatorResId == 0) {
+ if (shape == Shape.Oval) {
mUnSelectedGradientDrawable.setShape(GradientDrawable.OVAL);
- }else{
+ } else {
mUnSelectedGradientDrawable.setShape(GradientDrawable.RECTANGLE);
}
}
resetDrawable();
}
-
/**
* Set Indicator style.
- * @param selected page selected drawable
+ *
+ * @param selected page selected drawable
* @param unselected page unselected drawable
*/
- public void setIndicatorStyleResource(int selected, int unselected){
+ public void setIndicatorStyleResource(int selected, int unselected) {
mUserSetSelectedIndicatorResId = selected;
mUserSetUnSelectedIndicatorResId = unselected;
- if(selected == 0){
+ if (selected == 0) {
mSelectedDrawable = mSelectedLayerDrawable;
- }else{
+ } else {
mSelectedDrawable = mContext.getResources().getDrawable(mUserSetSelectedIndicatorResId);
}
- if(unselected == 0){
+ if (unselected == 0) {
mUnselectedDrawable = mUnSelectedLayerDrawable;
- }else{
+ } else {
mUnselectedDrawable = mContext.getResources().getDrawable(mUserSetUnSelectedIndicatorResId);
}
@@ -233,28 +258,25 @@ public void setIndicatorStyleResource(int selected, int unselected){
/**
* if you are using the default indicator , this method will help you to set the selected status and
* the unselected status color.
+ *
* @param selectedColor
* @param unselectedColor
*/
- public void setDefaultIndicatorColor(int selectedColor,int unselectedColor){
- if(mUserSetSelectedIndicatorResId == 0){
+ public void setDefaultIndicatorColor(int selectedColor, int unselectedColor) {
+ if (mUserSetSelectedIndicatorResId == 0) {
mSelectedGradientDrawable.setColor(selectedColor);
}
- if(mUserSetUnSelectedIndicatorResId == 0){
+ if (mUserSetUnSelectedIndicatorResId == 0) {
mUnSelectedGradientDrawable.setColor(unselectedColor);
}
resetDrawable();
}
- public enum Unit{
- DP,Px
- }
-
- public void setDefaultSelectedIndicatorSize(float width,float height,Unit unit){
- if(mUserSetSelectedIndicatorResId == 0){
+ public void setDefaultSelectedIndicatorSize(float width, float height, Unit unit) {
+ if (mUserSetSelectedIndicatorResId == 0) {
float w = width;
float h = height;
- if(unit == Unit.DP){
+ if (unit == Unit.DP) {
w = pxFromDp(width);
h = pxFromDp(height);
}
@@ -263,11 +285,11 @@ public void setDefaultSelectedIndicatorSize(float width,float height,Unit unit){
}
}
- public void setDefaultUnselectedIndicatorSize(float width,float height,Unit unit){
- if(mUserSetUnSelectedIndicatorResId == 0){
+ public void setDefaultUnselectedIndicatorSize(float width, float height, Unit unit) {
+ if (mUserSetUnSelectedIndicatorResId == 0) {
float w = width;
float h = height;
- if(unit == Unit.DP){
+ if (unit == Unit.DP) {
w = pxFromDp(width);
h = pxFromDp(height);
}
@@ -276,44 +298,29 @@ public void setDefaultUnselectedIndicatorSize(float width,float height,Unit unit
}
}
- public void setDefaultIndicatorSize(float width, float height, Unit unit){
- setDefaultSelectedIndicatorSize(width,height,unit);
- setDefaultUnselectedIndicatorSize(width,height,unit);
+ public void setDefaultIndicatorSize(float width, float height, Unit unit) {
+ setDefaultSelectedIndicatorSize(width, height, unit);
+ setDefaultUnselectedIndicatorSize(width, height, unit);
}
- private float dpFromPx(float px)
- {
+ private float dpFromPx(float px) {
return px / this.getContext().getResources().getDisplayMetrics().density;
}
- private float pxFromDp(float dp)
- {
+ private float pxFromDp(float dp) {
return dp * this.getContext().getResources().getDisplayMetrics().density;
}
- /**
- * set the visibility of indicator.
- * @param visibility
- */
- public void setIndicatorVisibility(IndicatorVisibility visibility){
- if(visibility == IndicatorVisibility.Visible){
- setVisibility(View.VISIBLE);
- }else{
- setVisibility(View.INVISIBLE);
- }
- resetDrawable();
- }
-
/**
* clear self means unregister the dataset observer and remove all the child views(indicators).
*/
- public void destroySelf(){
- if(mPager == null || mPager.getAdapter() == null){
+ public void destroySelf() {
+ if (mPager == null || mPager.getAdapter() == null) {
return;
}
- InfinitePagerAdapter wrapper = (InfinitePagerAdapter)mPager.getAdapter();
+ InfinitePagerAdapter wrapper = (InfinitePagerAdapter) mPager.getAdapter();
PagerAdapter adapter = wrapper.getRealAdapter();
- if(adapter!=null){
+ if (adapter != null) {
adapter.unregisterDataSetObserver(dataChangeObserver);
}
removeAllViews();
@@ -321,25 +328,24 @@ public void destroySelf(){
/**
* bind indicator with viewpagerEx.
+ *
* @param pager
*/
- public void setViewPager(ViewPagerEx pager){
- if(pager.getAdapter() == null){
+ public void setViewPager(ViewPagerEx pager) {
+ if (pager.getAdapter() == null) {
throw new IllegalStateException("Viewpager does not have adapter instance");
}
mPager = pager;
mPager.addOnPageChangeListener(this);
- ((InfinitePagerAdapter)mPager.getAdapter()).getRealAdapter().registerDataSetObserver(dataChangeObserver);
+ ((InfinitePagerAdapter) mPager.getAdapter()).getRealAdapter().registerDataSetObserver(dataChangeObserver);
}
-
- private void resetDrawable(){
- for(View i : mIndicators){
- if(mPreviousSelectedIndicator!= null && mPreviousSelectedIndicator.equals(i)){
- ((ImageView)i).setImageDrawable(mSelectedDrawable);
- }
- else{
- ((ImageView)i).setImageDrawable(mUnselectedDrawable);
+ private void resetDrawable() {
+ for (View i : mIndicators) {
+ if (mPreviousSelectedIndicator != null && mPreviousSelectedIndicator.equals(i)) {
+ ((ImageView) i).setImageDrawable(mSelectedDrawable);
+ } else {
+ ((ImageView) i).setImageDrawable(mUnselectedDrawable);
}
}
}
@@ -347,21 +353,21 @@ private void resetDrawable(){
/**
* redraw the indicators.
*/
- public void redraw(){
+ public void redraw() {
mItemCount = getShouldDrawCount();
mPreviousSelectedIndicator = null;
- for(View i:mIndicators){
+ for (View i : mIndicators) {
removeView(i);
}
- for(int i =0 ;i< mItemCount; i++){
+ for (int i = 0; i < mItemCount; i++) {
ImageView indicator = new ImageView(mContext);
indicator.setImageDrawable(mUnselectedDrawable);
- indicator.setPadding((int)mUnSelectedPadding_Left,
- (int)mUnSelectedPadding_Top,
- (int)mUnSelectedPadding_Right,
- (int)mUnSelectedPadding_Bottom);
+ indicator.setPadding((int) mUnSelectedPadding_Left,
+ (int) mUnSelectedPadding_Top,
+ (int) mUnSelectedPadding_Right,
+ (int) mUnSelectedPadding_Bottom);
addView(indicator);
mIndicators.add(indicator);
}
@@ -370,72 +376,35 @@ public void redraw(){
/**
* since we used a adapter wrapper, so we can't getCount directly from wrapper.
+ *
* @return
*/
- private int getShouldDrawCount(){
- if(mPager.getAdapter() instanceof InfinitePagerAdapter){
- return ((InfinitePagerAdapter)mPager.getAdapter()).getRealCount();
- }else{
+ private int getShouldDrawCount() {
+ if (mPager.getAdapter() instanceof InfinitePagerAdapter) {
+ return ((InfinitePagerAdapter) mPager.getAdapter()).getRealCount();
+ } else {
return mPager.getAdapter().getCount();
}
}
- private DataSetObserver dataChangeObserver = new DataSetObserver() {
- @Override
- public void onChanged() {
- PagerAdapter adapter = mPager.getAdapter();
- int count = 0;
- if(adapter instanceof InfinitePagerAdapter){
- count = ((InfinitePagerAdapter)adapter).getRealCount();
- }else{
- count = adapter.getCount();
- }
- if(count > mItemCount){
- for(int i =0 ; i< count - mItemCount;i++){
- ImageView indicator = new ImageView(mContext);
- indicator.setImageDrawable(mUnselectedDrawable);
- indicator.setPadding((int)mUnSelectedPadding_Left,
- (int)mUnSelectedPadding_Top,
- (int)mUnSelectedPadding_Right,
- (int)mUnSelectedPadding_Bottom);
- addView(indicator);
- mIndicators.add(indicator);
- }
- }else if(count < mItemCount){
- for(int i = 0; i < mItemCount - count;i++){
- removeView(mIndicators.get(0));
- mIndicators.remove(0);
- }
- }
- mItemCount = count;
- mPager.setCurrentItem(mItemCount*20 + mPager.getCurrentItem());
- }
-
- @Override
- public void onInvalidated() {
- super.onInvalidated();
- redraw();
- }
- };
-
- private void setItemAsSelected(int position){
- if(mPreviousSelectedIndicator != null){
+ private void setItemAsSelected(int position) {
+ if (mPreviousSelectedIndicator != null) {
mPreviousSelectedIndicator.setImageDrawable(mUnselectedDrawable);
mPreviousSelectedIndicator.setPadding(
- (int)mUnSelectedPadding_Left,
- (int)mUnSelectedPadding_Top,
- (int)mUnSelectedPadding_Right,
- (int)mUnSelectedPadding_Bottom
+ (int) mUnSelectedPadding_Left,
+ (int) mUnSelectedPadding_Top,
+ (int) mUnSelectedPadding_Right,
+ (int) mUnSelectedPadding_Bottom
);
}
- ImageView currentSelected = (ImageView)getChildAt(position + 1);
- if(currentSelected != null){
+ ImageView currentSelected = (ImageView) getChildAt(position + 1);
+ if (currentSelected != null) {
currentSelected.setImageDrawable(mSelectedDrawable);
currentSelected.setPadding(
- (int)mSelectedPadding_Left,
- (int)mSelectedPadding_Top,
- (int)mSelectedPadding_Right,
- (int)mSelectedPadding_Bottom
+ (int) mSelectedPadding_Left,
+ (int) mSelectedPadding_Top,
+ (int) mSelectedPadding_Right,
+ (int) mSelectedPadding_Bottom
);
mPreviousSelectedIndicator = currentSelected;
}
@@ -446,27 +415,55 @@ private void setItemAsSelected(int position){
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
- public IndicatorVisibility getIndicatorVisibility(){
+ public IndicatorVisibility getIndicatorVisibility() {
return mVisibility;
}
+ /**
+ * set the visibility of indicator.
+ *
+ * @param visibility
+ */
+ public void setIndicatorVisibility(IndicatorVisibility visibility) {
+ if (visibility == IndicatorVisibility.Visible) {
+ setVisibility(View.VISIBLE);
+ } else {
+ setVisibility(View.INVISIBLE);
+ }
+ resetDrawable();
+ }
+
@Override
public void onPageSelected(int position) {
- if(mItemCount == 0){
+ if (mItemCount == 0) {
return;
}
- setItemAsSelected(position-1);
+ setItemAsSelected(position - 1);
}
+
@Override
public void onPageScrollStateChanged(int state) {
}
- public int getSelectedIndicatorResId(){
+ public int getSelectedIndicatorResId() {
return mUserSetSelectedIndicatorResId;
}
- public int getUnSelectedIndicatorResId(){
+ public int getUnSelectedIndicatorResId() {
return mUserSetUnSelectedIndicatorResId;
}
+ public enum IndicatorVisibility {
+ Visible,
+ Invisible;
+ }
+
+ public enum Shape {
+ Oval, Rectangle
+ }
+
+ public enum Unit {
+ DP, Px
+ }
+
}
diff --git a/library/src/main/java/com/daimajia/slider/library/SliderAdapter.java b/library/src/main/java/com/daimajia/slider/library/SliderAdapter.java
index bc0a90a..bf8bc85 100644
--- a/library/src/main/java/com/daimajia/slider/library/SliderAdapter.java
+++ b/library/src/main/java/com/daimajia/slider/library/SliderAdapter.java
@@ -12,26 +12,26 @@
/**
* A slider adapter
*/
-public class SliderAdapter extends PagerAdapter implements BaseSliderView.ImageLoadListener{
+public class SliderAdapter extends PagerAdapter implements BaseSliderView.ImageLoadListener {
private Context mContext;
private ArrayList mImageContents;
- public SliderAdapter(Context context){
+ public SliderAdapter(Context context) {
mContext = context;
mImageContents = new ArrayList();
}
- public void addSlider(T slider){
+ public void addSlider(T slider) {
slider.setOnImageLoadListener(this);
mImageContents.add(slider);
notifyDataSetChanged();
}
- public BaseSliderView getSliderView(int position){
- if(position < 0 || position >= mImageContents.size()){
+ public BaseSliderView getSliderView(int position) {
+ if (position < 0 || position >= mImageContents.size()) {
return null;
- }else{
+ } else {
return mImageContents.get(position);
}
}
@@ -41,21 +41,21 @@ public int getItemPosition(Object object) {
return POSITION_NONE;
}
- public void removeSlider(T slider){
- if(mImageContents.contains(slider)){
+ public void removeSlider(T slider) {
+ if (mImageContents.contains(slider)) {
mImageContents.remove(slider);
notifyDataSetChanged();
}
}
- public void removeSliderAt(int position){
- if(mImageContents.size() > position){
+ public void removeSliderAt(int position) {
+ if (mImageContents.size() > position) {
mImageContents.remove(position);
notifyDataSetChanged();
}
}
- public void removeAllSliders(){
+ public void removeAllSliders() {
mImageContents.clear();
notifyDataSetChanged();
}
@@ -67,7 +67,7 @@ public int getCount() {
@Override
public boolean isViewFromObject(View view, Object object) {
- return view==object;
+ return view == object;
}
@Override
@@ -90,16 +90,17 @@ public void onStart(BaseSliderView target) {
/**
* When image download error, then remove.
+ *
* @param result
* @param target
*/
@Override
public void onEnd(boolean result, BaseSliderView target) {
- if(target.isErrorDisappear() == false || result == true){
+ if (target.isErrorDisappear() == false || result == true) {
return;
}
- for (BaseSliderView slider: mImageContents){
- if(slider.equals(target)){
+ for (BaseSliderView slider : mImageContents) {
+ if (slider.equals(target)) {
removeSlider(target);
break;
}
diff --git a/library/src/main/java/com/daimajia/slider/library/SliderLayout.java b/library/src/main/java/com/daimajia/slider/library/SliderLayout.java
index ba36e5e..c7e2f1d 100644
--- a/library/src/main/java/com/daimajia/slider/library/SliderLayout.java
+++ b/library/src/main/java/com/daimajia/slider/library/SliderLayout.java
@@ -43,48 +43,46 @@
/**
* SliderLayout is compound layout. This is combined with {@link com.daimajia.slider.library.Indicators.PagerIndicator}
* and {@link com.daimajia.slider.library.Tricks.ViewPagerEx} .
- *
+ *
* There is some properties you can set in XML:
- *
+ *
* indicator_visibility
- * visible
- * invisible
- *
+ * visible
+ * invisible
+ *
* indicator_shape
- * oval
- * rect
- *
+ * oval
+ * rect
+ *
* indicator_selected_color
- *
+ *
* indicator_unselected_color
- *
+ *
* indicator_selected_drawable
- *
+ *
* indicator_unselected_drawable
- *
+ *
* pager_animation
- * Default
- * Accordion
- * Background2Foreground
- * CubeIn
- * DepthPage
- * Fade
- * FlipHorizontal
- * FlipPage
- * Foreground2Background
- * RotateDown
- * RotateUp
- * Stack
- * Tablet
- * ZoomIn
- * ZoomOutSlide
- * ZoomOut
- *
+ * Default
+ * Accordion
+ * Background2Foreground
+ * CubeIn
+ * DepthPage
+ * Fade
+ * FlipHorizontal
+ * FlipPage
+ * Foreground2Background
+ * RotateDown
+ * RotateUp
+ * Stack
+ * Tablet
+ * ZoomIn
+ * ZoomOutSlide
+ * ZoomOut
+ *
* pager_animation_span
- *
- *
*/
-public class SliderLayout extends RelativeLayout{
+public class SliderLayout extends RelativeLayout {
private Context mContext;
/**
@@ -153,17 +151,24 @@ public class SliderLayout extends RelativeLayout{
* @see com.daimajia.slider.library.Animations.BaseAnimationInterface
*/
private BaseAnimationInterface mCustomAnimation;
+ private android.os.Handler mh = new android.os.Handler() {
+ @Override
+ public void handleMessage(Message msg) {
+ super.handleMessage(msg);
+ moveNextPosition(true);
+ }
+ };
/**
* {@link com.daimajia.slider.library.Indicators.PagerIndicator} shape, rect or oval.
*/
public SliderLayout(Context context) {
- this(context,null);
+ this(context, null);
}
public SliderLayout(Context context, AttributeSet attrs) {
- this(context,attrs,R.attr.SliderStyle);
+ this(context, attrs, R.attr.SliderStyle);
}
public SliderLayout(Context context, AttributeSet attrs, int defStyle) {
@@ -171,15 +176,15 @@ public SliderLayout(Context context, AttributeSet attrs, int defStyle) {
mContext = context;
LayoutInflater.from(context).inflate(R.layout.slider_layout, this, true);
- final TypedArray attributes = context.getTheme().obtainStyledAttributes(attrs,R.styleable.SliderLayout,
- defStyle,0);
+ final TypedArray attributes = context.getTheme().obtainStyledAttributes(attrs, R.styleable.SliderLayout,
+ defStyle, 0);
mTransformerSpan = attributes.getInteger(R.styleable.SliderLayout_pager_animation_span, 1100);
mTransformerId = attributes.getInt(R.styleable.SliderLayout_pager_animation, Transformer.Default.ordinal());
- mAutoCycle = attributes.getBoolean(R.styleable.SliderLayout_auto_cycle,true);
- int visibility = attributes.getInt(R.styleable.SliderLayout_indicator_visibility,0);
- for(PagerIndicator.IndicatorVisibility v: PagerIndicator.IndicatorVisibility.values()){
- if(v.ordinal() == visibility){
+ mAutoCycle = attributes.getBoolean(R.styleable.SliderLayout_auto_cycle, true);
+ int visibility = attributes.getInt(R.styleable.SliderLayout_indicator_visibility, 0);
+ for (PagerIndicator.IndicatorVisibility v : PagerIndicator.IndicatorVisibility.values()) {
+ if (v.ordinal() == visibility) {
mIndicatorVisibility = v;
break;
}
@@ -187,7 +192,7 @@ public SliderLayout(Context context, AttributeSet attrs, int defStyle) {
mSliderAdapter = new SliderAdapter(mContext);
PagerAdapter wrappedAdapter = new InfinitePagerAdapter(mSliderAdapter);
- mViewPager = (InfiniteViewPager)findViewById(R.id.daimajia_slider_viewpager);
+ mViewPager = (InfiniteViewPager) findViewById(R.id.daimajia_slider_viewpager);
mViewPager.setAdapter(wrappedAdapter);
mViewPager.setOnTouchListener(new OnTouchListener() {
@@ -195,7 +200,7 @@ public SliderLayout(Context context, AttributeSet attrs, int defStyle) {
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
switch (action) {
- case MotionEvent.ACTION_UP:
+ case MotionEvent.ACTION_UP:
recoverCycle();
break;
}
@@ -206,15 +211,15 @@ public boolean onTouch(View v, MotionEvent event) {
attributes.recycle();
setPresetIndicator(PresetIndicators.Center_Bottom);
setPresetTransformer(mTransformerId);
- setSliderTransformDuration(mTransformerSpan,null);
+ setSliderTransformDuration(mTransformerSpan, null);
setIndicatorVisibility(mIndicatorVisibility);
- if(mAutoCycle){
+ if (mAutoCycle) {
startAutoCycle();
}
}
- public void addOnPageChangeListener(ViewPagerEx.OnPageChangeListener onPageChangeListener){
- if(onPageChangeListener != null){
+ public void addOnPageChangeListener(ViewPagerEx.OnPageChangeListener onPageChangeListener) {
+ if (onPageChangeListener != null) {
mViewPager.addOnPageChangeListener(onPageChangeListener);
}
}
@@ -223,8 +228,8 @@ public void removeOnPageChangeListener(ViewPagerEx.OnPageChangeListener onPageCh
mViewPager.removeOnPageChangeListener(onPageChangeListener);
}
- public void setCustomIndicator(PagerIndicator indicator){
- if(mIndicator != null){
+ public void setCustomIndicator(PagerIndicator indicator) {
+ if (mIndicator != null) {
mIndicator.destroySelf();
}
mIndicator = indicator;
@@ -233,33 +238,26 @@ public void setCustomIndicator(PagerIndicator indicator){
mIndicator.redraw();
}
- public void addSlider(T imageContent){
+ public void addSlider(T imageContent) {
mSliderAdapter.addSlider(imageContent);
}
- private android.os.Handler mh = new android.os.Handler(){
- @Override
- public void handleMessage(Message msg) {
- super.handleMessage(msg);
- moveNextPosition(true);
- }
- };
-
- public void startAutoCycle(){
+ public void startAutoCycle() {
startAutoCycle(mSliderDuration, mSliderDuration, mAutoRecover);
}
/**
* start auto cycle.
- * @param delay delay time
- * @param duration animation duration time.
+ *
+ * @param delay delay time
+ * @param duration animation duration time.
* @param autoRecover if recover after user touches the slider.
*/
- public void startAutoCycle(long delay,long duration,boolean autoRecover){
- if(mCycleTimer != null) mCycleTimer.cancel();
- if(mCycleTask != null) mCycleTask.cancel();
- if(mResumingTask != null) mResumingTask.cancel();
- if(mResumingTimer != null) mResumingTimer.cancel();
+ public void startAutoCycle(long delay, long duration, boolean autoRecover) {
+ if (mCycleTimer != null) mCycleTimer.cancel();
+ if (mCycleTask != null) mCycleTask.cancel();
+ if (mResumingTask != null) mResumingTask.cancel();
+ if (mResumingTimer != null) mResumingTimer.cancel();
mSliderDuration = duration;
mCycleTimer = new Timer();
mAutoRecover = autoRecover;
@@ -269,7 +267,7 @@ public void run() {
mh.sendEmptyMessage(0);
}
};
- mCycleTimer.schedule(mCycleTask,delay,mSliderDuration);
+ mCycleTimer.schedule(mCycleTask, delay, mSliderDuration);
mCycling = true;
mAutoCycle = true;
}
@@ -277,13 +275,13 @@ public void run() {
/**
* pause auto cycle.
*/
- private void pauseAutoCycle(){
- if(mCycling){
+ private void pauseAutoCycle() {
+ if (mCycling) {
mCycleTimer.cancel();
mCycleTask.cancel();
mCycling = false;
- }else{
- if(mResumingTimer != null && mResumingTask != null){
+ } else {
+ if (mResumingTimer != null && mResumingTask != null) {
recoverCycle();
}
}
@@ -291,12 +289,13 @@ private void pauseAutoCycle(){
/**
* set the duration between two slider changes. the duration value must >= 500
+ *
* @param duration
*/
- public void setDuration(long duration){
- if(duration >= 500){
+ public void setDuration(long duration) {
+ if (duration >= 500) {
mSliderDuration = duration;
- if(mAutoCycle && mCycling){
+ if (mAutoCycle && mCycling) {
startAutoCycle();
}
}
@@ -305,17 +304,17 @@ public void setDuration(long duration){
/**
* stop the auto circle
*/
- public void stopAutoCycle(){
- if(mCycleTask!=null){
+ public void stopAutoCycle() {
+ if (mCycleTask != null) {
mCycleTask.cancel();
}
- if(mCycleTimer!= null){
+ if (mCycleTimer != null) {
mCycleTimer.cancel();
}
- if(mResumingTimer!= null){
+ if (mResumingTimer != null) {
mResumingTimer.cancel();
}
- if(mResumingTask!=null){
+ if (mResumingTask != null) {
mResumingTask.cancel();
}
mAutoCycle = false;
@@ -325,13 +324,13 @@ public void stopAutoCycle(){
/**
* when paused cycle, this method can weak it up.
*/
- private void recoverCycle(){
- if(!mAutoRecover || !mAutoCycle){
+ private void recoverCycle() {
+ if (!mAutoRecover || !mAutoCycle) {
return;
}
- if(!mCycling){
- if(mResumingTask != null && mResumingTimer!= null){
+ if (!mCycling) {
+ if (mResumingTask != null && mResumingTimer != null) {
mResumingTimer.cancel();
mResumingTask.cancel();
}
@@ -347,7 +346,6 @@ public void run() {
}
-
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
int action = ev.getAction();
@@ -361,88 +359,58 @@ public boolean onInterceptTouchEvent(MotionEvent ev) {
/**
* set ViewPager transformer.
+ *
* @param reverseDrawingOrder
* @param transformer
*/
- public void setPagerTransformer(boolean reverseDrawingOrder,BaseTransformer transformer){
+ public void setPagerTransformer(boolean reverseDrawingOrder, BaseTransformer transformer) {
mViewPagerTransformer = transformer;
mViewPagerTransformer.setCustomAnimationInterface(mCustomAnimation);
- mViewPager.setPageTransformer(reverseDrawingOrder,mViewPagerTransformer);
+ mViewPager.setPageTransformer(reverseDrawingOrder, mViewPagerTransformer);
}
-
/**
* set the duration between two slider changes.
+ *
* @param period
* @param interpolator
*/
- public void setSliderTransformDuration(int period,Interpolator interpolator){
- try{
+ public void setSliderTransformDuration(int period, Interpolator interpolator) {
+ try {
Field mScroller = ViewPagerEx.class.getDeclaredField("mScroller");
mScroller.setAccessible(true);
- FixedSpeedScroller scroller = new FixedSpeedScroller(mViewPager.getContext(),interpolator, period);
- mScroller.set(mViewPager,scroller);
- }catch (Exception e){
+ FixedSpeedScroller scroller = new FixedSpeedScroller(mViewPager.getContext(), interpolator, period);
+ mScroller.set(mViewPager, scroller);
+ } catch (Exception e) {
}
}
- /**
- * preset transformers and their names
- */
- public enum Transformer{
- Default("Default"),
- Accordion("Accordion"),
- Background2Foreground("Background2Foreground"),
- CubeIn("CubeIn"),
- DepthPage("DepthPage"),
- Fade("Fade"),
- FlipHorizontal("FlipHorizontal"),
- FlipPage("FlipPage"),
- Foreground2Background("Foreground2Background"),
- RotateDown("RotateDown"),
- RotateUp("RotateUp"),
- Stack("Stack"),
- Tablet("Tablet"),
- ZoomIn("ZoomIn"),
- ZoomOutSlide("ZoomOutSlide"),
- ZoomOut("ZoomOut");
-
- private final String name;
-
- private Transformer(String s){
- name = s;
- }
- public String toString(){
- return name;
- }
-
- public boolean equals(String other){
- return (other == null)? false:name.equals(other);
- }
- };
-
/**
* set a preset viewpager transformer by id.
+ *
* @param transformerId
*/
- public void setPresetTransformer(int transformerId){
- for(Transformer t : Transformer.values()){
- if(t.ordinal() == transformerId){
+ public void setPresetTransformer(int transformerId) {
+ for (Transformer t : Transformer.values()) {
+ if (t.ordinal() == transformerId) {
setPresetTransformer(t);
break;
}
}
}
+ ;
+
/**
* set preset PagerTransformer via the name of transforemer.
+ *
* @param transformerName
*/
- public void setPresetTransformer(String transformerName){
- for(Transformer t : Transformer.values()){
- if(t.equals(transformerName)){
+ public void setPresetTransformer(String transformerName) {
+ for (Transformer t : Transformer.values()) {
+ if (t.equals(transformerName)) {
setPresetTransformer(t);
return;
}
@@ -453,11 +421,12 @@ public void setPresetTransformer(String transformerName){
* Inject your custom animation into PageTransformer, you can know more details in
* {@link com.daimajia.slider.library.Animations.BaseAnimationInterface},
* and you can see a example in {@link com.daimajia.slider.library.Animations.DescriptionAnimation}
+ *
* @param animation
*/
- public void setCustomAnimation(BaseAnimationInterface animation){
+ public void setCustomAnimation(BaseAnimationInterface animation) {
mCustomAnimation = animation;
- if(mViewPagerTransformer != null){
+ if (mViewPagerTransformer != null) {
mViewPagerTransformer.setCustomAnimationInterface(mCustomAnimation);
}
}
@@ -467,12 +436,12 @@ public void setCustomAnimation(BaseAnimationInterface animation){
*
* @param ts
*/
- public void setPresetTransformer(Transformer ts){
+ public void setPresetTransformer(Transformer ts) {
//
// special thanks to https://github.com/ToxicBakery/ViewPagerTransforms
//
BaseTransformer t = null;
- switch (ts){
+ switch (ts) {
case Default:
t = new DefaultTransformer();
break;
@@ -522,143 +491,127 @@ public void setPresetTransformer(Transformer ts){
t = new ZoomOutTransformer();
break;
}
- setPagerTransformer(true,t);
+ setPagerTransformer(true, t);
}
+ public PagerIndicator.IndicatorVisibility getIndicatorVisibility() {
+ if (mIndicator == null) {
+ return mIndicator.getIndicatorVisibility();
+ }
+ return PagerIndicator.IndicatorVisibility.Invisible;
+ }
/**
* Set the visibility of the indicators.
+ *
* @param visibility
*/
- public void setIndicatorVisibility(PagerIndicator.IndicatorVisibility visibility){
- if(mIndicator == null){
+ public void setIndicatorVisibility(PagerIndicator.IndicatorVisibility visibility) {
+ if (mIndicator == null) {
return;
}
mIndicator.setIndicatorVisibility(visibility);
}
- public PagerIndicator.IndicatorVisibility getIndicatorVisibility(){
- if(mIndicator == null){
- return mIndicator.getIndicatorVisibility();
- }
- return PagerIndicator.IndicatorVisibility.Invisible;
-
- }
-
/**
* get the {@link com.daimajia.slider.library.Indicators.PagerIndicator} instance.
* You can manipulate the properties of the indicator.
+ *
* @return
*/
- public PagerIndicator getPagerIndicator(){
+ public PagerIndicator getPagerIndicator() {
return mIndicator;
}
- public enum PresetIndicators{
- Center_Bottom("Center_Bottom",R.id.default_center_bottom_indicator),
- Right_Bottom("Right_Bottom",R.id.default_bottom_right_indicator),
- Left_Bottom("Left_Bottom",R.id.default_bottom_left_indicator),
- Center_Top("Center_Top",R.id.default_center_top_indicator),
- Right_Top("Right_Top",R.id.default_center_top_right_indicator),
- Left_Top("Left_Top",R.id.default_center_top_left_indicator);
-
- private final String name;
- private final int id;
- private PresetIndicators(String name,int id){
- this.name = name;
- this.id = id;
- }
-
- public String toString(){
- return name;
- }
-
- public int getResourceId(){
- return id;
- }
- }
- public void setPresetIndicator(PresetIndicators presetIndicator){
- PagerIndicator pagerIndicator = (PagerIndicator)findViewById(presetIndicator.getResourceId());
+ public void setPresetIndicator(PresetIndicators presetIndicator) {
+ PagerIndicator pagerIndicator = (PagerIndicator) findViewById(presetIndicator.getResourceId());
setCustomIndicator(pagerIndicator);
}
- private InfinitePagerAdapter getWrapperAdapter(){
+ private InfinitePagerAdapter getWrapperAdapter() {
PagerAdapter adapter = mViewPager.getAdapter();
- if(adapter!=null){
- return (InfinitePagerAdapter)adapter;
- }else{
+ if (adapter != null) {
+ return (InfinitePagerAdapter) adapter;
+ } else {
return null;
}
}
- private SliderAdapter getRealAdapter(){
+ private SliderAdapter getRealAdapter() {
PagerAdapter adapter = mViewPager.getAdapter();
- if(adapter!=null){
- return ((InfinitePagerAdapter)adapter).getRealAdapter();
+ if (adapter != null) {
+ return ((InfinitePagerAdapter) adapter).getRealAdapter();
}
return null;
}
/**
* get the current item position
+ *
* @return
*/
- public int getCurrentPosition(){
+ public int getCurrentPosition() {
- if(getRealAdapter() == null)
+ if (getRealAdapter() == null)
throw new IllegalStateException("You did not set a slider adapter");
return mViewPager.getCurrentItem() % getRealAdapter().getCount();
}
+ public void setCurrentPosition(int position) {
+ setCurrentPosition(position, true);
+ }
+
/**
* get current slider.
+ *
* @return
*/
- public BaseSliderView getCurrentSlider(){
+ public BaseSliderView getCurrentSlider() {
- if(getRealAdapter() == null)
+ if (getRealAdapter() == null)
throw new IllegalStateException("You did not set a slider adapter");
int count = getRealAdapter().getCount();
int realCount = mViewPager.getCurrentItem() % count;
- return getRealAdapter().getSliderView(realCount);
+ return getRealAdapter().getSliderView(realCount);
}
/**
* remove the slider at the position. Notice: It's a not perfect method, a very small bug still exists.
*/
- public void removeSliderAt(int position){
- if(getRealAdapter()!=null){
+ public void removeSliderAt(int position) {
+ if (getRealAdapter() != null) {
getRealAdapter().removeSliderAt(position);
- mViewPager.setCurrentItem(mViewPager.getCurrentItem(),false);
+ mViewPager.setCurrentItem(mViewPager.getCurrentItem(), false);
}
}
/**
* remove all the sliders. Notice: It's a not perfect method, a very small bug still exists.
*/
- public void removeAllSliders(){
- if(getRealAdapter()!=null){
+ public void removeAllSliders() {
+ if (getRealAdapter() != null) {
int count = getRealAdapter().getCount();
getRealAdapter().removeAllSliders();
//a small bug, but fixed by this trick.
//bug: when remove adapter's all the sliders.some caching slider still alive.
- mViewPager.setCurrentItem(mViewPager.getCurrentItem() + count,false);
+ mViewPager.setCurrentItem(mViewPager.getCurrentItem() + count, false);
}
}
/**
- *set current slider
+ * set current slider
+ *
* @param position
*/
public void setCurrentPosition(int position, boolean smooth) {
if (getRealAdapter() == null)
throw new IllegalStateException("You did not set a slider adapter");
- if(position >= getRealAdapter().getCount()){
+ if (position >= getRealAdapter().getCount()) {
throw new IllegalStateException("Item position is not exist");
}
int p = mViewPager.getCurrentItem() % getRealAdapter().getCount();
@@ -666,10 +619,6 @@ public void setCurrentPosition(int position, boolean smooth) {
mViewPager.setCurrentItem(n, smooth);
}
- public void setCurrentPosition(int position) {
- setCurrentPosition(position, true);
- }
-
/**
* move to prev slide.
*/
@@ -681,7 +630,7 @@ public void movePrevPosition(boolean smooth) {
mViewPager.setCurrentItem(mViewPager.getCurrentItem() - 1, smooth);
}
- public void movePrevPosition(){
+ public void movePrevPosition() {
movePrevPosition(true);
}
@@ -699,4 +648,65 @@ public void moveNextPosition(boolean smooth) {
public void moveNextPosition() {
moveNextPosition(true);
}
+
+ /**
+ * preset transformers and their names
+ */
+ public enum Transformer {
+ Default("Default"),
+ Accordion("Accordion"),
+ Background2Foreground("Background2Foreground"),
+ CubeIn("CubeIn"),
+ DepthPage("DepthPage"),
+ Fade("Fade"),
+ FlipHorizontal("FlipHorizontal"),
+ FlipPage("FlipPage"),
+ Foreground2Background("Foreground2Background"),
+ RotateDown("RotateDown"),
+ RotateUp("RotateUp"),
+ Stack("Stack"),
+ Tablet("Tablet"),
+ ZoomIn("ZoomIn"),
+ ZoomOutSlide("ZoomOutSlide"),
+ ZoomOut("ZoomOut");
+
+ private final String name;
+
+ private Transformer(String s) {
+ name = s;
+ }
+
+ public String toString() {
+ return name;
+ }
+
+ public boolean equals(String other) {
+ return (other == null) ? false : name.equals(other);
+ }
+ }
+
+ public enum PresetIndicators {
+ Center_Bottom("Center_Bottom", R.id.default_center_bottom_indicator),
+ Right_Bottom("Right_Bottom", R.id.default_bottom_right_indicator),
+ Left_Bottom("Left_Bottom", R.id.default_bottom_left_indicator),
+ Center_Top("Center_Top", R.id.default_center_top_indicator),
+ Right_Top("Right_Top", R.id.default_center_top_right_indicator),
+ Left_Top("Left_Top", R.id.default_center_top_left_indicator);
+
+ private final String name;
+ private final int id;
+
+ private PresetIndicators(String name, int id) {
+ this.name = name;
+ this.id = id;
+ }
+
+ public String toString() {
+ return name;
+ }
+
+ public int getResourceId() {
+ return id;
+ }
+ }
}
diff --git a/library/src/main/java/com/daimajia/slider/library/SliderTypes/BaseSliderView.java b/library/src/main/java/com/daimajia/slider/library/SliderTypes/BaseSliderView.java
index 8ad1d35..f3506de 100644
--- a/library/src/main/java/com/daimajia/slider/library/SliderTypes/BaseSliderView.java
+++ b/library/src/main/java/com/daimajia/slider/library/SliderTypes/BaseSliderView.java
@@ -22,25 +22,19 @@
public abstract class BaseSliderView {
protected Context mContext;
-
+ protected OnSliderClickListener mOnSliderClickListener;
private Bundle mBundle;
-
/**
* Error place holder image.
*/
private int mErrorPlaceHolderRes;
-
/**
* Empty imageView placeholder.
*/
private int mEmptyPlaceHolderRes;
-
private String mUrl;
private File mFile;
private int mRes;
-
- protected OnSliderClickListener mOnSliderClickListener;
-
private boolean mErrorDisappear;
private ImageLoadListener mLoadListener;
@@ -54,61 +48,62 @@ public abstract class BaseSliderView {
*/
private ScaleType mScaleType = ScaleType.Fit;
- public enum ScaleType{
- CenterCrop, CenterInside, Fit, FitCenterCrop
- }
-
protected BaseSliderView(Context context) {
mContext = context;
}
/**
* the placeholder image when loading image from url or file.
+ *
* @param resId Image resource id
* @return
*/
- public BaseSliderView empty(int resId){
+ public BaseSliderView empty(int resId) {
mEmptyPlaceHolderRes = resId;
return this;
}
/**
* determine whether remove the image which failed to download or load from file
+ *
* @param disappear
* @return
*/
- public BaseSliderView errorDisappear(boolean disappear){
+ public BaseSliderView errorDisappear(boolean disappear) {
mErrorDisappear = disappear;
return this;
}
/**
* if you set errorDisappear false, this will set a error placeholder image.
+ *
* @param resId image resource id
* @return
*/
- public BaseSliderView error(int resId){
+ public BaseSliderView error(int resId) {
mErrorPlaceHolderRes = resId;
return this;
}
/**
* the description of a slider image.
+ *
* @param description
* @return
*/
- public BaseSliderView description(String description){
+ public BaseSliderView description(String description) {
mDescription = description;
return this;
}
/**
* set a url as a image that preparing to load
+ *
* @param url
* @return
*/
- public BaseSliderView image(String url){
- if(mFile != null || mRes != 0){
+ public BaseSliderView image(String url) {
+ if (mFile != null || mRes != 0) {
throw new IllegalStateException("Call multi image function," +
"you only have permission to call it once");
}
@@ -118,11 +113,12 @@ public BaseSliderView image(String url){
/**
* set a file as a image that will to load
+ *
* @param file
* @return
*/
- public BaseSliderView image(File file){
- if(mUrl != null || mRes != 0){
+ public BaseSliderView image(File file) {
+ if (mUrl != null || mRes != 0) {
throw new IllegalStateException("Call multi image function," +
"you only have permission to call it once");
}
@@ -130,8 +126,8 @@ public BaseSliderView image(File file){
return this;
}
- public BaseSliderView image(int res){
- if(mUrl != null || mFile != null){
+ public BaseSliderView image(int res) {
+ if (mUrl != null || mFile != null) {
throw new IllegalStateException("Call multi image function," +
"you only have permission to call it once");
}
@@ -141,62 +137,65 @@ public BaseSliderView image(int res){
/**
* lets users add a bundle of additional information
+ *
* @param bundle
* @return
*/
- public BaseSliderView bundle(Bundle bundle){
+ public BaseSliderView bundle(Bundle bundle) {
mBundle = bundle;
return this;
}
- public String getUrl(){
+ public String getUrl() {
return mUrl;
}
- public boolean isErrorDisappear(){
+ public boolean isErrorDisappear() {
return mErrorDisappear;
}
- public int getEmpty(){
+ public int getEmpty() {
return mEmptyPlaceHolderRes;
}
- public int getError(){
+ public int getError() {
return mErrorPlaceHolderRes;
}
- public String getDescription(){
+ public String getDescription() {
return mDescription;
}
- public Context getContext(){
+ public Context getContext() {
return mContext;
}
/**
* set a slider image click listener
+ *
* @param l
* @return
*/
- public BaseSliderView setOnSliderClickListener(OnSliderClickListener l){
+ public BaseSliderView setOnSliderClickListener(OnSliderClickListener l) {
mOnSliderClickListener = l;
return this;
}
/**
* When you want to implement your own slider view, please call this method in the end in `getView()` method
- * @param v the whole view
+ *
+ * @param v the whole view
* @param targetImageView where to place image
*/
- protected void bindEventAndShow(final View v, ImageView targetImageView){
+ protected void bindEventAndShow(final View v, ImageView targetImageView) {
final BaseSliderView me = this;
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- if(mOnSliderClickListener != null){
- mOnSliderClickListener.onSliderClick(me);
- }
+ if (mOnSliderClickListener != null) {
+ mOnSliderClickListener.onSliderClick(me);
+ }
}
});
@@ -209,29 +208,29 @@ public void onClick(View v) {
Picasso p = (mPicasso != null) ? mPicasso : Picasso.with(mContext);
RequestCreator rq = null;
- if(mUrl!=null){
+ if (mUrl != null) {
rq = p.load(mUrl);
- }else if(mFile != null){
+ } else if (mFile != null) {
rq = p.load(mFile);
- }else if(mRes != 0){
+ } else if (mRes != 0) {
rq = p.load(mRes);
- }else{
+ } else {
return;
}
- if(rq == null){
+ if (rq == null) {
return;
}
- if(getEmpty() != 0){
+ if (getEmpty() != 0) {
rq.placeholder(getEmpty());
}
- if(getError() != 0){
+ if (getError() != 0) {
rq.error(getError());
}
- switch (mScaleType){
+ switch (mScaleType) {
case Fit:
rq.fit();
break;
@@ -243,69 +242,61 @@ public void onClick(View v) {
break;
}
- rq.into(targetImageView,new Callback() {
+ rq.into(targetImageView, new Callback() {
@Override
public void onSuccess() {
- if(v.findViewById(R.id.loading_bar) != null){
+ if (v.findViewById(R.id.loading_bar) != null) {
v.findViewById(R.id.loading_bar).setVisibility(View.INVISIBLE);
}
}
@Override
public void onError() {
- if(mLoadListener != null){
- mLoadListener.onEnd(false,me);
+ if (mLoadListener != null) {
+ mLoadListener.onEnd(false, me);
}
- if(v.findViewById(R.id.loading_bar) != null){
+ if (v.findViewById(R.id.loading_bar) != null) {
v.findViewById(R.id.loading_bar).setVisibility(View.INVISIBLE);
}
}
});
- }
-
+ }
+ public ScaleType getScaleType() {
+ return mScaleType;
+ }
- public BaseSliderView setScaleType(ScaleType type){
+ public BaseSliderView setScaleType(ScaleType type) {
mScaleType = type;
return this;
}
- public ScaleType getScaleType(){
- return mScaleType;
- }
-
/**
* the extended class have to implement getView(), which is called by the adapter,
* every extended class response to render their own view.
+ *
* @return
*/
public abstract View getView();
/**
* set a listener to get a message , if load error.
+ *
* @param l
*/
- public void setOnImageLoadListener(ImageLoadListener l){
+ public void setOnImageLoadListener(ImageLoadListener l) {
mLoadListener = l;
}
- public interface OnSliderClickListener {
- public void onSliderClick(BaseSliderView slider);
- }
-
/**
* when you have some extra information, please put it in this bundle.
+ *
* @return
*/
- public Bundle getBundle(){
+ public Bundle getBundle() {
return mBundle;
}
- public interface ImageLoadListener{
- public void onStart(BaseSliderView target);
- public void onEnd(boolean result,BaseSliderView target);
- }
-
/**
* Get the last instance set via setPicasso(), or null if no user provided instance was set
*
@@ -325,4 +316,18 @@ public Picasso getPicasso() {
public void setPicasso(Picasso picasso) {
mPicasso = picasso;
}
+
+ public enum ScaleType {
+ CenterCrop, CenterInside, Fit, FitCenterCrop
+ }
+
+ public interface OnSliderClickListener {
+ public void onSliderClick(BaseSliderView slider);
+ }
+
+ public interface ImageLoadListener {
+ public void onStart(BaseSliderView target);
+
+ public void onEnd(boolean result, BaseSliderView target);
+ }
}
diff --git a/library/src/main/java/com/daimajia/slider/library/SliderTypes/DefaultSliderView.java b/library/src/main/java/com/daimajia/slider/library/SliderTypes/DefaultSliderView.java
index f6d52dd..ea0471d 100644
--- a/library/src/main/java/com/daimajia/slider/library/SliderTypes/DefaultSliderView.java
+++ b/library/src/main/java/com/daimajia/slider/library/SliderTypes/DefaultSliderView.java
@@ -9,10 +9,10 @@
/**
* a simple slider view, which just show an image. If you want to make your own slider view,
- *
+ *
* just extend BaseSliderView, and implement getView() method.
*/
-public class DefaultSliderView extends BaseSliderView{
+public class DefaultSliderView extends BaseSliderView {
public DefaultSliderView(Context context) {
super(context);
@@ -20,8 +20,8 @@ public DefaultSliderView(Context context) {
@Override
public View getView() {
- View v = LayoutInflater.from(getContext()).inflate(R.layout.render_type_default,null);
- ImageView target = (ImageView)v.findViewById(R.id.daimajia_slider_image);
+ View v = LayoutInflater.from(getContext()).inflate(R.layout.render_type_default, null);
+ ImageView target = (ImageView) v.findViewById(R.id.daimajia_slider_image);
bindEventAndShow(v, target);
return v;
}
diff --git a/library/src/main/java/com/daimajia/slider/library/SliderTypes/TextSliderView.java b/library/src/main/java/com/daimajia/slider/library/SliderTypes/TextSliderView.java
index 18c2580..f4b21aa 100644
--- a/library/src/main/java/com/daimajia/slider/library/SliderTypes/TextSliderView.java
+++ b/library/src/main/java/com/daimajia/slider/library/SliderTypes/TextSliderView.java
@@ -11,16 +11,16 @@
/**
* This is a slider with a description TextView.
*/
-public class TextSliderView extends BaseSliderView{
+public class TextSliderView extends BaseSliderView {
public TextSliderView(Context context) {
super(context);
}
@Override
public View getView() {
- View v = LayoutInflater.from(getContext()).inflate(R.layout.render_type_text,null);
- ImageView target = (ImageView)v.findViewById(R.id.daimajia_slider_image);
- TextView description = (TextView)v.findViewById(R.id.description);
+ View v = LayoutInflater.from(getContext()).inflate(R.layout.render_type_text, null);
+ ImageView target = (ImageView) v.findViewById(R.id.daimajia_slider_image);
+ TextView description = (TextView) v.findViewById(R.id.description);
description.setText(getDescription());
bindEventAndShow(v, target);
return v;
diff --git a/library/src/main/java/com/daimajia/slider/library/Transformers/AccordionTransformer.java b/library/src/main/java/com/daimajia/slider/library/Transformers/AccordionTransformer.java
index e159b9b..141982a 100644
--- a/library/src/main/java/com/daimajia/slider/library/Transformers/AccordionTransformer.java
+++ b/library/src/main/java/com/daimajia/slider/library/Transformers/AccordionTransformer.java
@@ -3,16 +3,15 @@
/**
* Created by daimajia on 14-5-29.
*/
-import android.view.View;
-import com.nineoldandroids.view.ViewHelper;
+import android.view.View;
public class AccordionTransformer extends BaseTransformer {
@Override
protected void onTransform(View view, float position) {
- ViewHelper.setPivotX(view,position < 0 ? 0 : view.getWidth());
- ViewHelper.setScaleX(view,position < 0 ? 1f + position : 1f - position);
+ view.setPivotX(position < 0 ? 0 : view.getWidth());
+ View.SCALE_X.set(view, position < 0 ? 1f + position : 1f - position);
}
}
\ No newline at end of file
diff --git a/library/src/main/java/com/daimajia/slider/library/Transformers/BackgroundToForegroundTransformer.java b/library/src/main/java/com/daimajia/slider/library/Transformers/BackgroundToForegroundTransformer.java
index d5e1572..8852710 100644
--- a/library/src/main/java/com/daimajia/slider/library/Transformers/BackgroundToForegroundTransformer.java
+++ b/library/src/main/java/com/daimajia/slider/library/Transformers/BackgroundToForegroundTransformer.java
@@ -2,25 +2,23 @@
import android.view.View;
-import com.nineoldandroids.view.ViewHelper;
-
public class BackgroundToForegroundTransformer extends BaseTransformer {
- @Override
- protected void onTransform(View view, float position) {
- final float height = view.getHeight();
- final float width = view.getWidth();
- final float scale = min(position < 0 ? 1f : Math.abs(1f - position), 0.5f);
+ private static final float min(float val, float min) {
+ return val < min ? min : val;
+ }
- ViewHelper.setScaleX(view,scale);
- ViewHelper.setScaleY(view,scale);
- ViewHelper.setPivotX(view,width*0.5f);
- ViewHelper.setPivotY(view,height*0.5f);
- ViewHelper.setTranslationX(view,position < 0 ? width * position : -width * position * 0.25f);
- }
+ @Override
+ protected void onTransform(View view, float position) {
+ final float height = view.getHeight();
+ final float width = view.getWidth();
+ final float scale = min(position < 0 ? 1f : Math.abs(1f - position), 0.5f);
- private static final float min(float val, float min) {
- return val < min ? min : val;
- }
+ View.SCALE_X.set(view, scale);
+ View.SCALE_Y.set(view, scale);
+ view.setPivotX(width * 0.5f);
+ view.setPivotY(height * 0.5f);
+ View.TRANSLATION_X.set(view, position < 0 ? width * position : -width * position * 0.25f);
+ }
}
diff --git a/library/src/main/java/com/daimajia/slider/library/Transformers/BaseTransformer.java b/library/src/main/java/com/daimajia/slider/library/Transformers/BaseTransformer.java
index c1a78b9..dc26d1c 100644
--- a/library/src/main/java/com/daimajia/slider/library/Transformers/BaseTransformer.java
+++ b/library/src/main/java/com/daimajia/slider/library/Transformers/BaseTransformer.java
@@ -4,28 +4,29 @@
import com.daimajia.slider.library.Animations.BaseAnimationInterface;
import com.daimajia.slider.library.Tricks.ViewPagerEx;
-import com.nineoldandroids.view.ViewHelper;
import java.util.ArrayList;
import java.util.HashMap;
/**
* This is all transformers father.
- *
+ *
* BaseTransformer implement {@link com.daimajia.slider.library.Tricks.ViewPagerEx.PageTransformer}
* which is just same as {@link android.support.v4.view.ViewPager.PageTransformer}.
- *
+ *
* After you call setPageTransformer(), transformPage() will be called by {@link com.daimajia.slider.library.Tricks.ViewPagerEx}
* when your slider are animating.
- *
+ *
* In onPreTransform() function, that will make {@link com.daimajia.slider.library.Animations.BaseAnimationInterface}
* work.
- *
+ *
* if you want to make an acceptable transformer, please do not forget to extend from this class.
*/
public abstract class BaseTransformer implements ViewPagerEx.PageTransformer {
+ boolean isApp, isDis;
private BaseAnimationInterface mCustomAnimationInterface;
+ private HashMap> h = new HashMap>();
/**
* Called each {@link #transformPage(View, float)}.
@@ -35,8 +36,6 @@ public abstract class BaseTransformer implements ViewPagerEx.PageTransformer {
*/
protected abstract void onTransform(View view, float position);
- private HashMap> h = new HashMap>();
-
@Override
public void transformPage(View view, float position) {
onPreTransform(view, position);
@@ -72,44 +71,44 @@ protected boolean isPagingEnabled() {
protected void onPreTransform(View view, float position) {
final float width = view.getWidth();
- ViewHelper.setRotationX(view,0);
- ViewHelper.setRotationY(view,0);
- ViewHelper.setRotation(view,0);
- ViewHelper.setScaleX(view,1);
- ViewHelper.setScaleY(view,1);
- ViewHelper.setPivotX(view,0);
- ViewHelper.setPivotY(view,0);
- ViewHelper.setTranslationY(view,0);
- ViewHelper.setTranslationX(view,isPagingEnabled() ? 0f : -width * position);
+ View.ROTATION_X.set(view, 0f);
+ View.ROTATION_Y.set(view, 0f);
+ View.ROTATION.set(view, 0f);
+ View.SCALE_X.set(view, 1f);
+ View.SCALE_Y.set(view, 1f);
+ view.setPivotX(0);
+ view.setPivotY(0);
+ View.TRANSLATION_Y.set(view, 0f);
+ View.TRANSLATION_X.set(view, isPagingEnabled() ? 0f : -width * position);
if (hideOffscreenPages()) {
- ViewHelper.setAlpha(view,position <= -1f || position >= 1f ? 0f : 1f);
+ View.ALPHA.set(view, position <= -1f || position >= 1f ? 0f : 1f);
} else {
- ViewHelper.setAlpha(view,1f);
+ View.ALPHA.set(view, 1f);
}
- if(mCustomAnimationInterface != null){
- if(h.containsKey(view) == false || h.get(view).size() == 1){
- if(position > -1 && position < 1){
- if(h.get(view) == null){
- h.put(view,new ArrayList());
+ if (mCustomAnimationInterface != null) {
+ if (h.containsKey(view) == false || h.get(view).size() == 1) {
+ if (position > -1 && position < 1) {
+ if (h.get(view) == null) {
+ h.put(view, new ArrayList());
}
h.get(view).add(position);
- if(h.get(view).size() == 2){
+ if (h.get(view).size() == 2) {
float zero = h.get(view).get(0);
float cha = h.get(view).get(1) - h.get(view).get(0);
- if(zero > 0){
- if(cha > -1 && cha < 0){
+ if (zero > 0) {
+ if (cha > -1 && cha < 0) {
//in
mCustomAnimationInterface.onPrepareNextItemShowInScreen(view);
- }else{
+ } else {
//out
mCustomAnimationInterface.onPrepareCurrentItemLeaveScreen(view);
}
- }else{
- if(cha > -1 && cha < 0){
+ } else {
+ if (cha > -1 && cha < 0) {
//out
mCustomAnimationInterface.onPrepareCurrentItemLeaveScreen(view);
- }else{
+ } else {
//in
mCustomAnimationInterface.onPrepareNextItemShowInScreen(view);
}
@@ -119,7 +118,7 @@ protected void onPreTransform(View view, float position) {
}
}
}
- boolean isApp,isDis;
+
/**
* Called each {@link #transformPage(View, float)} call after {@link #onTransform(View, float)} is finished.
*
@@ -127,15 +126,15 @@ protected void onPreTransform(View view, float position) {
* @param position
*/
protected void onPostTransform(View view, float position) {
- if(mCustomAnimationInterface != null){
- if(position == -1 || position == 1){
+ if (mCustomAnimationInterface != null) {
+ if (position == -1 || position == 1) {
mCustomAnimationInterface.onCurrentItemDisappear(view);
isApp = true;
- }else if(position == 0){
+ } else if (position == 0) {
mCustomAnimationInterface.onNextItemAppear(view);
isDis = true;
}
- if(isApp && isDis){
+ if (isApp && isDis) {
h.clear();
isApp = false;
isDis = false;
@@ -144,7 +143,7 @@ protected void onPostTransform(View view, float position) {
}
- public void setCustomAnimationInterface(BaseAnimationInterface animationInterface){
+ public void setCustomAnimationInterface(BaseAnimationInterface animationInterface) {
mCustomAnimationInterface = animationInterface;
}
diff --git a/library/src/main/java/com/daimajia/slider/library/Transformers/CubeInTransformer.java b/library/src/main/java/com/daimajia/slider/library/Transformers/CubeInTransformer.java
index 8a8c382..958f1ae 100644
--- a/library/src/main/java/com/daimajia/slider/library/Transformers/CubeInTransformer.java
+++ b/library/src/main/java/com/daimajia/slider/library/Transformers/CubeInTransformer.java
@@ -2,21 +2,19 @@
import android.view.View;
-import com.nineoldandroids.view.ViewHelper;
-
public class CubeInTransformer extends BaseTransformer {
- @Override
- protected void onTransform(View view, float position) {
- // Rotate the fragment on the left or right edge
- ViewHelper.setPivotX(view,position > 0 ? 0 : view.getWidth());
- ViewHelper.setPivotY(view,0);
- ViewHelper.setRotation(view,-90f * position);
- }
+ @Override
+ protected void onTransform(View view, float position) {
+ // Rotate the fragment on the left or right edge
+ view.setPivotX(position > 0 ? 0 : view.getWidth());
+ view.setPivotY(0);
+ View.ROTATION.set(view, -90f * position);
+ }
- @Override
- public boolean isPagingEnabled() {
- return true;
- }
+ @Override
+ public boolean isPagingEnabled() {
+ return true;
+ }
}
diff --git a/library/src/main/java/com/daimajia/slider/library/Transformers/DefaultTransformer.java b/library/src/main/java/com/daimajia/slider/library/Transformers/DefaultTransformer.java
index 9489044..13d50c4 100644
--- a/library/src/main/java/com/daimajia/slider/library/Transformers/DefaultTransformer.java
+++ b/library/src/main/java/com/daimajia/slider/library/Transformers/DefaultTransformer.java
@@ -4,13 +4,13 @@
public class DefaultTransformer extends BaseTransformer {
- @Override
- protected void onTransform(View view, float position) {
- }
+ @Override
+ protected void onTransform(View view, float position) {
+ }
- @Override
- public boolean isPagingEnabled() {
- return true;
- }
+ @Override
+ public boolean isPagingEnabled() {
+ return true;
+ }
}
diff --git a/library/src/main/java/com/daimajia/slider/library/Transformers/DepthPageTransformer.java b/library/src/main/java/com/daimajia/slider/library/Transformers/DepthPageTransformer.java
index c72e0da..adea485 100644
--- a/library/src/main/java/com/daimajia/slider/library/Transformers/DepthPageTransformer.java
+++ b/library/src/main/java/com/daimajia/slider/library/Transformers/DepthPageTransformer.java
@@ -2,31 +2,29 @@
import android.view.View;
-import com.nineoldandroids.view.ViewHelper;
-
public class DepthPageTransformer extends BaseTransformer {
- private static final float MIN_SCALE = 0.75f;
+ private static final float MIN_SCALE = 0.75f;
- @Override
- protected void onTransform(View view, float position) {
- if (position <= 0f) {
- ViewHelper.setTranslationX(view,0f);
- ViewHelper.setScaleX(view,1f);
- ViewHelper.setScaleY(view,1f);
- } else if (position <= 1f) {
- final float scaleFactor = MIN_SCALE + (1 - MIN_SCALE) * (1 - Math.abs(position));
- ViewHelper.setAlpha(view,1-position);
- ViewHelper.setPivotY(view,0.5f * view.getHeight());
- ViewHelper.setTranslationX(view,view.getWidth() * - position);
- ViewHelper.setScaleX(view,scaleFactor);
- ViewHelper.setScaleY(view,scaleFactor);
- }
- }
+ @Override
+ protected void onTransform(View view, float position) {
+ if (position <= 0f) {
+ View.TRANSLATION_X.set(view, 0f);
+ View.SCALE_X.set(view, 1f);
+ View.SCALE_Y.set(view, 1f);
+ } else if (position <= 1f) {
+ final float scaleFactor = MIN_SCALE + (1 - MIN_SCALE) * (1 - Math.abs(position));
+ View.ALPHA.set(view, 1 - position);
+ view.setPivotY(0.5f * view.getHeight());
+ View.TRANSLATION_X.set(view, view.getWidth() * -position);
+ View.SCALE_X.set(view, scaleFactor);
+ View.SCALE_Y.set(view, scaleFactor);
+ }
+ }
- @Override
- protected boolean isPagingEnabled() {
- return true;
- }
+ @Override
+ protected boolean isPagingEnabled() {
+ return true;
+ }
}
diff --git a/library/src/main/java/com/daimajia/slider/library/Transformers/FadeTransformer.java b/library/src/main/java/com/daimajia/slider/library/Transformers/FadeTransformer.java
index c202ab3..01c26eb 100644
--- a/library/src/main/java/com/daimajia/slider/library/Transformers/FadeTransformer.java
+++ b/library/src/main/java/com/daimajia/slider/library/Transformers/FadeTransformer.java
@@ -2,8 +2,6 @@
import android.view.View;
-import com.nineoldandroids.view.ViewHelper;
-
/**
* Created by realandylawton on 11/22/13.
*/
@@ -13,20 +11,20 @@ public class FadeTransformer extends BaseTransformer {
protected void onTransform(View view, float position) {
// Page is not an immediate sibling, just make transparent
- if(position < -1 || position > 1) {
- ViewHelper.setAlpha(view,0.6f);
+ if (position < -1 || position > 1) {
+ View.ALPHA.set(view, 0.6f);
}
// Page is sibling to left or right
else if (position <= 0 || position <= 1) {
// Calculate alpha. Position is decimal in [-1,0] or [0,1]
float alpha = (position <= 0) ? position + 1 : 1 - position;
- ViewHelper.setAlpha(view,alpha);
+ View.ALPHA.set(view, alpha);
}
// Page is active, make fully visible
else if (position == 0) {
- ViewHelper.setAlpha(view,1);
+ View.ALPHA.set(view, 1f);
}
}
diff --git a/library/src/main/java/com/daimajia/slider/library/Transformers/FlipHorizontalTransformer.java b/library/src/main/java/com/daimajia/slider/library/Transformers/FlipHorizontalTransformer.java
index ada24aa..74f16df 100644
--- a/library/src/main/java/com/daimajia/slider/library/Transformers/FlipHorizontalTransformer.java
+++ b/library/src/main/java/com/daimajia/slider/library/Transformers/FlipHorizontalTransformer.java
@@ -2,17 +2,15 @@
import android.view.View;
-import com.nineoldandroids.view.ViewHelper;
-
public class FlipHorizontalTransformer extends BaseTransformer {
- @Override
- protected void onTransform(View view, float position) {
- final float rotation = 180f * position;
- ViewHelper.setAlpha(view,rotation > 90f || rotation < -90f ? 0 : 1);
- ViewHelper.setPivotY(view,view.getHeight()*0.5f);
- ViewHelper.setPivotX(view,view.getWidth() * 0.5f);
- ViewHelper.setRotationY(view,rotation);
- }
+ @Override
+ protected void onTransform(View view, float position) {
+ final float rotation = 180f * position;
+ View.ALPHA.set(view, rotation > 90f || rotation < -90f ? 0 : 1f);
+ view.setPivotY(view.getHeight() * 0.5f);
+ view.setPivotX(view.getWidth() * 0.5f);
+ View.ROTATION_Y.set(view, rotation);
+ }
}
diff --git a/library/src/main/java/com/daimajia/slider/library/Transformers/FlipPageViewTransformer.java b/library/src/main/java/com/daimajia/slider/library/Transformers/FlipPageViewTransformer.java
index 31b0cf1..c01905d 100644
--- a/library/src/main/java/com/daimajia/slider/library/Transformers/FlipPageViewTransformer.java
+++ b/library/src/main/java/com/daimajia/slider/library/Transformers/FlipPageViewTransformer.java
@@ -4,14 +4,13 @@
import android.view.View;
import com.daimajia.slider.library.Tricks.ViewPagerEx;
-import com.nineoldandroids.view.ViewHelper;
public class FlipPageViewTransformer extends BaseTransformer {
@Override
protected void onTransform(View view, float position) {
float percentage = 1 - Math.abs(position);
- if(Build.VERSION.SDK_INT >= 13){
+ if (Build.VERSION.SDK_INT >= 13) {
view.setCameraDistance(12000);
}
setVisibility(view, position);
@@ -30,20 +29,16 @@ private void setVisibility(View page, float position) {
private void setTranslation(View view) {
ViewPagerEx viewPager = (ViewPagerEx) view.getParent();
- int scroll = viewPager.getScrollX() - view.getLeft();
- ViewHelper.setTranslationX(view,scroll);
+ float scroll = viewPager.getScrollX() - view.getLeft();
+ View.TRANSLATION_X.set(view, scroll);
}
private void setSize(View view, float position, float percentage) {
- ViewHelper.setScaleX(view,(position != 0 && position != 1) ? percentage : 1);
- ViewHelper.setScaleY(view,(position != 0 && position != 1) ? percentage : 1);
+ View.SCALE_X.set(view, (position != 0 && position != 1) ? percentage : 1);
+ View.SCALE_Y.set(view, (position != 0 && position != 1) ? percentage : 1);
}
private void setRotation(View view, float position, float percentage) {
- if (position > 0) {
- ViewHelper.setRotationY(view,-180 * (percentage + 1));
- } else {
- ViewHelper.setRotationY(view,180 * (percentage + 1));
- }
+ View.ROTATION_Y.set(view, position > 0 ? -1 : 1 * 180 * (percentage + 1));
}
}
\ No newline at end of file
diff --git a/library/src/main/java/com/daimajia/slider/library/Transformers/ForegroundToBackgroundTransformer.java b/library/src/main/java/com/daimajia/slider/library/Transformers/ForegroundToBackgroundTransformer.java
index 7f53c98..f341d07 100644
--- a/library/src/main/java/com/daimajia/slider/library/Transformers/ForegroundToBackgroundTransformer.java
+++ b/library/src/main/java/com/daimajia/slider/library/Transformers/ForegroundToBackgroundTransformer.java
@@ -2,25 +2,23 @@
import android.view.View;
-import com.nineoldandroids.view.ViewHelper;
-
public class ForegroundToBackgroundTransformer extends BaseTransformer {
- @Override
- protected void onTransform(View view, float position) {
- final float height = view.getHeight();
- final float width = view.getWidth();
- final float scale = min(position > 0 ? 1f : Math.abs(1f + position), 0.5f);
+ private static final float min(float val, float min) {
+ return val < min ? min : val;
+ }
- ViewHelper.setScaleX(view,scale);
- ViewHelper.setScaleY(view,scale);
- ViewHelper.setPivotX(view,width * 0.5f);
- ViewHelper.setPivotY(view,height * 0.5f);
- ViewHelper.setTranslationX(view,position > 0 ? width * position : -width * position * 0.25f);
- }
+ @Override
+ protected void onTransform(View view, float position) {
+ final float height = view.getHeight();
+ final float width = view.getWidth();
+ final float scale = min(position > 0 ? 1f : Math.abs(1f + position), 0.5f);
- private static final float min(float val, float min) {
- return val < min ? min : val;
- }
+ View.SCALE_X.set(view, scale);
+ View.SCALE_Y.set(view, scale);
+ view.setPivotX(width * 0.5f);
+ view.setPivotY(height * 0.5f);
+ View.TRANSLATION_X.set(view, position > 0 ? width * position : -width * position * 0.25f);
+ }
}
diff --git a/library/src/main/java/com/daimajia/slider/library/Transformers/RotateDownTransformer.java b/library/src/main/java/com/daimajia/slider/library/Transformers/RotateDownTransformer.java
index a88bc22..2b27bef 100644
--- a/library/src/main/java/com/daimajia/slider/library/Transformers/RotateDownTransformer.java
+++ b/library/src/main/java/com/daimajia/slider/library/Transformers/RotateDownTransformer.java
@@ -2,26 +2,24 @@
import android.view.View;
-import com.nineoldandroids.view.ViewHelper;
-
public class RotateDownTransformer extends BaseTransformer {
- private static final float ROT_MOD = -15f;
+ private static final float ROT_MOD = -15f;
+
+ @Override
+ protected void onTransform(View view, float position) {
+ final float width = view.getWidth();
+ final float height = view.getHeight();
+ final float rotation = ROT_MOD * position * -1.25f;
- @Override
- protected void onTransform(View view, float position) {
- final float width = view.getWidth();
- final float height = view.getHeight();
- final float rotation = ROT_MOD * position * -1.25f;
+ view.setPivotX(width * 0.5f);
+ view.setPivotY(height);
+ View.ROTATION.set(view, rotation);
+ }
- ViewHelper.setPivotX(view,width * 0.5f);
- ViewHelper.setPivotY(view,height);
- ViewHelper.setRotation(view,rotation);
- }
-
- @Override
- protected boolean isPagingEnabled() {
- return true;
- }
+ @Override
+ protected boolean isPagingEnabled() {
+ return true;
+ }
}
diff --git a/library/src/main/java/com/daimajia/slider/library/Transformers/RotateUpTransformer.java b/library/src/main/java/com/daimajia/slider/library/Transformers/RotateUpTransformer.java
index 2619f3a..94ff878 100644
--- a/library/src/main/java/com/daimajia/slider/library/Transformers/RotateUpTransformer.java
+++ b/library/src/main/java/com/daimajia/slider/library/Transformers/RotateUpTransformer.java
@@ -2,26 +2,24 @@
import android.view.View;
-import com.nineoldandroids.view.ViewHelper;
-
public class RotateUpTransformer extends BaseTransformer {
- private static final float ROT_MOD = -15f;
+ private static final float ROT_MOD = -15f;
+
+ @Override
+ protected void onTransform(View view, float position) {
+ final float width = view.getWidth();
+ final float rotation = ROT_MOD * position;
- @Override
- protected void onTransform(View view, float position) {
- final float width = view.getWidth();
- final float rotation = ROT_MOD * position;
+ view.setPivotX(width * 0.5f);
+ view.setPivotY(0f);
+ View.TRANSLATION_X.set(view, 0f);
+ View.ROTATION.set(view, rotation);
+ }
- ViewHelper.setPivotX(view,width * 0.5f);
- ViewHelper.setPivotY(view,0f);
- ViewHelper.setTranslationX(view,0f);
- ViewHelper.setRotation(view,rotation);
- }
-
- @Override
- protected boolean isPagingEnabled() {
- return true;
- }
+ @Override
+ protected boolean isPagingEnabled() {
+ return true;
+ }
}
diff --git a/library/src/main/java/com/daimajia/slider/library/Transformers/StackTransformer.java b/library/src/main/java/com/daimajia/slider/library/Transformers/StackTransformer.java
index 495d7a2..a9af510 100644
--- a/library/src/main/java/com/daimajia/slider/library/Transformers/StackTransformer.java
+++ b/library/src/main/java/com/daimajia/slider/library/Transformers/StackTransformer.java
@@ -2,13 +2,11 @@
import android.view.View;
-import com.nineoldandroids.view.ViewHelper;
-
public class StackTransformer extends BaseTransformer {
- @Override
- protected void onTransform(View view, float position) {
- ViewHelper.setTranslationX(view,position < 0 ? 0f : -view.getWidth() * position);
- }
+ @Override
+ protected void onTransform(View view, float position) {
+ View.TRANSLATION_X.set(view, position < 0 ? 0f : -view.getWidth() * position);
+ }
}
diff --git a/library/src/main/java/com/daimajia/slider/library/Transformers/TabletTransformer.java b/library/src/main/java/com/daimajia/slider/library/Transformers/TabletTransformer.java
index e2fb6ce..34e8bd0 100644
--- a/library/src/main/java/com/daimajia/slider/library/Transformers/TabletTransformer.java
+++ b/library/src/main/java/com/daimajia/slider/library/Transformers/TabletTransformer.java
@@ -4,37 +4,35 @@
import android.graphics.Matrix;
import android.view.View;
-import com.nineoldandroids.view.ViewHelper;
-
public class TabletTransformer extends BaseTransformer {
- private static final Matrix OFFSET_MATRIX = new Matrix();
- private static final Camera OFFSET_CAMERA = new Camera();
- private static final float[] OFFSET_TEMP_FLOAT = new float[2];
-
- @Override
- protected void onTransform(View view, float position) {
- final float rotation = (position < 0 ? 30f : -30f) * Math.abs(position);
-
- ViewHelper.setTranslationX(view,getOffsetXForRotation(rotation, view.getWidth(), view.getHeight()));
- ViewHelper.setPivotX(view,view.getWidth() * 0.5f);
- ViewHelper.setPivotY(view,0);
- ViewHelper.setRotationY(view,rotation);
- }
-
- protected static final float getOffsetXForRotation(float degrees, int width, int height) {
- OFFSET_MATRIX.reset();
- OFFSET_CAMERA.save();
- OFFSET_CAMERA.rotateY(Math.abs(degrees));
- OFFSET_CAMERA.getMatrix(OFFSET_MATRIX);
- OFFSET_CAMERA.restore();
-
- OFFSET_MATRIX.preTranslate(-width * 0.5f, -height * 0.5f);
- OFFSET_MATRIX.postTranslate(width * 0.5f, height * 0.5f);
- OFFSET_TEMP_FLOAT[0] = width;
- OFFSET_TEMP_FLOAT[1] = height;
- OFFSET_MATRIX.mapPoints(OFFSET_TEMP_FLOAT);
- return (width - OFFSET_TEMP_FLOAT[0]) * (degrees > 0.0f ? 1.0f : -1.0f);
- }
+ private static final Matrix OFFSET_MATRIX = new Matrix();
+ private static final Camera OFFSET_CAMERA = new Camera();
+ private static final float[] OFFSET_TEMP_FLOAT = new float[2];
+
+ protected static final float getOffsetXForRotation(float degrees, int width, int height) {
+ OFFSET_MATRIX.reset();
+ OFFSET_CAMERA.save();
+ OFFSET_CAMERA.rotateY(Math.abs(degrees));
+ OFFSET_CAMERA.getMatrix(OFFSET_MATRIX);
+ OFFSET_CAMERA.restore();
+
+ OFFSET_MATRIX.preTranslate(-width * 0.5f, -height * 0.5f);
+ OFFSET_MATRIX.postTranslate(width * 0.5f, height * 0.5f);
+ OFFSET_TEMP_FLOAT[0] = width;
+ OFFSET_TEMP_FLOAT[1] = height;
+ OFFSET_MATRIX.mapPoints(OFFSET_TEMP_FLOAT);
+ return (width - OFFSET_TEMP_FLOAT[0]) * (degrees > 0.0f ? 1.0f : -1.0f);
+ }
+
+ @Override
+ protected void onTransform(View view, float position) {
+ final float rotation = (position < 0 ? 30f : -30f) * Math.abs(position);
+
+ View.TRANSLATION_X.set(view, getOffsetXForRotation(rotation, view.getWidth(), view.getHeight()));
+ view.setPivotX(view.getWidth() * 0.5f);
+ view.setPivotY(0);
+ View.ROTATION_Y.set(view, rotation);
+ }
}
diff --git a/library/src/main/java/com/daimajia/slider/library/Transformers/ZoomInTransformer.java b/library/src/main/java/com/daimajia/slider/library/Transformers/ZoomInTransformer.java
index 4bacbc0..ec8370a 100644
--- a/library/src/main/java/com/daimajia/slider/library/Transformers/ZoomInTransformer.java
+++ b/library/src/main/java/com/daimajia/slider/library/Transformers/ZoomInTransformer.java
@@ -2,18 +2,16 @@
import android.view.View;
-import com.nineoldandroids.view.ViewHelper;
-
public class ZoomInTransformer extends BaseTransformer {
- @Override
- protected void onTransform(View view, float position) {
- final float scale = position < 0 ? position + 1f : Math.abs(1f - position);
- ViewHelper.setScaleX(view,scale);
- ViewHelper.setScaleY(view,scale);
- ViewHelper.setPivotX(view,view.getWidth() * 0.5f);
- ViewHelper.setPivotY(view,view.getHeight() * 0.5f);
- ViewHelper.setAlpha(view,position < -1f || position > 1f ? 0f : 1f - (scale - 1f));
- }
+ @Override
+ protected void onTransform(View view, float position) {
+ final float scale = position < 0 ? position + 1f : Math.abs(1f - position);
+ View.SCALE_X.set(view, scale);
+ View.SCALE_Y.set(view, scale);
+ view.setPivotX(view.getWidth() * 0.5f);
+ view.setPivotY(view.getHeight() * 0.5f);
+ View.ALPHA.set(view, position < -1f || position > 1f ? 0f : 1f - (scale - 1f));
+ }
}
diff --git a/library/src/main/java/com/daimajia/slider/library/Transformers/ZoomOutSlideTransformer.java b/library/src/main/java/com/daimajia/slider/library/Transformers/ZoomOutSlideTransformer.java
index 3a2ba81..7cd6691 100644
--- a/library/src/main/java/com/daimajia/slider/library/Transformers/ZoomOutSlideTransformer.java
+++ b/library/src/main/java/com/daimajia/slider/library/Transformers/ZoomOutSlideTransformer.java
@@ -2,39 +2,37 @@
import android.view.View;
-import com.nineoldandroids.view.ViewHelper;
-
public class ZoomOutSlideTransformer extends BaseTransformer {
- private static final float MIN_SCALE = 0.85f;
- private static final float MIN_ALPHA = 0.5f;
+ private static final float MIN_SCALE = 0.85f;
+ private static final float MIN_ALPHA = 0.5f;
- @Override
- protected void onTransform(View view, float position) {
- if (position >= -1 || position <= 1) {
- // Modify the default slide transition to shrink the page as well
- final float height = view.getHeight();
- final float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));
- final float vertMargin = height * (1 - scaleFactor) / 2;
- final float horzMargin = view.getWidth() * (1 - scaleFactor) / 2;
+ @Override
+ protected void onTransform(View view, float position) {
+ if (position >= -1 || position <= 1) {
+ // Modify the default slide transition to shrink the page as well
+ final float height = view.getHeight();
+ final float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));
+ final float vertMargin = height * (1 - scaleFactor) / 2;
+ final float horzMargin = view.getWidth() * (1 - scaleFactor) / 2;
// Center vertically
- ViewHelper.setPivotY(view,0.5f * height);
+ view.setPivotY(0.5f * height);
- if (position < 0) {
- ViewHelper.setTranslationX(view,horzMargin - vertMargin / 2);
- } else {
- ViewHelper.setTranslationX(view,-horzMargin + vertMargin / 2);
- }
+ if (position < 0) {
+ View.TRANSLATION_X.set(view, horzMargin - vertMargin / 2);
+ } else {
+ View.TRANSLATION_X.set(view, -horzMargin + vertMargin / 2);
+ }
- // Scale the page down (between MIN_SCALE and 1)
- ViewHelper.setScaleX(view,scaleFactor);
- ViewHelper.setScaleY(view,scaleFactor);
+ // Scale the page down (between MIN_SCALE and 1)
+ View.SCALE_X.set(view, scaleFactor);
+ View.SCALE_Y.set(view, scaleFactor);
- // Fade the page relative to its size.
- ViewHelper.setAlpha(view,MIN_ALPHA + (scaleFactor - MIN_SCALE) / (1 - MIN_SCALE) * (1 - MIN_ALPHA));
- }
- }
+ // Fade the page relative to its size.
+ View.ALPHA.set(view, MIN_ALPHA + (scaleFactor - MIN_SCALE) / (1 - MIN_SCALE) * (1 - MIN_ALPHA));
+ }
+ }
}
diff --git a/library/src/main/java/com/daimajia/slider/library/Transformers/ZoomOutTransformer.java b/library/src/main/java/com/daimajia/slider/library/Transformers/ZoomOutTransformer.java
index d5c33ec..1cef147 100644
--- a/library/src/main/java/com/daimajia/slider/library/Transformers/ZoomOutTransformer.java
+++ b/library/src/main/java/com/daimajia/slider/library/Transformers/ZoomOutTransformer.java
@@ -2,21 +2,19 @@
import android.view.View;
-import com.nineoldandroids.view.ViewHelper;
-
public class ZoomOutTransformer extends BaseTransformer {
@Override
protected void onTransform(View view, float position) {
final float scale = 1f + Math.abs(position);
- ViewHelper.setScaleX(view,scale);
- ViewHelper.setScaleY(view,scale);
- ViewHelper.setPivotX(view,view.getWidth() * 0.5f);
- ViewHelper.setPivotY(view,view.getWidth() * 0.5f);
- ViewHelper.setAlpha(view,position < -1f || position > 1f ? 0f : 1f - (scale - 1f));
- if(position < -0.9){
+ View.SCALE_X.set(view, scale);
+ View.SCALE_Y.set(view, scale);
+ view.setPivotX(view.getWidth() * 0.5f);
+ view.setPivotY(view.getWidth() * 0.5f);
+ View.ALPHA.set(view, position < -1f || position > 1f ? 0f : 1f - (scale - 1f));
+ if (position < -0.9) {
//-0.9 to prevent a small bug
- ViewHelper.setTranslationX(view,view.getWidth() * position);
+ View.TRANSLATION_X.set(view, view.getWidth() * position);
}
}
diff --git a/library/src/main/java/com/daimajia/slider/library/Tricks/FixedSpeedScroller.java b/library/src/main/java/com/daimajia/slider/library/Tricks/FixedSpeedScroller.java
index e523d86..e4417ba 100644
--- a/library/src/main/java/com/daimajia/slider/library/Tricks/FixedSpeedScroller.java
+++ b/library/src/main/java/com/daimajia/slider/library/Tricks/FixedSpeedScroller.java
@@ -16,8 +16,8 @@ public FixedSpeedScroller(Context context, Interpolator interpolator) {
super(context, interpolator);
}
- public FixedSpeedScroller(Context context, Interpolator interpolator, int period){
- this(context,interpolator);
+ public FixedSpeedScroller(Context context, Interpolator interpolator, int period) {
+ this(context, interpolator);
mDuration = period;
}
diff --git a/library/src/main/java/com/daimajia/slider/library/Tricks/InfinitePagerAdapter.java b/library/src/main/java/com/daimajia/slider/library/Tricks/InfinitePagerAdapter.java
index 04f74ca..ef62c4d 100644
--- a/library/src/main/java/com/daimajia/slider/library/Tricks/InfinitePagerAdapter.java
+++ b/library/src/main/java/com/daimajia/slider/library/Tricks/InfinitePagerAdapter.java
@@ -23,7 +23,7 @@ public InfinitePagerAdapter(SliderAdapter adapter) {
this.adapter = adapter;
}
- public SliderAdapter getRealAdapter(){
+ public SliderAdapter getRealAdapter() {
return this.adapter;
}
@@ -43,7 +43,7 @@ public int getRealCount() {
@Override
public Object instantiateItem(ViewGroup container, int position) {
- if(getRealCount() == 0){
+ if (getRealCount() == 0) {
return null;
}
int virtualPosition = position % getRealCount();
@@ -56,7 +56,7 @@ public Object instantiateItem(ViewGroup container, int position) {
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
- if(getRealCount() == 0){
+ if (getRealCount() == 0) {
return;
}
int virtualPosition = position % getRealCount();
diff --git a/library/src/main/java/com/daimajia/slider/library/Tricks/ViewPagerEx.java b/library/src/main/java/com/daimajia/slider/library/Tricks/ViewPagerEx.java
index 8927d26..eeb3c55 100644
--- a/library/src/main/java/com/daimajia/slider/library/Tricks/ViewPagerEx.java
+++ b/library/src/main/java/com/daimajia/slider/library/Tricks/ViewPagerEx.java
@@ -50,12 +50,12 @@
* Layout manager that allows the user to flip left and right
* through pages of data. You supply an implementation of a
* {@link PagerAdapter} to generate the pages that the view shows.
- *
+ *
*
Note this class is currently under early design and
* development. The API will likely change in later updates of
* the compatibility library, requiring changes to the source code
* of apps when they are compiled against the newer version.
- *
+ *
*
ViewPager is most often used in conjunction with {@link android.app.Fragment},
* which is a convenient way to supply and manage the lifecycle of each page.
* There are standard adapters implemented for using fragments with the ViewPager,
@@ -64,13 +64,13 @@
* {@link android.support.v4.app.FragmentStatePagerAdapter}; each of these
* classes have simple code showing how to build a full user interface
* with them.
- *
+ *
*
Here is a more complicated example of ViewPager, using it in conjuction
* with {@link android.app.ActionBar} tabs. You can find other examples of using
* ViewPager in the API 4+ Support Demos and API 13+ Support Demos sample code.
- *
+ *
* {@sample development/samples/Support13Demos/src/com/example/android/supportv13/app/ActionBarTabsPager.java
- * complete}
+ * complete}
*/
@@ -80,57 +80,64 @@
* Thanks to JakeWharton.
* http://github.com/JakeWharton/NineOldAndroids
*/
-public class ViewPagerEx extends ViewGroup{
+public class ViewPagerEx extends ViewGroup {
+ /**
+ * Indicates that the pager is in an idle, settled state. The current page
+ * is fully in view and no animation is in progress.
+ */
+ public static final int SCROLL_STATE_IDLE = 0;
+ /**
+ * Indicates that the pager is currently being dragged by the user.
+ */
+ public static final int SCROLL_STATE_DRAGGING = 1;
+ /**
+ * Indicates that the pager is in the process of settling to a final position.
+ */
+ public static final int SCROLL_STATE_SETTLING = 2;
private static final String TAG = "ViewPagerEx";
private static final boolean DEBUG = false;
-
private static final boolean USE_CACHE = false;
-
private static final int DEFAULT_OFFSCREEN_PAGES = 1;
private static final int MAX_SETTLE_DURATION = 600; // ms
private static final int MIN_DISTANCE_FOR_FLING = 25; // dips
-
private static final int DEFAULT_GUTTER_SIZE = 16; // dips
-
private static final int MIN_FLING_VELOCITY = 400; // dips
-
- private static final int[] LAYOUT_ATTRS = new int[] {
+ private static final int[] LAYOUT_ATTRS = new int[]{
android.R.attr.layout_gravity
};
-
- /**
- * Used to track what the expected number of items in the adapter should be.
- * If the app changes this when we don't expect it, we'll throw a big obnoxious exception.
- */
- private int mExpectedAdapterCount;
-
- static class ItemInfo {
- Object object;
- int position;
- boolean scrolling;
- float widthFactor;
- float offset;
- }
-
- private static final Comparator COMPARATOR = new Comparator(){
+ private static final Comparator COMPARATOR = new Comparator() {
@Override
public int compare(ItemInfo lhs, ItemInfo rhs) {
return lhs.position - rhs.position;
}
};
-
private static final Interpolator sInterpolator = new Interpolator() {
public float getInterpolation(float t) {
t -= 1.0f;
return t * t * t * t * t + 1.0f;
}
};
-
+ /**
+ * Sentinel value for no current active pointer.
+ * Used by {@link #mActivePointerId}.
+ */
+ private static final int INVALID_POINTER = -1;
+ // If the pager is at least this close to its final position, complete the scroll
+ // on touch down and let the user interact with the content inside instead of
+ // "catching" the flinging pager.
+ private static final int CLOSE_ENOUGH = 2; // dp
+ private static final int DRAW_ORDER_DEFAULT = 0;
+ private static final int DRAW_ORDER_FORWARD = 1;
+ private static final int DRAW_ORDER_REVERSE = 2;
+ private static final ViewPositionComparator sPositionComparator = new ViewPositionComparator();
private final ArrayList mItems = new ArrayList();
private final ItemInfo mTempItem = new ItemInfo();
-
private final Rect mTempRect = new Rect();
-
+ /**
+ * Used to track what the expected number of items in the adapter should be.
+ * If the app changes this when we don't expect it, we'll throw a big obnoxious exception.
+ */
+ private int mExpectedAdapterCount;
private PagerAdapter mAdapter;
private int mCurItem; // Index of currently displayed page.
private int mRestoredCurItem = -1;
@@ -138,27 +145,21 @@ public float getInterpolation(float t) {
private ClassLoader mRestoredClassLoader = null;
private Scroller mScroller;
private PagerObserver mObserver;
-
private int mPageMargin;
private Drawable mMarginDrawable;
private int mTopPageBounds;
private int mBottomPageBounds;
-
// Offsets of the first and last items, if known.
// Set during population, used to determine if we are at the beginning
// or end of the pager data set during touch scrolling.
private float mFirstOffset = -Float.MAX_VALUE;
private float mLastOffset = Float.MAX_VALUE;
-
private int mChildWidthMeasureSpec;
private int mChildHeightMeasureSpec;
private boolean mInLayout;
-
private boolean mScrollingCacheEnabled;
-
private boolean mPopulatePending;
private int mOffscreenPageLimit = DEFAULT_OFFSCREEN_PAGES;
-
private boolean mIsBeingDragged;
private boolean mIsUnableToDrag;
private boolean mIgnoreGutter;
@@ -177,12 +178,6 @@ public float getInterpolation(float t) {
* drags/flings if multiple pointers are used.
*/
private int mActivePointerId = INVALID_POINTER;
- /**
- * Sentinel value for no current active pointer.
- * Used by {@link #mActivePointerId}.
- */
- private static final int INVALID_POINTER = -1;
-
/**
* Determines speed during touch scrolling
*/
@@ -191,52 +186,22 @@ public float getInterpolation(float t) {
private int mMaximumVelocity;
private int mFlingDistance;
private int mCloseEnough;
-
- // If the pager is at least this close to its final position, complete the scroll
- // on touch down and let the user interact with the content inside instead of
- // "catching" the flinging pager.
- private static final int CLOSE_ENOUGH = 2; // dp
-
private boolean mFakeDragging;
private long mFakeDragBeginTime;
-
private EdgeEffectCompat mLeftEdge;
private EdgeEffectCompat mRightEdge;
-
private boolean mFirstLayout = true;
private boolean mNeedCalculatePageOffsets = false;
private boolean mCalledSuper;
private int mDecorChildCount;
-
private ArrayList mOnPageChangeListeners = new ArrayList<>();
private OnPageChangeListener mInternalPageChangeListener;
private OnAdapterChangeListener mAdapterChangeListener;
private PageTransformer mPageTransformer;
private Method mSetChildrenDrawingOrderEnabled;
-
- private static final int DRAW_ORDER_DEFAULT = 0;
- private static final int DRAW_ORDER_FORWARD = 1;
- private static final int DRAW_ORDER_REVERSE = 2;
private int mDrawingOrder;
private ArrayList mDrawingOrderedChildren;
- private static final ViewPositionComparator sPositionComparator = new ViewPositionComparator();
-
- /**
- * Indicates that the pager is in an idle, settled state. The current page
- * is fully in view and no animation is in progress.
- */
- public static final int SCROLL_STATE_IDLE = 0;
-
- /**
- * Indicates that the pager is currently being dragged by the user.
- */
- public static final int SCROLL_STATE_DRAGGING = 1;
-
- /**
- * Indicates that the pager is in the process of settling to a final position.
- */
- public static final int SCROLL_STATE_SETTLING = 2;
-
+ private int mScrollState = SCROLL_STATE_IDLE;
private final Runnable mEndScrollRunnable = new Runnable() {
public void run() {
setScrollState(SCROLL_STATE_IDLE);
@@ -244,71 +209,20 @@ public void run() {
}
};
- private int mScrollState = SCROLL_STATE_IDLE;
-
- /**
- * Callback interface for responding to changing state of the selected page.
- */
- public interface OnPageChangeListener {
-
- /**
- * This method will be invoked when the current page is scrolled, either as part
- * of a programmatically initiated smooth scroll or a user initiated touch scroll.
- *
- * @param position Position index of the first page currently being displayed.
- * Page position+1 will be visible if positionOffset is nonzero.
- * @param positionOffset Value from [0, 1) indicating the offset from the page at position.
- * @param positionOffsetPixels Value in pixels indicating the offset from position.
- */
- public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels);
-
- /**
- * This method will be invoked when a new page becomes selected. Animation is not
- * necessarily complete.
- *
- * @param position Position index of the new selected page.
- */
- public void onPageSelected(int position);
-
- /**
- * Called when the scroll state changes. Useful for discovering when the user
- * begins dragging, when the pager is automatically settling to the current page,
- * or when it is fully stopped/idle.
- *
- * @param state The new scroll state.
- * @see ViewPagerEx#SCROLL_STATE_IDLE
- * @see ViewPagerEx#SCROLL_STATE_DRAGGING
- * @see ViewPagerEx#SCROLL_STATE_SETTLING
- */
- public void onPageScrollStateChanged(int state);
+ public ViewPagerEx(Context context) {
+ super(context);
+ initViewPager();
}
- /**
- * Simple implementation of the {@link OnPageChangeListener} interface with stub
- * implementations of each method. Extend this if you do not intend to override
- * every method of {@link OnPageChangeListener}.
- */
- public static class SimpleOnPageChangeListener implements OnPageChangeListener {
- @Override
- public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
- // This space for rent
- }
-
- @Override
- public void onPageSelected(int position) {
- // This space for rent
- }
-
- @Override
- public void onPageScrollStateChanged(int state) {
- // This space for rent
- }
+ public ViewPagerEx(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ initViewPager();
}
private void triggerOnPageChangeEvent(int position) {
for (OnPageChangeListener eachListener : mOnPageChangeListeners) {
if (eachListener != null) {
- InfinitePagerAdapter infiniteAdapter = (InfinitePagerAdapter)mAdapter;
+ InfinitePagerAdapter infiniteAdapter = (InfinitePagerAdapter) mAdapter;
if (infiniteAdapter.getRealCount() == 0) {
return;
}
@@ -320,50 +234,6 @@ private void triggerOnPageChangeEvent(int position) {
mInternalPageChangeListener.onPageSelected(position);
}
}
- /**
- * A PageTransformer is invoked whenever a visible/attached page is scrolled.
- * This offers an opportunity for the application to apply a custom transformation
- * to the page views using animation properties.
- *
- * As property animation is only supported as of Android 3.0 and forward,
- * setting a PageTransformer on a ViewPager on earlier platform versions will
- * be ignored.
- */
- public interface PageTransformer {
- /**
- * Apply a property transformation to the given page.
- *
- * @param page Apply the transformation to this page
- * @param position Position of page relative to the current front-and-center
- * position of the pager. 0 is front and center. 1 is one full
- * page position to the right, and -1 is one page position to the left.
- */
- public void transformPage(View page, float position);
-
- }
-
- /**
- * Used internally to monitor when adapters are switched.
- */
- interface OnAdapterChangeListener {
- public void onAdapterChanged(PagerAdapter oldAdapter, PagerAdapter newAdapter);
- }
-
- /**
- * Used internally to tag special types of child views that should be added as
- * pager decorations by default.
- */
- interface Decor {}
-
- public ViewPagerEx(Context context) {
- super(context);
- initViewPager();
- }
-
- public ViewPagerEx(Context context, AttributeSet attrs) {
- super(context, attrs);
- initViewPager();
- }
void initViewPager() {
setWillNotDraw(false);
@@ -416,6 +286,26 @@ private void setScrollState(int newState) {
}
}
+ private void removeNonDecorViews() {
+ for (int i = 0; i < getChildCount(); i++) {
+ final View child = getChildAt(i);
+ final LayoutParams lp = (LayoutParams) child.getLayoutParams();
+ if (!lp.isDecor) {
+ removeViewAt(i);
+ i--;
+ }
+ }
+ }
+
+ /**
+ * Retrieve the current adapter supplying pages.
+ *
+ * @return The currently registered PagerAdapter
+ */
+ public PagerAdapter getAdapter() {
+ return mAdapter;
+ }
+
/**
* Set a PagerAdapter that will supply views for this pager as needed.
*
@@ -467,26 +357,6 @@ public void setAdapter(PagerAdapter adapter) {
}
}
- private void removeNonDecorViews() {
- for (int i = 0; i < getChildCount(); i++) {
- final View child = getChildAt(i);
- final LayoutParams lp = (LayoutParams) child.getLayoutParams();
- if (!lp.isDecor) {
- removeViewAt(i);
- i--;
- }
- }
- }
-
- /**
- * Retrieve the current adapter supplying pages.
- *
- * @return The currently registered PagerAdapter
- */
- public PagerAdapter getAdapter() {
- return mAdapter;
- }
-
void setOnAdapterChangeListener(OnAdapterChangeListener listener) {
mAdapterChangeListener = listener;
}
@@ -495,18 +365,6 @@ private int getClientWidth() {
return getMeasuredWidth() - getPaddingLeft() - getPaddingRight();
}
- /**
- * Set the currently selected page. If the ViewPager has already been through its first
- * layout with its current adapter there will be a smooth animated transition between
- * the current item and the specified item.
- *
- * @param item Item index to select
- */
- public void setCurrentItem(int item) {
- mPopulatePending = false;
- setCurrentItemInternal(item, !mFirstLayout, false);
- }
-
/**
* Set the currently selected page.
*
@@ -522,6 +380,18 @@ public int getCurrentItem() {
return mCurItem;
}
+ /**
+ * Set the currently selected page. If the ViewPager has already been through its first
+ * layout with its current adapter there will be a smooth animated transition between
+ * the current item and the specified item.
+ *
+ * @param item Item index to select
+ */
+ public void setCurrentItem(int item) {
+ mPopulatePending = false;
+ setCurrentItemInternal(item, !mFirstLayout, false);
+ }
+
void setCurrentItemInternal(int item, boolean smoothScroll, boolean always) {
setCurrentItemInternal(item, smoothScroll, always, 0);
}
@@ -546,7 +416,7 @@ void setCurrentItemInternal(int item, boolean smoothScroll, boolean always, int
// We are doing a jump by more than one page. To avoid
// glitches, we want to keep all current pages in the view
// until the scroll ends.
- for (int i=0; i CREATOR
- = ParcelableCompat.newCreator(new ParcelableCompatCreatorCallbacks() {
- @Override
- public SavedState createFromParcel(Parcel in, ClassLoader loader) {
- return new SavedState(in, loader);
- }
-
- @Override
- public SavedState[] newArray(int size) {
- return new SavedState[size];
- }
- });
-
- SavedState(Parcel in, ClassLoader loader) {
- super(in);
- if (loader == null) {
- loader = getClass().getClassLoader();
- }
- position = in.readInt();
- adapterState = in.readParcelable(loader);
- this.loader = loader;
+ }
+ ii.offset = offset;
+ offset += ii.widthFactor + marginOffset;
}
+
+ mNeedCalculatePageOffsets = false;
}
@Override
@@ -1291,7 +1108,7 @@ public void onRestoreInstanceState(Parcelable state) {
return;
}
- SavedState ss = (SavedState)state;
+ SavedState ss = (SavedState) state;
super.onRestoreInstanceState(ss.getSuperState());
if (mAdapter != null) {
@@ -1340,7 +1157,7 @@ public void removeView(View view) {
}
ItemInfo infoForChild(View child) {
- for (int i=0; i mTouchSlop && xDiff > yDiff) {
if (DEBUG) Log.v(TAG, "Starting drag!");
mIsBeingDragged = true;
@@ -2622,15 +2440,15 @@ private Rect getChildRectInPagerCoordinates(Rect outRect, View child) {
boolean pageLeft() {
if (mCurItem > 0) {
- setCurrentItem(mCurItem-1, true);
+ setCurrentItem(mCurItem - 1, true);
return true;
}
return false;
}
boolean pageRight() {
- if (mAdapter != null && mCurItem < (mAdapter.getCount()-1)) {
- setCurrentItem(mCurItem+1, true);
+ if (mAdapter != null && mCurItem < (mAdapter.getCount() - 1)) {
+ setCurrentItem(mCurItem + 1, true);
return true;
}
return false;
@@ -2775,70 +2593,158 @@ public ViewGroup.LayoutParams generateLayoutParams(AttributeSet attrs) {
return new LayoutParams(getContext(), attrs);
}
- class MyAccessibilityDelegate extends AccessibilityDelegateCompat {
+ /**
+ * Callback interface for responding to changing state of the selected page.
+ */
+ public interface OnPageChangeListener {
+
+ /**
+ * This method will be invoked when the current page is scrolled, either as part
+ * of a programmatically initiated smooth scroll or a user initiated touch scroll.
+ *
+ * @param position Position index of the first page currently being displayed.
+ * Page position+1 will be visible if positionOffset is nonzero.
+ * @param positionOffset Value from [0, 1) indicating the offset from the page at position.
+ * @param positionOffsetPixels Value in pixels indicating the offset from position.
+ */
+ public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels);
+
+ /**
+ * This method will be invoked when a new page becomes selected. Animation is not
+ * necessarily complete.
+ *
+ * @param position Position index of the new selected page.
+ */
+ public void onPageSelected(int position);
+
+ /**
+ * Called when the scroll state changes. Useful for discovering when the user
+ * begins dragging, when the pager is automatically settling to the current page,
+ * or when it is fully stopped/idle.
+ *
+ * @param state The new scroll state.
+ * @see ViewPagerEx#SCROLL_STATE_IDLE
+ * @see ViewPagerEx#SCROLL_STATE_DRAGGING
+ * @see ViewPagerEx#SCROLL_STATE_SETTLING
+ */
+ public void onPageScrollStateChanged(int state);
+ }
+
+ /**
+ * A PageTransformer is invoked whenever a visible/attached page is scrolled.
+ * This offers an opportunity for the application to apply a custom transformation
+ * to the page views using animation properties.
+ *
+ * As property animation is only supported as of Android 3.0 and forward,
+ * setting a PageTransformer on a ViewPager on earlier platform versions will
+ * be ignored.
+ */
+ public interface PageTransformer {
+ /**
+ * Apply a property transformation to the given page.
+ *
+ * @param page Apply the transformation to this page
+ * @param position Position of page relative to the current front-and-center
+ * position of the pager. 0 is front and center. 1 is one full
+ * page position to the right, and -1 is one page position to the left.
+ */
+ public void transformPage(View page, float position);
+ }
+
+ /**
+ * Used internally to monitor when adapters are switched.
+ */
+ interface OnAdapterChangeListener {
+ public void onAdapterChanged(PagerAdapter oldAdapter, PagerAdapter newAdapter);
+ }
+
+ /**
+ * Used internally to tag special types of child views that should be added as
+ * pager decorations by default.
+ */
+ interface Decor {
+ }
+
+ static class ItemInfo {
+ Object object;
+ int position;
+ boolean scrolling;
+ float widthFactor;
+ float offset;
+ }
+
+ /**
+ * Simple implementation of the {@link OnPageChangeListener} interface with stub
+ * implementations of each method. Extend this if you do not intend to override
+ * every method of {@link OnPageChangeListener}.
+ */
+ public static class SimpleOnPageChangeListener implements OnPageChangeListener {
@Override
- public void onInitializeAccessibilityEvent(View host, AccessibilityEvent event) {
- super.onInitializeAccessibilityEvent(host, event);
- event.setClassName(ViewPagerEx.class.getName());
- final AccessibilityRecordCompat recordCompat = AccessibilityRecordCompat.obtain();
- recordCompat.setScrollable(canScroll());
- if (event.getEventType() == AccessibilityEventCompat.TYPE_VIEW_SCROLLED
- && mAdapter != null) {
- recordCompat.setItemCount(mAdapter.getCount());
- recordCompat.setFromIndex(mCurItem);
- recordCompat.setToIndex(mCurItem);
- }
+ public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+ // This space for rent
}
@Override
- public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfoCompat info) {
- super.onInitializeAccessibilityNodeInfo(host, info);
- info.setClassName(ViewPagerEx.class.getName());
- info.setScrollable(canScroll());
- if (canScrollHorizontally(1)) {
- info.addAction(AccessibilityNodeInfoCompat.ACTION_SCROLL_FORWARD);
- }
- if (canScrollHorizontally(-1)) {
- info.addAction(AccessibilityNodeInfoCompat.ACTION_SCROLL_BACKWARD);
- }
+ public void onPageSelected(int position) {
+ // This space for rent
}
@Override
- public boolean performAccessibilityAction(View host, int action, Bundle args) {
- if (super.performAccessibilityAction(host, action, args)) {
- return true;
+ public void onPageScrollStateChanged(int state) {
+ // This space for rent
+ }
+ }
+
+ /**
+ * This is the persistent state that is saved by ViewPager. Only needed
+ * if you are creating a sublass of ViewPager that must save its own
+ * state, in which case it should implement a subclass of this which
+ * contains that state.
+ */
+ public static class SavedState extends BaseSavedState {
+ public static final Parcelable.Creator CREATOR
+ = ParcelableCompat.newCreator(new ParcelableCompatCreatorCallbacks() {
+ @Override
+ public SavedState createFromParcel(Parcel in, ClassLoader loader) {
+ return new SavedState(in, loader);
}
- switch (action) {
- case AccessibilityNodeInfoCompat.ACTION_SCROLL_FORWARD: {
- if (canScrollHorizontally(1)) {
- setCurrentItem(mCurItem + 1);
- return true;
- }
- } return false;
- case AccessibilityNodeInfoCompat.ACTION_SCROLL_BACKWARD: {
- if (canScrollHorizontally(-1)) {
- setCurrentItem(mCurItem - 1);
- return true;
- }
- } return false;
+
+ @Override
+ public SavedState[] newArray(int size) {
+ return new SavedState[size];
}
- return false;
+ });
+ int position;
+ Parcelable adapterState;
+ ClassLoader loader;
+
+ public SavedState(Parcelable superState) {
+ super(superState);
}
- private boolean canScroll() {
- return (mAdapter != null) && (mAdapter.getCount() > 1);
+ SavedState(Parcel in, ClassLoader loader) {
+ super(in);
+ if (loader == null) {
+ loader = getClass().getClassLoader();
+ }
+ position = in.readInt();
+ adapterState = in.readParcelable(loader);
+ this.loader = loader;
}
- }
- private class PagerObserver extends DataSetObserver {
@Override
- public void onChanged() {
- dataSetChanged();
+ public void writeToParcel(Parcel out, int flags) {
+ super.writeToParcel(out, flags);
+ out.writeInt(position);
+ out.writeParcelable(adapterState, flags);
}
+
@Override
- public void onInvalidated() {
- dataSetChanged();
+ public String toString() {
+ return "FragmentPager.SavedState{"
+ + Integer.toHexString(System.identityHashCode(this))
+ + " position=" + position + "}";
}
}
@@ -2905,4 +2811,74 @@ public int compare(View lhs, View rhs) {
return llp.position - rlp.position;
}
}
+
+ class MyAccessibilityDelegate extends AccessibilityDelegateCompat {
+
+ @Override
+ public void onInitializeAccessibilityEvent(View host, AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(host, event);
+ event.setClassName(ViewPagerEx.class.getName());
+ final AccessibilityRecordCompat recordCompat = AccessibilityRecordCompat.obtain();
+ recordCompat.setScrollable(canScroll());
+ if (event.getEventType() == AccessibilityEventCompat.TYPE_VIEW_SCROLLED
+ && mAdapter != null) {
+ recordCompat.setItemCount(mAdapter.getCount());
+ recordCompat.setFromIndex(mCurItem);
+ recordCompat.setToIndex(mCurItem);
+ }
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfoCompat info) {
+ super.onInitializeAccessibilityNodeInfo(host, info);
+ info.setClassName(ViewPagerEx.class.getName());
+ info.setScrollable(canScroll());
+ if (canScrollHorizontally(1)) {
+ info.addAction(AccessibilityNodeInfoCompat.ACTION_SCROLL_FORWARD);
+ }
+ if (canScrollHorizontally(-1)) {
+ info.addAction(AccessibilityNodeInfoCompat.ACTION_SCROLL_BACKWARD);
+ }
+ }
+
+ @Override
+ public boolean performAccessibilityAction(View host, int action, Bundle args) {
+ if (super.performAccessibilityAction(host, action, args)) {
+ return true;
+ }
+ switch (action) {
+ case AccessibilityNodeInfoCompat.ACTION_SCROLL_FORWARD: {
+ if (canScrollHorizontally(1)) {
+ setCurrentItem(mCurItem + 1);
+ return true;
+ }
+ }
+ return false;
+ case AccessibilityNodeInfoCompat.ACTION_SCROLL_BACKWARD: {
+ if (canScrollHorizontally(-1)) {
+ setCurrentItem(mCurItem - 1);
+ return true;
+ }
+ }
+ return false;
+ }
+ return false;
+ }
+
+ private boolean canScroll() {
+ return (mAdapter != null) && (mAdapter.getCount() > 1);
+ }
+ }
+
+ private class PagerObserver extends DataSetObserver {
+ @Override
+ public void onChanged() {
+ dataSetChanged();
+ }
+
+ @Override
+ public void onInvalidated() {
+ dataSetChanged();
+ }
+ }
}
diff --git a/library/src/main/res/drawable/indicator_corner_bg.xml b/library/src/main/res/drawable/indicator_corner_bg.xml
index 431871b..8707be0 100644
--- a/library/src/main/res/drawable/indicator_corner_bg.xml
+++ b/library/src/main/res/drawable/indicator_corner_bg.xml
@@ -1,9 +1,9 @@
-
+
-
-
-
+
+
\ No newline at end of file
diff --git a/library/src/main/res/layout/indicator_layout.xml b/library/src/main/res/layout/indicator_layout.xml
index 708880a..f02476d 100644
--- a/library/src/main/res/layout/indicator_layout.xml
+++ b/library/src/main/res/layout/indicator_layout.xml
@@ -1,8 +1,8 @@
-
\ No newline at end of file
+ android:orientation="horizontal">
\ No newline at end of file
diff --git a/library/src/main/res/layout/render_type_default.xml b/library/src/main/res/layout/render_type_default.xml
index 6f714aa..db9b9b8 100644
--- a/library/src/main/res/layout/render_type_default.xml
+++ b/library/src/main/res/layout/render_type_default.xml
@@ -1,14 +1,17 @@
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+
+ android:layout_height="wrap_content"
+ android:layout_centerInParent="true" />
\ No newline at end of file
diff --git a/library/src/main/res/layout/render_type_text.xml b/library/src/main/res/layout/render_type_text.xml
index f70b7b0..b389142 100644
--- a/library/src/main/res/layout/render_type_text.xml
+++ b/library/src/main/res/layout/render_type_text.xml
@@ -1,30 +1,35 @@
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+
+ android:layout_height="wrap_content"
+ android:layout_centerInParent="true" />
+
-
-
+ android:minHeight="30dp"
+ android:orientation="vertical"
+ android:paddingLeft="10dp">
+
+
+
\ No newline at end of file
diff --git a/library/src/main/res/layout/slider_layout.xml b/library/src/main/res/layout/slider_layout.xml
index 01fcf0d..747dab8 100644
--- a/library/src/main/res/layout/slider_layout.xml
+++ b/library/src/main/res/layout/slider_layout.xml
@@ -2,63 +2,70 @@
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+ android:layout_height="wrap_content" />
+
+ android:paddingBottom="10dp"
+ custom:shape="oval" />
+
+ android:paddingRight="10dp" />
+
+ android:paddingLeft="10dp" />
+
+ android:gravity="center"
+ android:paddingTop="10dp" />
+
+ android:paddingTop="10dp" />
+
+ android:paddingTop="10dp" />
\ No newline at end of file
diff --git a/library/src/main/res/values/attrs.xml b/library/src/main/res/values/attrs.xml
index 584d13e..52fa4ab 100644
--- a/library/src/main/res/values/attrs.xml
+++ b/library/src/main/res/values/attrs.xml
@@ -4,11 +4,11 @@
-
-
+
+
-
+
@@ -31,55 +31,55 @@
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
-
-
+
+
\ No newline at end of file
diff --git a/library/src/main/res/values/styles.xml b/library/src/main/res/values/styles.xml
index f8d0ad2..ea6920f 100644
--- a/library/src/main/res/values/styles.xml
+++ b/library/src/main/res/values/styles.xml
@@ -1,5 +1,6 @@
+