├── .gitignore
├── README.md
├── adviewpager
├── .gitignore
├── ad.gif
├── build.gradle
├── proguard-rules.pro
└── src
│ ├── androidTest
│ └── java
│ │ └── com
│ │ └── gson8
│ │ └── adviewpager
│ │ └── ApplicationTest.java
│ ├── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── com
│ │ │ └── gson8
│ │ │ └── adviewpager
│ │ │ ├── MainActivity.java
│ │ │ └── vpanim
│ │ │ ├── AlphaPageTransformer.java
│ │ │ ├── RotateDownPageTransformer.java
│ │ │ └── TabletTransformer.java
│ └── res
│ │ ├── drawable
│ │ ├── img11.jpg
│ │ ├── img12.jpg
│ │ ├── img14.jpg
│ │ ├── img3.jpg
│ │ ├── img5.jpg
│ │ ├── img6.jpg
│ │ ├── img7.jpg
│ │ ├── img8.jpg
│ │ └── img9.jpg
│ │ ├── layout
│ │ └── activity_main.xml
│ │ ├── mipmap-hdpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-mdpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-xhdpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-xxhdpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-xxxhdpi
│ │ └── ic_launcher.png
│ │ ├── values-w820dp
│ │ └── dimens.xml
│ │ └── values
│ │ ├── colors.xml
│ │ ├── dimens.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ └── test
│ └── java
│ └── com
│ └── gson8
│ └── adviewpager
│ └── ExampleUnitTest.java
├── app
├── .gitignore
├── Screencast_1.gif
├── Screencast_2.gif
├── build.gradle
├── proguard-rules.pro
└── src
│ ├── androidTest
│ └── java
│ │ └── com
│ │ └── gson8
│ │ └── viewpageranim
│ │ └── ApplicationTest.java
│ ├── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── com
│ │ │ └── gson8
│ │ │ └── viewpageranim
│ │ │ ├── MainActivity.java
│ │ │ └── vpanim
│ │ │ ├── CubeTransformer.java
│ │ │ ├── DefaultTransfomer.java
│ │ │ ├── DepthNoTransformer.java
│ │ │ ├── DepthPageTransformer.java
│ │ │ ├── HorizontalFilpTransformer.java
│ │ │ ├── PageLeftInTransformer.java
│ │ │ ├── PageRightOutTransformer.java
│ │ │ ├── RotateDownPageTransformer.java
│ │ │ ├── RotateUpPageTransformer.java
│ │ │ ├── ScaleIOransformer.java
│ │ │ ├── SqueezeTransformer.java
│ │ │ ├── TabletTransformer.java
│ │ │ ├── VerticalFlipTransformer.java
│ │ │ ├── ZoomInOutTransformer.java
│ │ │ ├── ZoomOutPageTransformer.java
│ │ │ └── ZoomOutTranformer.java
│ └── res
│ │ ├── drawable-hdpi
│ │ └── ic_swap_horiz_black_48dp.png
│ │ ├── drawable-mdpi
│ │ └── ic_swap_horiz_black_48dp.png
│ │ ├── drawable-xhdpi
│ │ └── ic_swap_horiz_black_48dp.png
│ │ ├── drawable-xxhdpi
│ │ └── ic_swap_horiz_black_48dp.png
│ │ ├── drawable-xxxhdpi
│ │ └── ic_swap_horiz_black_48dp.png
│ │ ├── drawable
│ │ ├── img1.jpg
│ │ ├── img16.jpg
│ │ ├── img17.jpg
│ │ ├── img2.jpg
│ │ └── img4.jpg
│ │ ├── layout
│ │ └── activity_main.xml
│ │ ├── mipmap-hdpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-mdpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-xhdpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-xxhdpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-xxxhdpi
│ │ └── ic_launcher.png
│ │ ├── values-w820dp
│ │ └── dimens.xml
│ │ └── values
│ │ ├── colors.xml
│ │ ├── dimens.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ └── test
│ └── java
│ └── com
│ └── gson8
│ └── viewpageranim
│ └── ExampleUnitTest.java
├── build.gradle
├── gradle.properties
└── gradle
└── wrapper
├── gradle-wrapper.jar
└── gradle-wrapper.properties
/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /local.properties
4 | /.idea/workspace.xml
5 | /.idea/libraries
6 | .DS_Store
7 | /build
8 | /captures
9 | .idea/
10 | githubtest/
11 | transfroms/
12 | settings.gradle
13 | import-summary.txt
14 | gradlew
15 | gradlew.bat
16 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # ViewPager Transformer
2 | > - ps:`Transformer`接口是Android 3.0后推出的.如果要兼容3.0以下的.可以看一下 [JazzyViewPager](https://github.com/jfeinstein10/JazzyViewPager)
3 | > - 写这个的目录,一方面学习.二方面,不想自定义控件.可以把`com.gson8.viewpageranim.vpanim`包下的某个Transformer文件复制到项目就可以用了
4 |
5 | **所有的东西都是在`app Module下`**
6 |
7 | ```
8 | mCusViewPager.setPageTransformer(true, new DefaultTransfomer());
9 | ```
10 |
11 | ## 1.app
12 | 
13 | 
14 |
15 | ## 主要参考资料
16 | - http://developer.android.com/training/animation/screen-slide.html
17 | - http://blog.csdn.net/lmj623565791/article/details/40411921/
18 | - http://blog.csdn.net/lmj623565791/article/details/51339751
--------------------------------------------------------------------------------
/adviewpager/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/adviewpager/ad.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/adviewpager/ad.gif
--------------------------------------------------------------------------------
/adviewpager/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.application'
2 |
3 | android {
4 | compileSdkVersion 23
5 | buildToolsVersion "23.0.3"
6 |
7 | defaultConfig {
8 | applicationId "com.gson8.adviewpager"
9 | minSdkVersion 17
10 | targetSdkVersion 23
11 | versionCode 1
12 | versionName "1.0"
13 | }
14 | buildTypes {
15 | release {
16 | minifyEnabled false
17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
18 | }
19 | }
20 | }
21 |
22 | dependencies {
23 | compile fileTree(dir: 'libs', include: ['*.jar'])
24 | testCompile 'junit:junit:4.12'
25 | compile 'com.android.support:appcompat-v7:23.3.0'
26 | }
27 |
--------------------------------------------------------------------------------
/adviewpager/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in F:\AndroidSDK/tools/proguard/proguard-android.txt
4 | # You can edit the include path and order by changing the proguardFiles
5 | # directive in build.gradle.
6 | #
7 | # For more details, see
8 | # http://developer.android.com/guide/developing/tools/proguard.html
9 |
10 | # Add any project specific keep options here:
11 |
12 | # If your project uses WebView with JS, uncomment the following
13 | # and specify the fully qualified class name to the JavaScript interface
14 | # class:
15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16 | # public *;
17 | #}
18 |
--------------------------------------------------------------------------------
/adviewpager/src/androidTest/java/com/gson8/adviewpager/ApplicationTest.java:
--------------------------------------------------------------------------------
1 | package com.gson8.adviewpager;
2 |
3 | import android.app.Application;
4 | import android.test.ApplicationTestCase;
5 |
6 | /**
7 | * Testing Fundamentals
8 | */
9 | public class ApplicationTest extends ApplicationTestCase
10 | {
11 | public ApplicationTest()
12 | {
13 | super(Application.class);
14 | }
15 | }
--------------------------------------------------------------------------------
/adviewpager/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/adviewpager/src/main/java/com/gson8/adviewpager/MainActivity.java:
--------------------------------------------------------------------------------
1 | package com.gson8.adviewpager;
2 |
3 | import android.os.Bundle;
4 | import android.support.v4.view.PagerAdapter;
5 | import android.support.v4.view.ViewPager;
6 | import android.support.v7.app.AppCompatActivity;
7 | import android.view.View;
8 | import android.view.ViewGroup;
9 | import android.widget.ImageView;
10 |
11 | import com.gson8.adviewpager.vpanim.TabletTransformer;
12 |
13 | public class MainActivity extends AppCompatActivity
14 | {
15 |
16 | private ViewPager mViewPager;
17 | private PagerAdapter mAdapter;
18 |
19 | private int[] mImgIds = { R.drawable.img3, R.drawable.img5, R.drawable.img6, R.drawable.img7, R.drawable.img8, R.drawable.img9, R.drawable.img11, R.drawable.img12, R.drawable.img14 };
20 |
21 |
22 | @Override
23 | protected void onCreate(Bundle savedInstanceState)
24 | {
25 | super.onCreate(savedInstanceState);
26 | setContentView(R.layout.activity_main);
27 |
28 |
29 | mViewPager = (ViewPager)findViewById(R.id.id_viewpager);
30 | mViewPager.setPageTransformer(true, new TabletTransformer());
31 | //设置Page间间距,两个页面之相距多少
32 | mViewPager.setPageMargin(30);
33 | //设置缓存的页面数量
34 | mViewPager.setOffscreenPageLimit(3);
35 |
36 | mViewPager.setAdapter(mAdapter = new PagerAdapter()
37 | {
38 | @Override
39 | public Object instantiateItem(ViewGroup container, int position)
40 | {
41 | ImageView view = new ImageView(MainActivity.this);
42 | // view.setScaleType(ImageView.ScaleType.CENTER_CROP);
43 | view.setImageResource(mImgIds[position]);
44 | container.addView(view);
45 | return view;
46 | }
47 |
48 | @Override
49 | public void destroyItem(ViewGroup container, int position, Object object)
50 | {
51 | container.removeView((View)object);
52 | }
53 |
54 | @Override
55 | public int getCount()
56 | {
57 | return mImgIds.length;
58 | }
59 |
60 | @Override
61 | public boolean isViewFromObject(View view, Object o)
62 | {
63 | return view == o;
64 | }
65 | });
66 |
67 | }
68 | }
69 |
--------------------------------------------------------------------------------
/adviewpager/src/main/java/com/gson8/adviewpager/vpanim/AlphaPageTransformer.java:
--------------------------------------------------------------------------------
1 | package com.gson8.adviewpager.vpanim;
2 |
3 | /*
4 | * ViewPagerAnim making by Syusuke/琴声悠扬 on 2016/5/9
5 | * E-Mail: Zyj7810@126.com
6 | * Package: com.gson8.adviewpager.vpanim.AlphaPageTransformer
7 | * Description: null
8 | */
9 |
10 | import android.support.v4.view.ViewPager;
11 | import android.view.View;
12 |
13 | public class AlphaPageTransformer implements ViewPager.PageTransformer
14 | {
15 | private static final float DEFAULT_MIN_ALPHA = 0.5f;
16 | private float mMinAlpha = DEFAULT_MIN_ALPHA;
17 |
18 | @Override
19 | public void transformPage(View page, float position)
20 | {
21 |
22 | if(position < -1)
23 | {
24 | //左边页面停下来执行
25 | page.setAlpha(mMinAlpha);
26 | }
27 | else if(position <= 1)
28 | { // [-1,1]
29 |
30 | if(position < 0) //[0,-1] 原来中间的页面到左边时执行
31 | {
32 | float factor = mMinAlpha + (1 - mMinAlpha) * (1 + position);
33 | page.setAlpha(factor);
34 | }
35 | else//[1,0] 原来右边的页面到中间
36 | {
37 | float factor = mMinAlpha + (1 - mMinAlpha) * (1 - position);
38 | page.setAlpha(factor);
39 | }
40 | }
41 | else
42 | { // (1,+Infinity] 右边页面停下时执行
43 | page.setAlpha(mMinAlpha);
44 | }
45 |
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/adviewpager/src/main/java/com/gson8/adviewpager/vpanim/RotateDownPageTransformer.java:
--------------------------------------------------------------------------------
1 | package com.gson8.adviewpager.vpanim;
2 |
3 | /*
4 | * ViewPagerAnim making by Syusuke/琴声悠扬 on 2016/5/9
5 | * E-Mail: Zyj7810@126.com
6 | * Package: com.gson8.adviewpager.vpanim.RotateDownPageTransformer
7 | * Description: null
8 | */
9 |
10 | import android.support.v4.view.ViewPager;
11 | import android.view.View;
12 |
13 | public class RotateDownPageTransformer implements ViewPager.PageTransformer
14 | {
15 | private static final float DEFAULT_MAX_ROTATE = 30.0f;
16 | private float mMaxRotate = DEFAULT_MAX_ROTATE;
17 |
18 | @Override
19 | public void transformPage(View page, float position)
20 | {
21 | if(position < -1)
22 | {
23 | page.setRotation(mMaxRotate * -1);
24 | page.setPivotX(page.getWidth());
25 | page.setPivotY(page.getHeight());
26 | }
27 | else if(position <= 1)
28 | { // [-1,1]
29 |
30 | if(position < 0)//[0,-1]
31 | {
32 | page.setPivotX(page.getWidth() * (0.5f + 0.5f * (-position)));
33 | page.setPivotY(page.getHeight());
34 | page.setRotation(mMaxRotate * position);
35 | }
36 | else//[1,0]
37 | {
38 | page.setPivotX(page.getWidth() * 0.5f * (1 - position));
39 | page.setPivotY(page.getHeight());
40 | page.setRotation(mMaxRotate * position);
41 | }
42 | }
43 | else
44 | { // (1,+Infinity]
45 | // This page is way off-screen to the right.
46 | page.setRotation(mMaxRotate);
47 | page.setPivotX(page.getWidth() * 0);
48 | page.setPivotY(page.getHeight());
49 | }
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/adviewpager/src/main/java/com/gson8/adviewpager/vpanim/TabletTransformer.java:
--------------------------------------------------------------------------------
1 | package com.gson8.adviewpager.vpanim;
2 |
3 | /*
4 | * ViewPagerAnim making by Syusuke/琴声悠扬 on 2016/5/9
5 | * E-Mail: Zyj7810@126.com
6 | * Package: com.gson8.adviewpager.vpanim.RotateDownPageTransformer
7 | * Description: null
8 | */
9 |
10 | import android.support.v4.view.ViewPager;
11 | import android.view.View;
12 |
13 | public class TabletTransformer implements ViewPager.PageTransformer
14 | {
15 | private static float mDegee = 30;
16 | private static float mAlpha = 0.5f;
17 |
18 | @Override
19 | public void transformPage(View page, float position)
20 | {
21 | if(position < -1)
22 | {
23 | page.setRotationY(mDegee);
24 | page.setAlpha(1);
25 | }
26 | else if(position <= 1)
27 | {
28 | if(position < 0)
29 | {
30 | page.setTranslationX((page.getWidth() * 0.5f) * position);
31 | page.setPivotX(page.getWidth() / 2.0f);
32 | page.setPivotY(page.getHeight() / 2.0f);
33 | page.setRotationY(mDegee * -position);
34 | page.setAlpha(mAlpha + (1 - mAlpha) * (1 + position));
35 |
36 | }
37 | else
38 | {
39 | page.setTranslationX((page.getWidth() * 0.5f) * -position);
40 | page.setPivotX(page.getWidth() / 2.0f);
41 | page.setPivotY(page.getHeight() / 2.0f);
42 | page.setRotationY(mDegee * -position);
43 | page.setAlpha(mAlpha + (1 - mAlpha) * (1 - position));
44 | }
45 | }
46 | else
47 | {
48 | page.setRotationY(-mDegee);
49 | page.setAlpha(1);
50 | }
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/adviewpager/src/main/res/drawable/img11.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/adviewpager/src/main/res/drawable/img11.jpg
--------------------------------------------------------------------------------
/adviewpager/src/main/res/drawable/img12.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/adviewpager/src/main/res/drawable/img12.jpg
--------------------------------------------------------------------------------
/adviewpager/src/main/res/drawable/img14.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/adviewpager/src/main/res/drawable/img14.jpg
--------------------------------------------------------------------------------
/adviewpager/src/main/res/drawable/img3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/adviewpager/src/main/res/drawable/img3.jpg
--------------------------------------------------------------------------------
/adviewpager/src/main/res/drawable/img5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/adviewpager/src/main/res/drawable/img5.jpg
--------------------------------------------------------------------------------
/adviewpager/src/main/res/drawable/img6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/adviewpager/src/main/res/drawable/img6.jpg
--------------------------------------------------------------------------------
/adviewpager/src/main/res/drawable/img7.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/adviewpager/src/main/res/drawable/img7.jpg
--------------------------------------------------------------------------------
/adviewpager/src/main/res/drawable/img8.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/adviewpager/src/main/res/drawable/img8.jpg
--------------------------------------------------------------------------------
/adviewpager/src/main/res/drawable/img9.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/adviewpager/src/main/res/drawable/img9.jpg
--------------------------------------------------------------------------------
/adviewpager/src/main/res/layout/activity_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
13 |
14 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/adviewpager/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/adviewpager/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/adviewpager/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/adviewpager/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/adviewpager/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/adviewpager/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/adviewpager/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/adviewpager/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/adviewpager/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/adviewpager/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/adviewpager/src/main/res/values-w820dp/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 64dp
6 |
7 |
--------------------------------------------------------------------------------
/adviewpager/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #3F51B5
4 | #303F9F
5 | #FF4081
6 |
7 |
--------------------------------------------------------------------------------
/adviewpager/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 16dp
4 | 16dp
5 |
6 |
--------------------------------------------------------------------------------
/adviewpager/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | AdViewPager
3 |
4 |
--------------------------------------------------------------------------------
/adviewpager/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/adviewpager/src/test/java/com/gson8/adviewpager/ExampleUnitTest.java:
--------------------------------------------------------------------------------
1 | package com.gson8.adviewpager;
2 |
3 | import org.junit.Test;
4 |
5 | import static org.junit.Assert.*;
6 |
7 | /**
8 | * To work on unit tests, switch the Test Artifact in the Build Variants view.
9 | */
10 | public class ExampleUnitTest
11 | {
12 | @Test
13 | public void addition_isCorrect() throws Exception
14 | {
15 | assertEquals(4, 2 + 2);
16 | }
17 | }
--------------------------------------------------------------------------------
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/app/Screencast_1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/app/Screencast_1.gif
--------------------------------------------------------------------------------
/app/Screencast_2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/app/Screencast_2.gif
--------------------------------------------------------------------------------
/app/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.application'
2 |
3 | android {
4 | compileSdkVersion 23
5 | buildToolsVersion "23.0.3"
6 |
7 | defaultConfig {
8 | applicationId "com.gson8.viewpageranim"
9 | minSdkVersion 17
10 | targetSdkVersion 23
11 | versionCode 1
12 | versionName "1.0"
13 | }
14 | buildTypes {
15 | release {
16 | minifyEnabled false
17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
18 | }
19 | }
20 | }
21 |
22 | dependencies {
23 | compile fileTree(dir: 'libs', include: ['*.jar'])
24 | testCompile 'junit:junit:4.12'
25 | compile 'com.android.support:appcompat-v7:23.3.0'
26 | }
27 |
--------------------------------------------------------------------------------
/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in F:\AndroidSDK/tools/proguard/proguard-android.txt
4 | # You can edit the include path and order by changing the proguardFiles
5 | # directive in build.gradle.
6 | #
7 | # For more details, see
8 | # http://developer.android.com/guide/developing/tools/proguard.html
9 |
10 | # Add any project specific keep options here:
11 |
12 | # If your project uses WebView with JS, uncomment the following
13 | # and specify the fully qualified class name to the JavaScript interface
14 | # class:
15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16 | # public *;
17 | #}
18 |
--------------------------------------------------------------------------------
/app/src/androidTest/java/com/gson8/viewpageranim/ApplicationTest.java:
--------------------------------------------------------------------------------
1 | package com.gson8.viewpageranim;
2 |
3 | import android.app.Application;
4 | import android.test.ApplicationTestCase;
5 |
6 | /**
7 | * Testing Fundamentals
8 | */
9 | public class ApplicationTest extends ApplicationTestCase
10 | {
11 | public ApplicationTest()
12 | {
13 | super(Application.class);
14 | }
15 | }
--------------------------------------------------------------------------------
/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/app/src/main/java/com/gson8/viewpageranim/MainActivity.java:
--------------------------------------------------------------------------------
1 | package com.gson8.viewpageranim;
2 |
3 | import android.content.DialogInterface;
4 | import android.os.Bundle;
5 | import android.support.v4.view.PagerAdapter;
6 | import android.support.v4.view.ViewPager;
7 | import android.support.v7.app.AlertDialog;
8 | import android.support.v7.app.AppCompatActivity;
9 | import android.support.v7.widget.Toolbar;
10 | import android.view.View;
11 | import android.view.ViewGroup;
12 | import android.widget.ArrayAdapter;
13 | import android.widget.ImageView;
14 | import android.widget.ListView;
15 |
16 | import com.gson8.viewpageranim.vpanim.DefaultTransfomer;
17 |
18 | import java.util.ArrayList;
19 | import java.util.List;
20 |
21 | public class MainActivity extends AppCompatActivity implements View.OnClickListener
22 | {
23 |
24 | private int[] mImgIds = { R.drawable.img1, R.drawable.img2, R.drawable.img4, R.drawable.img16, R.drawable.img17 };
25 |
26 | ViewPager mCusViewPager;
27 | VpAdapter mAdatper;
28 | Toolbar mToolbar;
29 | List mTransList;
30 |
31 | @Override
32 | protected void onCreate(Bundle savedInstanceState)
33 | {
34 | super.onCreate(savedInstanceState);
35 | setContentView(R.layout.activity_main);
36 | mToolbar = (Toolbar)findViewById(R.id.toolbar);
37 | mToolbar.setNavigationOnClickListener(this);
38 |
39 | mCusViewPager = (ViewPager)findViewById(R.id.cus_viewpager);
40 |
41 | mCusViewPager.setPageTransformer(true, new DefaultTransfomer());
42 |
43 | mTransList = new ArrayList<>();
44 |
45 | mAdatper = new VpAdapter();
46 | mCusViewPager.setAdapter(mAdatper);
47 |
48 | initData();
49 |
50 | }
51 |
52 | private void initData()
53 | {
54 | mTransList.add("CubeTransformer");
55 | mTransList.add("DefaultTransfomer");
56 | mTransList.add("DepthNoTransformer");
57 | mTransList.add("DepthPageTransformer");
58 | mTransList.add("HorizontalFilpTransformer");
59 | mTransList.add("PageLeftInTransformer");
60 | mTransList.add("PageRightOutTransformer");
61 | mTransList.add("RotateDownPageTransformer");
62 | mTransList.add("RotateUpPageTransformer");
63 | mTransList.add("ScaleIOransformer");
64 | mTransList.add("SqueezeTransformer");
65 | mTransList.add("TabletTransformer");
66 | mTransList.add("VerticalFlipTransformer");
67 | mTransList.add("ZoomInOutTransformer");
68 | mTransList.add("ZoomOutPageTransformer");
69 | mTransList.add("ZoomOutTranformer");
70 | }
71 |
72 |
73 | @Override
74 | public void onClick(View v)
75 | {
76 | showDia();
77 | }
78 |
79 | private void showDia()
80 | {
81 | AlertDialog.Builder builder = new AlertDialog.Builder(this);
82 | ListView lv = new ListView(this);
83 | builder.setTitle("ViewPager的滑动效果");
84 | builder.setView(lv).setAdapter(
85 | new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, mTransList),
86 | new DialogInterface.OnClickListener()
87 | {
88 | @Override
89 | public void onClick(DialogInterface dialog, int which)
90 | {
91 | setViewPagerTransformer(which);
92 | dialog.dismiss();
93 | }
94 | });
95 | builder.setPositiveButton("取消", new DialogInterface.OnClickListener()
96 | {
97 | @Override
98 | public void onClick(DialogInterface dialog, int which)
99 | {
100 |
101 | }
102 | });
103 | builder.create().show();
104 | }
105 |
106 | public void setViewPagerTransformer(int viewPagerTransformer)
107 | {
108 | try
109 | {
110 | mCusViewPager.setPageTransformer(true, (ViewPager.PageTransformer)Class.forName(
111 | "com.gson8.viewpageranim.vpanim." + mTransList.get(viewPagerTransformer))
112 | .newInstance());
113 | }
114 | catch(Exception e)
115 | {
116 | e.printStackTrace();
117 | }
118 | }
119 |
120 | class VpAdapter extends PagerAdapter
121 | {
122 | @Override
123 | public int getCount()
124 | {
125 | return mImgIds.length;
126 | }
127 |
128 | @Override
129 | public boolean isViewFromObject(View view, Object object)
130 | {
131 | return view == object;
132 | }
133 |
134 | @Override
135 | public Object instantiateItem(ViewGroup container, int position)
136 | {
137 | ImageView iv = new ImageView(MainActivity.this);
138 | iv.setImageResource(mImgIds[position]);
139 | iv.setScaleType(ImageView.ScaleType.CENTER_CROP);
140 | container.addView(iv);
141 | return iv;
142 |
143 | }
144 |
145 | @Override
146 | public void destroyItem(ViewGroup container, int position, Object object)
147 | {
148 | container.removeView((View)object);
149 | }
150 | }
151 |
152 | }
153 |
--------------------------------------------------------------------------------
/app/src/main/java/com/gson8/viewpageranim/vpanim/CubeTransformer.java:
--------------------------------------------------------------------------------
1 | package com.gson8.viewpageranim.vpanim;
2 |
3 | /*
4 | * ViewPagerAnim making by Syusuke/琴声悠扬 on 2016/5/9
5 | * E-Mail: Zyj7810@126.com
6 | * Package: com.gson8.viewpageranim.vpanim.CubeTransformer
7 | * Description: null
8 | */
9 |
10 | import android.support.v4.view.ViewPager;
11 | import android.view.View;
12 |
13 | public class CubeTransformer implements ViewPager.PageTransformer
14 | {
15 | @Override
16 | public void transformPage(View page, float position)
17 | {
18 | if(position < 0)
19 | {
20 | page.setPivotX(page.getWidth());
21 | page.setPivotY(page.getHeight() * 0.5f);
22 | page.setRotationY(90f * position);
23 | }
24 | else
25 | {
26 | page.setPivotX(0);
27 | page.setPivotY(page.getHeight() * 0.5f);
28 | page.setRotationY(90f * position);
29 | }
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/app/src/main/java/com/gson8/viewpageranim/vpanim/DefaultTransfomer.java:
--------------------------------------------------------------------------------
1 | package com.gson8.viewpageranim.vpanim;
2 |
3 | /*
4 | * ViewPagerAnim making by Syusuke/琴声悠扬 on 2016/5/9
5 | * E-Mail: Zyj7810@126.com
6 | * Package: com.gson8.viewpageranim.vpanim.DefaultTransfomer
7 | * Description: null
8 | */
9 |
10 | import android.support.v4.view.ViewPager;
11 | import android.view.View;
12 |
13 | public class DefaultTransfomer implements ViewPager.PageTransformer
14 | {
15 | @Override
16 | public void transformPage(View page, float position)
17 | {
18 |
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/app/src/main/java/com/gson8/viewpageranim/vpanim/DepthNoTransformer.java:
--------------------------------------------------------------------------------
1 | package com.gson8.viewpageranim.vpanim;
2 |
3 | /*
4 | * ViewPagerAnim making by Syusuke/琴声悠扬 on 2016/5/9
5 | * E-Mail: Zyj7810@126.com
6 | * Package: com.gson8.viewpageranim.vpanim.DepthPageTransformer
7 | * Description: null
8 | */
9 |
10 | import android.support.v4.view.ViewPager;
11 | import android.view.View;
12 |
13 | public class DepthNoTransformer implements ViewPager.PageTransformer
14 | {
15 | private float mScale = 1f;
16 |
17 | @Override
18 | public void transformPage(View page, float position)
19 | {
20 | if(position <= 0)
21 | {
22 | page.setTranslationX(0);
23 |
24 | }
25 | else if(position <= 1)
26 | {
27 | page.setTranslationX(page.getWidth() * -position);
28 | }
29 |
30 |
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/app/src/main/java/com/gson8/viewpageranim/vpanim/DepthPageTransformer.java:
--------------------------------------------------------------------------------
1 | package com.gson8.viewpageranim.vpanim;
2 |
3 | /*
4 | * ViewPagerAnim making by Syusuke/琴声悠扬 on 2016/5/9
5 | * E-Mail: Zyj7810@126.com
6 | * Package: com.gson8.viewpageranim.vpanim.DepthPageTransformer
7 | * Description: google 官方DEMO
8 | */
9 |
10 | import android.support.v4.view.ViewPager;
11 | import android.view.View;
12 |
13 | public class DepthPageTransformer implements ViewPager.PageTransformer
14 | {
15 | private float mScale = 0.75f;
16 | private int mPageWidth = 0;
17 |
18 |
19 | public DepthPageTransformer(){}
20 |
21 | public DepthPageTransformer(float scale)
22 | {
23 | this.mScale = scale;
24 | }
25 |
26 | public void setScale(float mScale)
27 | {
28 | this.mScale = mScale;
29 | }
30 |
31 | public float getScale()
32 | {
33 | return mScale;
34 | }
35 |
36 | @Override
37 | public void transformPage(View page, float position)
38 | {
39 | mPageWidth = page.getWidth();
40 | if(position < -1)
41 | {
42 | //// [-Infinity,-1)
43 | // This page is way off-screen to the left.
44 | // 本页面的方式关闭屏幕左侧
45 | page.setAlpha(0);
46 | }
47 | else if(position <= 0)
48 | {
49 | // [-1,0]
50 | // Use the default slide transition when moving to the left page
51 | // 向左移动页面时使用默认的幻灯片切换
52 | page.setAlpha(1);
53 | page.setTranslationX(0);
54 | page.setScaleX(1);
55 | page.setScaleY(1);
56 | }
57 | else if(position <= 1)
58 | {
59 | // (0,1]
60 | // Fade the page out.
61 |
62 | page.setAlpha(1 - position);
63 | page.setTranslationX(mPageWidth * -position);
64 | float scaleFactor = mScale + (1 - mScale) * (1 - Math.abs(position));
65 | page.setScaleX(scaleFactor);
66 | page.setScaleY(scaleFactor);
67 | }
68 | else
69 | {
70 | //本页面的方式关闭屏幕向右
71 | // (1,+Infinity]
72 | // This page is way off-screen to the right.
73 | page.setAlpha(0);
74 | }
75 |
76 | }
77 | }
78 |
--------------------------------------------------------------------------------
/app/src/main/java/com/gson8/viewpageranim/vpanim/HorizontalFilpTransformer.java:
--------------------------------------------------------------------------------
1 | package com.gson8.viewpageranim.vpanim;
2 |
3 | /*
4 | * ViewPagerAnim making by Syusuke/琴声悠扬 on 2016/5/9
5 | * E-Mail: Zyj7810@126.com
6 | * Package: com.gson8.viewpageranim.vpanim.HorizontalFilpTransformer
7 | * Description: null
8 | */
9 |
10 | import android.support.v4.view.ViewPager;
11 | import android.view.View;
12 |
13 | public class HorizontalFilpTransformer implements ViewPager.PageTransformer
14 | {
15 | @Override
16 | public void transformPage(View page, float position)
17 | {
18 | page.setTranslationX(page.getWidth() * -position);
19 | page.setTranslationY(0);
20 | final float rotation = 180f * position;
21 |
22 | page.setAlpha(rotation > 90f || rotation < -90f ? 0 : 1);
23 | page.setPivotX(page.getWidth() * 0.5f);
24 | page.setPivotY(page.getHeight() * 0.5f);
25 | page.setRotationY(rotation);
26 |
27 |
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/app/src/main/java/com/gson8/viewpageranim/vpanim/PageLeftInTransformer.java:
--------------------------------------------------------------------------------
1 | package com.gson8.viewpageranim.vpanim;
2 |
3 | /*
4 | * ViewPagerAnim making by Syusuke/琴声悠扬 on 2016/5/9
5 | * E-Mail: Zyj7810@126.com
6 | * Package: com.gson8.viewpageranim.vpanim.PageRightOutTransformer
7 | * Description: null
8 | */
9 |
10 | import android.support.v4.view.ViewPager;
11 | import android.util.Log;
12 | import android.view.View;
13 |
14 | public class PageLeftInTransformer implements ViewPager.PageTransformer
15 | {
16 | private static final float SCALE = 0.5f;
17 |
18 | @Override
19 | public void transformPage(View page, float position)
20 | {
21 |
22 | float width = page.getWidth();
23 | float height = page.getHeight();
24 |
25 | if(position < -1)
26 | {
27 | setCommonScale(page, 1f);
28 | }
29 | else if(position <= 1)
30 | {
31 | if(position < 0)
32 | {
33 | Log.e("positionass", "transformPage: " + position);
34 | page.setPivotX(width * SCALE / 2.0f);
35 | page.setPivotY(height * SCALE);
36 | setCommonScale(page, position > -SCALE ? 1 + position : SCALE);
37 | }
38 | else
39 | {
40 | setCommonScale(page, 1);
41 | // page.setTranslationX(width * (1 + position) * SCALE * -1.0f);
42 | }
43 | }
44 | else
45 | {
46 | setCommonScale(page, 1f);
47 | }
48 | }
49 |
50 | public void setCommonScale(View page, float f)
51 | {
52 | page.setScaleX(f);
53 | page.setScaleY(f);
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/app/src/main/java/com/gson8/viewpageranim/vpanim/PageRightOutTransformer.java:
--------------------------------------------------------------------------------
1 | package com.gson8.viewpageranim.vpanim;
2 |
3 | /*
4 | * ViewPagerAnim making by Syusuke/琴声悠扬 on 2016/5/9
5 | * E-Mail: Zyj7810@126.com
6 | * Package: com.gson8.viewpageranim.vpanim.PageRightOutTransformer
7 | * Description: null
8 | */
9 |
10 | import android.support.v4.view.ViewPager;
11 | import android.view.View;
12 |
13 | public class PageRightOutTransformer implements ViewPager.PageTransformer
14 | {
15 | private static final float SCALE = 0.5f;
16 |
17 | @Override
18 | public void transformPage(View page, float position)
19 | {
20 |
21 | float width = page.getWidth();
22 | float height = page.getHeight();
23 |
24 | if(position < -1)
25 | {
26 | setCommonScale(page, 1f);
27 | }
28 | else if(position <= 1)
29 | {
30 | if(position < 0)
31 | {
32 | setCommonScale(page, 1);
33 | page.setTranslationX(width * position * SCALE);
34 | }
35 | else
36 | {
37 | page.setPivotX(width * SCALE / 2.0f);
38 | page.setPivotY(height * SCALE);
39 | setCommonScale(page, position < SCALE ? (1 - position) : SCALE);
40 | }
41 | }
42 | else
43 | {
44 | setCommonScale(page, 1f);
45 | }
46 | }
47 |
48 | public void setCommonScale(View page, float f)
49 | {
50 | page.setScaleX(f);
51 | page.setScaleY(f);
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/app/src/main/java/com/gson8/viewpageranim/vpanim/RotateDownPageTransformer.java:
--------------------------------------------------------------------------------
1 | package com.gson8.viewpageranim.vpanim;
2 |
3 | /*
4 | * ViewPagerAnim making by Syusuke/琴声悠扬 on 2016/5/9
5 | * E-Mail: Zyj7810@126.com
6 | * Package: com.gson8.adviewpager.vpanim.RotateDownPageTransformer
7 | * Description: null
8 | */
9 |
10 | import android.support.v4.view.ViewPager;
11 | import android.view.View;
12 |
13 | public class RotateDownPageTransformer implements ViewPager.PageTransformer
14 | {
15 | private static final float DEFAULT_MAX_ROTATE = 15.0f;
16 | private float mMaxRotate = DEFAULT_MAX_ROTATE;
17 |
18 | @Override
19 | public void transformPage(View page, float position)
20 | {
21 | if(position < -1)
22 | {
23 | page.setRotation(mMaxRotate * -1);
24 | page.setPivotX(page.getWidth());
25 | page.setPivotY(page.getHeight());
26 | }
27 | else if(position <= 1)
28 | { // [-1,1]
29 |
30 | if(position < 0)//[0,-1]
31 | {
32 | page.setPivotX(page.getWidth() * (0.5f + 0.5f * (-position)));
33 | page.setPivotY(page.getHeight());
34 | page.setRotation(mMaxRotate * position);
35 | }
36 | else//[1,0]
37 | {
38 | page.setPivotX(page.getWidth() * 0.5f * (1 - position));
39 | page.setPivotY(page.getHeight());
40 | page.setRotation(mMaxRotate * position);
41 | }
42 | }
43 | else
44 | { // (1,+Infinity]
45 | // This page is way off-screen to the right.
46 | page.setRotation(mMaxRotate);
47 | page.setPivotX(page.getWidth() * 0);
48 | page.setPivotY(page.getHeight());
49 | }
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/app/src/main/java/com/gson8/viewpageranim/vpanim/RotateUpPageTransformer.java:
--------------------------------------------------------------------------------
1 | package com.gson8.viewpageranim.vpanim;
2 |
3 | /*
4 | * ViewPagerAnim making by Syusuke/琴声悠扬 on 2016/5/9
5 | * E-Mail: Zyj7810@126.com
6 | * Package: com.gson8.viewpageranim.vpanim.RotateUpPageTransformer
7 | * Description: null
8 | */
9 |
10 | import android.support.v4.view.ViewPager;
11 | import android.view.View;
12 |
13 | public class RotateUpPageTransformer implements ViewPager.PageTransformer
14 | {
15 | private static final float DEFAULT_MAX_ROTATE = -15.0f;
16 | private float mMaxRotate = DEFAULT_MAX_ROTATE;
17 |
18 | @Override
19 | public void transformPage(View page, float position)
20 | {
21 | if(position < -1)
22 | {
23 | page.setRotation(mMaxRotate * -1);
24 | page.setPivotX(page.getWidth());
25 | page.setPivotY(0);
26 | }
27 | else if(position <= 1)
28 | { // [-1,1]
29 |
30 | if(position < 0)//[0,-1]
31 | {
32 | page.setPivotX(page.getWidth() * (0.5f + 0.5f * (-position)));
33 | page.setPivotY(0);
34 | page.setRotation(mMaxRotate * position);
35 | }
36 | else//[1,0]
37 | {
38 | page.setPivotX(page.getWidth() * 0.5f * (1 - position));
39 | page.setPivotY(0);
40 | page.setRotation(mMaxRotate * position);
41 | }
42 | }
43 | else
44 | { // (1,+Infinity]
45 | // This page is way off-screen to the right.
46 | page.setRotation(mMaxRotate);
47 | page.setPivotX(page.getWidth() * 0);
48 | page.setPivotY(0);
49 | }
50 |
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/app/src/main/java/com/gson8/viewpageranim/vpanim/ScaleIOransformer.java:
--------------------------------------------------------------------------------
1 | package com.gson8.viewpageranim.vpanim;
2 |
3 | /*
4 | * ViewPagerAnim making by Syusuke/琴声悠扬 on 2016/5/9
5 | * E-Mail: Zyj7810@126.com
6 | * Package: com.gson8.viewpageranim.vpanim.ScaleIOransformer
7 | * Description: null
8 | */
9 |
10 | import android.support.v4.view.ViewPager;
11 | import android.view.View;
12 |
13 | public class ScaleIOransformer implements ViewPager.PageTransformer
14 | {
15 | @Override
16 | public void transformPage(View page, float position)
17 | {
18 | page.setTranslationX(page.getWidth() * -position);
19 | page.setTranslationY(0);
20 | page.setPivotX(position < 0 ? 0 : page.getWidth());
21 | page.setPivotY(page.getHeight() / 2f);
22 | float scale = position < 0 ? 1f + position : 1f - position;
23 | page.setScaleX(scale);
24 | page.setScaleY(scale);
25 |
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/app/src/main/java/com/gson8/viewpageranim/vpanim/SqueezeTransformer.java:
--------------------------------------------------------------------------------
1 | package com.gson8.viewpageranim.vpanim;
2 |
3 | /*
4 | * ViewPagerAnim making by Syusuke/琴声悠扬 on 2016/5/9
5 | * E-Mail: Zyj7810@126.com
6 | * Package: com.gson8.viewpageranim.vpanim.SqueezeTransformer
7 | * Description: null
8 | */
9 |
10 | import android.support.v4.view.ViewPager;
11 | import android.view.View;
12 |
13 | public class SqueezeTransformer implements ViewPager.PageTransformer
14 | {
15 | @Override
16 | public void transformPage(View page, float position)
17 | {
18 | if(position < -1)
19 | {
20 | page.setPivotX(0);
21 | page.setScaleX(0);
22 | }
23 | else if(position <= 1)
24 | {
25 | if(position < 0)
26 | {
27 | page.setPivotX(page.getWidth());
28 | page.setScaleX(1f + position);
29 | }
30 | else
31 | {
32 | page.setPivotX(0);
33 | page.setScaleX(1f - position);
34 | }
35 | }
36 | else
37 | {
38 | page.setPivotX(page.getWidth());
39 | page.setScaleX(1);
40 | }
41 | }
42 |
43 | }
44 |
--------------------------------------------------------------------------------
/app/src/main/java/com/gson8/viewpageranim/vpanim/TabletTransformer.java:
--------------------------------------------------------------------------------
1 | package com.gson8.viewpageranim.vpanim;
2 |
3 | /*
4 | * ViewPagerAnim making by Syusuke/琴声悠扬 on 2016/5/9
5 | * E-Mail: Zyj7810@126.com
6 | * Package: com.gson8.adviewpager.vpanim.RotateDownPageTransformer
7 | * Description: null
8 | */
9 |
10 | import android.support.v4.view.ViewPager;
11 | import android.view.View;
12 |
13 | public class TabletTransformer implements ViewPager.PageTransformer
14 | {
15 | private static float mDegee = 30;
16 | private static float mAlpha = 0.5f;
17 |
18 | @Override
19 | public void transformPage(View page, float position)
20 | {
21 | if(position < -1)
22 | {
23 | page.setRotationY(mDegee);
24 | page.setAlpha(1);
25 | }
26 | else if(position <= 1)
27 | {
28 | if(position < 0)
29 | {
30 | page.setTranslationX((page.getWidth() * 0.5f) * position);
31 | page.setPivotX(page.getWidth() / 2.0f);
32 | page.setPivotY(page.getHeight() / 2.0f);
33 | page.setRotationY(mDegee * -position);
34 | page.setAlpha(mAlpha + (1 - mAlpha) * (1 + position));
35 |
36 | }
37 | else
38 | {
39 | page.setTranslationX((page.getWidth() * 0.5f) * -position);
40 | page.setPivotX(page.getWidth() / 2.0f);
41 | page.setPivotY(page.getHeight() / 2.0f);
42 | page.setRotationY(mDegee * -position);
43 | page.setAlpha(mAlpha + (1 - mAlpha) * (1 - position));
44 | }
45 | }
46 | else
47 | {
48 | page.setRotationY(-mDegee);
49 | page.setAlpha(1);
50 | }
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/app/src/main/java/com/gson8/viewpageranim/vpanim/VerticalFlipTransformer.java:
--------------------------------------------------------------------------------
1 | package com.gson8.viewpageranim.vpanim;
2 |
3 | /*
4 | * ViewPagerAnim making by Syusuke/琴声悠扬 on 2016/5/9
5 | * E-Mail: Zyj7810@126.com
6 | * Package: com.gson8.viewpageranim.vpanim.VerticalFlipTransformer
7 | * Description: null
8 | */
9 |
10 | import android.support.v4.view.ViewPager;
11 | import android.util.Log;
12 | import android.view.View;
13 |
14 | public class VerticalFlipTransformer implements ViewPager.PageTransformer
15 | {
16 | @Override
17 | public void transformPage(View page, float position)
18 | {
19 | page.setTranslationX(page.getWidth() * -position);
20 | page.setTranslationY(0);
21 |
22 | final float rotation = -180f * position;
23 |
24 | page.setAlpha(rotation > 90f || rotation < -90f ? 0f : 1f);
25 | page.setPivotX(page.getWidth() * 0.5f);
26 | page.setPivotY(page.getHeight() * 0.5f);
27 |
28 | Log.e("tass", "transformPage: " + page.getWidth() + " " + page.getHeight() + rotation);
29 |
30 | page.setRotationX(rotation);
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/app/src/main/java/com/gson8/viewpageranim/vpanim/ZoomInOutTransformer.java:
--------------------------------------------------------------------------------
1 | package com.gson8.viewpageranim.vpanim;
2 |
3 | /*
4 | * ViewPagerAnim making by Syusuke/琴声悠扬 on 2016/5/9
5 | * E-Mail: Zyj7810@126.com
6 | * Package: com.gson8.viewpageranim.vpanim.ZoomInOutTransformer
7 | * Description: null
8 | */
9 |
10 | import android.support.v4.view.ViewPager;
11 | import android.view.View;
12 |
13 | public class ZoomInOutTransformer implements ViewPager.PageTransformer
14 | {
15 | @Override
16 | public void transformPage(View page, float position)
17 | {
18 | page.setTranslationX(page.getWidth() * -position);
19 | page.setTranslationY(0);
20 |
21 | float scale = position < 0 ? position + 1f : Math.abs(1f - position);
22 | page.setScaleX(scale);
23 | page.setScaleY(scale);
24 | page.setPivotX(page.getWidth() * 0.5f);
25 | page.setPivotY(page.getHeight() * 0.5f);
26 |
27 | if(position < -1f || position > 1f)
28 | page.setAlpha(0f);
29 | else
30 | page.setAlpha(1f - (scale - 1f));
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/app/src/main/java/com/gson8/viewpageranim/vpanim/ZoomOutPageTransformer.java:
--------------------------------------------------------------------------------
1 | package com.gson8.viewpageranim.vpanim;
2 |
3 | import android.support.v4.view.ViewPager;
4 | import android.view.View;
5 |
6 |
7 | /*
8 | * ViewPagerAnim making by Syusuke/琴声悠扬 on 2016/5/9
9 | * E-Mail: Zyj7810@126.com
10 | * Package: com.gson8.viewpageranim.vpanim.ZoomInOutTransformer
11 | * Description: google官方DEMO
12 | */
13 | public class ZoomOutPageTransformer implements ViewPager.PageTransformer
14 | {
15 | private float mScale = 0.85f;
16 | private float mAlaha = 0.5f;
17 |
18 | public ZoomOutPageTransformer(){}
19 |
20 | public ZoomOutPageTransformer(float scale, float alpha)
21 | {
22 | this.mScale = scale;
23 | this.mAlaha = alpha;
24 | }
25 |
26 | public float getScale()
27 | {
28 | return mScale;
29 | }
30 |
31 | public void setScale(float mScale)
32 | {
33 | this.mScale = mScale;
34 | }
35 |
36 | public float getAlaha()
37 | {
38 | return mAlaha;
39 | }
40 |
41 | public void setAlaha(float mAlaha)
42 | {
43 | this.mAlaha = mAlaha;
44 | }
45 |
46 | public void transformPage(View view, float position)
47 | {
48 | int pageWidth = view.getWidth();
49 | int pageHeight = view.getHeight();
50 |
51 | if(position < -1)
52 | { // [-Infinity,-1)
53 | // This page is way off-screen to the left.
54 | view.setAlpha(0);
55 | }
56 | else if(position <= 1)
57 | { // [-1,1]
58 | // Modify the default slide transition to shrink the page as well
59 | float scaleFactor = Math.max(mScale, 1 - Math.abs(position));
60 | float vertMargin = pageHeight * (1 - scaleFactor) / 2;
61 | float horzMargin = pageWidth * (1 - scaleFactor) / 2;
62 | if(position < 0)
63 | {
64 | view.setTranslationX(horzMargin - vertMargin / 2);
65 | }
66 | else
67 | {
68 | view.setTranslationX(-horzMargin + vertMargin / 2);
69 | }
70 |
71 | // Scale the page down (between mScale and 1)
72 | view.setScaleX(scaleFactor);
73 | view.setScaleY(scaleFactor);
74 |
75 | // Fade the page relative to its size.
76 | view.setAlpha(mAlaha + (scaleFactor - mScale) / (1 - mScale) * (1 - mAlaha));
77 |
78 | }
79 | else
80 | { // (1,+Infinity]
81 | // This page is way off-screen to the right.
82 | view.setAlpha(0);
83 | }
84 | }
85 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/gson8/viewpageranim/vpanim/ZoomOutTranformer.java:
--------------------------------------------------------------------------------
1 | package com.gson8.viewpageranim.vpanim;
2 |
3 | /*
4 | * ViewPagerAnim making by Syusuke/琴声悠扬 on 2016/5/9
5 | * E-Mail: Zyj7810@126.com
6 | * Package: com.gson8.viewpageranim.vpanim.ZoomOutTranformer
7 | * Description: null
8 | */
9 |
10 | import android.support.v4.view.ViewPager;
11 | import android.view.View;
12 |
13 | public class ZoomOutTranformer implements ViewPager.PageTransformer
14 | {
15 | @Override
16 | public void transformPage(View page, float position)
17 | {
18 | page.setTranslationX(page.getWidth() * -position);
19 | page.setTranslationY(0);
20 |
21 | float scale = 1f + Math.abs(position);
22 | page.setScaleX(scale);
23 | page.setScaleY(scale);
24 | page.setPivotX(page.getWidth() * 0.5f);
25 | page.setPivotY(page.getHeight() * 0.5f);
26 |
27 | if(position < -1.0f || position > 1.0f)
28 | page.setAlpha(0f);
29 | else
30 | page.setAlpha(1.0f - (scale - 1.0f));
31 |
32 | if(position == -1)
33 | {
34 | page.setTranslationX(page.getWidth() * -1);
35 | }
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable-hdpi/ic_swap_horiz_black_48dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/app/src/main/res/drawable-hdpi/ic_swap_horiz_black_48dp.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-mdpi/ic_swap_horiz_black_48dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/app/src/main/res/drawable-mdpi/ic_swap_horiz_black_48dp.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/ic_swap_horiz_black_48dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/app/src/main/res/drawable-xhdpi/ic_swap_horiz_black_48dp.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_swap_horiz_black_48dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/app/src/main/res/drawable-xxhdpi/ic_swap_horiz_black_48dp.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxxhdpi/ic_swap_horiz_black_48dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/app/src/main/res/drawable-xxxhdpi/ic_swap_horiz_black_48dp.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/img1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/app/src/main/res/drawable/img1.jpg
--------------------------------------------------------------------------------
/app/src/main/res/drawable/img16.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/app/src/main/res/drawable/img16.jpg
--------------------------------------------------------------------------------
/app/src/main/res/drawable/img17.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/app/src/main/res/drawable/img17.jpg
--------------------------------------------------------------------------------
/app/src/main/res/drawable/img2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/app/src/main/res/drawable/img2.jpg
--------------------------------------------------------------------------------
/app/src/main/res/drawable/img4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/app/src/main/res/drawable/img4.jpg
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
18 |
19 |
20 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/values-w820dp/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 64dp
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #3F51B5
4 | #303F9F
5 | #FF4081
6 | #000
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 16dp
4 | 16dp
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | ViewPagerAnim
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/test/java/com/gson8/viewpageranim/ExampleUnitTest.java:
--------------------------------------------------------------------------------
1 | package com.gson8.viewpageranim;
2 |
3 | import org.junit.Test;
4 |
5 | import static org.junit.Assert.*;
6 |
7 | /**
8 | * To work on unit tests, switch the Test Artifact in the Build Variants view.
9 | */
10 | public class ExampleUnitTest
11 | {
12 | @Test
13 | public void addition_isCorrect() throws Exception
14 | {
15 | assertEquals(4, 2 + 2);
16 | }
17 | }
--------------------------------------------------------------------------------
/build.gradle:
--------------------------------------------------------------------------------
1 | // Top-level build file where you can add configuration options common to all sub-projects/modules.
2 |
3 | buildscript {
4 | repositories {
5 | jcenter()
6 | }
7 | dependencies {
8 | classpath 'com.android.tools.build:gradle:2.1.0'
9 |
10 | // NOTE: Do not place your application dependencies here; they belong
11 | // in the individual module build.gradle files
12 | }
13 | }
14 |
15 | allprojects {
16 | repositories {
17 | jcenter()
18 | }
19 | }
20 |
21 | task clean(type: Delete) {
22 | delete rootProject.buildDir
23 | }
24 |
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | # Project-wide Gradle settings.
2 |
3 | # IDE (e.g. Android Studio) users:
4 | # Gradle settings configured through the IDE *will override*
5 | # any settings specified in this file.
6 |
7 | # For more details on how to configure your build environment visit
8 | # http://www.gradle.org/docs/current/userguide/build_environment.html
9 |
10 | # Specifies the JVM arguments used for the daemon process.
11 | # The setting is particularly useful for tweaking memory settings.
12 | # Default value: -Xmx10248m -XX:MaxPermSize=256m
13 | # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
14 |
15 | # When configured, Gradle will run in incubating parallel mode.
16 | # This option should only be used with decoupled projects. More details, visit
17 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
18 | # org.gradle.parallel=true
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Mon Dec 28 10:00:20 PST 2015
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
7 |
--------------------------------------------------------------------------------