├── .gitignore ├── .idea ├── .name ├── compiler.xml ├── copyright │ └── profiles_settings.xml ├── encodings.xml ├── gradle.xml ├── misc.xml ├── modules.xml ├── runConfigurations.xml └── vcs.xml ├── README.md ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── example │ │ └── xw │ │ └── jikeviewpager │ │ └── ApplicationTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ ├── Transformer │ │ │ ├── DefaultTransformer.java │ │ │ ├── StackTransformer.java │ │ │ └── ZoomOutTransformer.java │ │ └── com │ │ │ └── example │ │ │ └── xw │ │ │ └── jikeviewpager │ │ │ ├── FixedSpeedScroller.java │ │ │ ├── Item.java │ │ │ ├── MainAcrivity_2.java │ │ │ ├── MainActivity.java │ │ │ ├── MyFragment.java │ │ │ ├── RoundRectImageView.java │ │ │ └── VerticalViewPager.java │ └── res │ │ ├── drawable-hdpi │ │ ├── kenan.jpg │ │ ├── lufei.jpg │ │ ├── mingren.jpg │ │ ├── qinnv.jpeg │ │ ├── timo.jpg │ │ └── yasuo.jpg │ │ ├── drawable │ │ └── my_btn.xml │ │ ├── layout │ │ ├── activity_main.xml │ │ ├── activity_main_2.xml │ │ ├── fragment_content.xml │ │ ├── fragment_item.xml │ │ └── item_content.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 │ └── example │ └── xw │ └── jikeviewpager │ └── ExampleUnitTest.java ├── build.gradle ├── gif1.gif ├── gif2.gif ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/workspace.xml 5 | /.idea/libraries 6 | .DS_Store 7 | /build 8 | /captures 9 | -------------------------------------------------------------------------------- /.idea/.name: -------------------------------------------------------------------------------- 1 | JiKeViewPager -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /.idea/copyright/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 23 | 24 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 19 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 46 | 47 | 48 | 49 | 50 | 1.8 51 | 52 | 57 | 58 | 59 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # JiKeViewPager 2 | 防即刻App的一个控件 3 | 4 | ![](https://github.com/xurui1995/JiKeViewPager/blob/master/gif1.gif?raw=true) 5 | # 另一种效果 6 | 修改AndroidMainfest.xml 7 | ``` 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | ``` 16 | ![](https://github.com/xurui1995/JiKeViewPager/blob/master/gif2.gif?raw=true) 17 | 18 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 23 5 | buildToolsVersion "24.0.1" 6 | 7 | defaultConfig { 8 | applicationId "com.example.xw.jikeviewpager" 9 | minSdkVersion 21 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(include: ['*.jar'], dir: 'libs') 24 | testCompile 'junit:junit:4.12' 25 | compile 'com.android.support:appcompat-v7:23.4.0' 26 | compile 'com.android.support:recyclerview-v7:24.1.1' 27 | } 28 | -------------------------------------------------------------------------------- /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:\adt-bundle-windows-x86_64-20140702\sdk/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/example/xw/jikeviewpager/ApplicationTest.java: -------------------------------------------------------------------------------- 1 | package com.example.xw.jikeviewpager; 2 | 3 | import android.app.Application; 4 | import android.test.ApplicationTestCase; 5 | 6 | /** 7 | * Testing Fundamentals 8 | */ 9 | public class ApplicationTest extends ApplicationTestCase { 10 | public ApplicationTest() { 11 | super(Application.class); 12 | } 13 | } -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/java/Transformer/DefaultTransformer.java: -------------------------------------------------------------------------------- 1 | package Transformer; 2 | 3 | /** 4 | * Created by xw on 2016/10/9. 5 | */ 6 | import android.support.v4.view.ViewPager; 7 | import android.view.View; 8 | 9 | public class DefaultTransformer implements ViewPager.PageTransformer { 10 | 11 | @Override 12 | public void transformPage(View view, float position) { 13 | float alpha = 0; 14 | if (0 <= position && position <= 1) { 15 | alpha = 1 - position; 16 | } else if (-1 < position && position < 0) { 17 | alpha = position + 1; 18 | } 19 | view.setAlpha(alpha); 20 | view.setTranslationX(view.getWidth() * -position); 21 | float yPosition = position * view.getHeight(); 22 | view.setTranslationY(yPosition); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/Transformer/StackTransformer.java: -------------------------------------------------------------------------------- 1 | package Transformer; 2 | 3 | /** 4 | * Created by xw on 2016/10/9. 5 | */ 6 | import android.support.v4.view.ViewPager; 7 | import android.view.View; 8 | 9 | public class StackTransformer implements ViewPager.PageTransformer { 10 | @Override 11 | public void transformPage(View page, float position) { 12 | page.setTranslationX(page.getWidth() * -position); 13 | page.setTranslationY(position < 0 ? position * page.getHeight() : 0f); 14 | } 15 | } -------------------------------------------------------------------------------- /app/src/main/java/Transformer/ZoomOutTransformer.java: -------------------------------------------------------------------------------- 1 | package Transformer; 2 | 3 | /** 4 | * Created by xw on 2016/10/9. 5 | */ 6 | import android.support.v4.view.ViewPager; 7 | import android.view.View; 8 | 9 | public class ZoomOutTransformer implements ViewPager.PageTransformer { 10 | private static final float MIN_SCALE = 0.90f; 11 | 12 | @Override 13 | public void transformPage(View view, float position) { 14 | int pageWidth = view.getWidth(); 15 | int pageHeight = view.getHeight(); 16 | float alpha = 0; 17 | if (0 <= position && position <= 1) { 18 | alpha = 1 - position; 19 | } else if (-1 < position && position < 0) { 20 | float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position)); 21 | float verticalMargin = pageHeight * (1 - scaleFactor) / 2; 22 | float horizontalMargin = pageWidth * (1 - scaleFactor) / 2; 23 | if (position < 0) { 24 | view.setTranslationX(horizontalMargin - verticalMargin / 2); 25 | } else { 26 | view.setTranslationX(-horizontalMargin + verticalMargin / 2); 27 | } 28 | 29 | view.setScaleX(scaleFactor); 30 | view.setScaleY(scaleFactor); 31 | 32 | alpha = position + 1; 33 | } 34 | 35 | view.setAlpha(alpha); 36 | view.setTranslationX(view.getWidth() * -position); 37 | float yPosition = position * view.getHeight(); 38 | view.setTranslationY(yPosition); 39 | } 40 | 41 | } 42 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/xw/jikeviewpager/FixedSpeedScroller.java: -------------------------------------------------------------------------------- 1 | package com.example.xw.jikeviewpager; 2 | 3 | import android.content.Context; 4 | import android.support.v4.view.ViewPager; 5 | import android.view.animation.Interpolator; 6 | import android.widget.Scroller; 7 | 8 | import java.lang.reflect.Field; 9 | 10 | /** 11 | * Created by xw on 2016/10/9. 12 | */ 13 | public class FixedSpeedScroller extends Scroller { 14 | private int mDuration = 1500; 15 | 16 | public FixedSpeedScroller(Context context) { 17 | super(context); 18 | } 19 | 20 | public FixedSpeedScroller(Context context, Interpolator interpolator) { 21 | super(context, interpolator); 22 | } 23 | 24 | @Override 25 | public void startScroll(int startX, int startY, int dx, int dy, int duration) { 26 | // Ignore received duration, use fixed one instead 27 | super.startScroll(startX, startY, dx, dy, mDuration); 28 | } 29 | 30 | @Override 31 | public void startScroll(int startX, int startY, int dx, int dy) { 32 | // Ignore received duration, use fixed one instead 33 | super.startScroll(startX, startY, dx, dy, mDuration); 34 | } 35 | 36 | public void setmDuration(int time) { 37 | mDuration = time; 38 | } 39 | 40 | public int getmDuration() { 41 | return mDuration; 42 | } 43 | public void initViewPagerScroll(ViewPager viewPager) { 44 | try { 45 | Field mScroller = ViewPager.class.getDeclaredField("mScroller"); 46 | mScroller.setAccessible(true); 47 | mScroller.set(viewPager, this); 48 | } catch(Exception e) { 49 | e.printStackTrace(); 50 | } 51 | } 52 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/xw/jikeviewpager/Item.java: -------------------------------------------------------------------------------- 1 | package com.example.xw.jikeviewpager; 2 | 3 | /** 4 | * Created by xw on 2016/10/9. 5 | */ 6 | public class Item { 7 | private int imageId; 8 | private String text; 9 | 10 | public Item(int imageId, String text) { 11 | this.imageId = imageId; 12 | this.text = text; 13 | } 14 | 15 | public int getImageId() { 16 | return imageId; 17 | } 18 | 19 | public void setImageId(int imageId) { 20 | this.imageId = imageId; 21 | } 22 | 23 | public String getText() { 24 | return text; 25 | } 26 | 27 | public void setText(String text) { 28 | this.text = text; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/xw/jikeviewpager/MainAcrivity_2.java: -------------------------------------------------------------------------------- 1 | package com.example.xw.jikeviewpager; 2 | 3 | import android.os.Bundle; 4 | import android.support.v4.view.PagerAdapter; 5 | import android.support.v7.app.AppCompatActivity; 6 | import android.view.View; 7 | import android.view.ViewGroup; 8 | import android.widget.Button; 9 | import android.widget.ImageView; 10 | import android.widget.TextView; 11 | 12 | import java.util.ArrayList; 13 | 14 | import Transformer.ZoomOutTransformer; 15 | 16 | /** 17 | * Created by xw on 2016/10/10. 18 | */ 19 | public class MainAcrivity_2 extends AppCompatActivity { 20 | private ArrayList list; 21 | private ArrayList list2; 22 | private Button changeButton; 23 | private VerticalViewPager viewPager3; 24 | private VerticalViewPager viewPager4; 25 | 26 | 27 | protected void onCreate(Bundle savedInstanceState) { 28 | super.onCreate(savedInstanceState); 29 | setContentView(R.layout.activity_main_2); 30 | list=new ArrayList<>(); 31 | list2=new ArrayList<>(); 32 | changeButton= (Button) findViewById(R.id.change_btn2); 33 | viewPager3 = (VerticalViewPager) findViewById(R.id.vertical_viewpager3); 34 | viewPager4= (VerticalViewPager) findViewById(R.id.vertical_viewpager4); 35 | 36 | changeButton.setOnClickListener(new View.OnClickListener() { 37 | @Override 38 | public void onClick(View view) { 39 | viewPager3.setCurrentItem((viewPager3.getCurrentItem()-1)); 40 | viewPager4.setCurrentItem(viewPager4.getCurrentItem()-1); 41 | } 42 | }); 43 | initSpeed(); 44 | initViewPager(); 45 | } 46 | 47 | private void initViewPager() { 48 | final int[] ims={R.drawable.kenan,R.drawable.mingren,R.drawable.lufei}; 49 | String[] text={"身体虽然变小,但头脑依然灵活", 50 | "卡 给 分 新 诺 句 子 !!!", 51 | "我是要成为海贼王的男人!"}; 52 | for (int i = 0; i list; 17 | private ArrayList list2; 18 | private Button changeButton; 19 | private VerticalViewPager viewPager; 20 | private VerticalViewPager viewPager2; 21 | @Override 22 | protected void onCreate(Bundle savedInstanceState) { 23 | super.onCreate(savedInstanceState); 24 | setContentView(R.layout.activity_main); 25 | list=new ArrayList<>(); 26 | list2=new ArrayList<>(); 27 | changeButton= (Button) findViewById(R.id.change_btn); 28 | viewPager = (VerticalViewPager) findViewById(R.id.vertical_viewpager); 29 | viewPager2= (VerticalViewPager) findViewById(R.id.vertical_viewpager2); 30 | 31 | changeButton.setOnClickListener(new View.OnClickListener() { 32 | @Override 33 | public void onClick(View view) { 34 | viewPager.setCurrentItem((viewPager.getCurrentItem()-1)); 35 | viewPager2.setCurrentItem(viewPager2.getCurrentItem()-1); 36 | } 37 | }); 38 | initSpeed(); 39 | initViewPager(); 40 | } 41 | 42 | private void initSpeed() { 43 | FixedSpeedScroller scroller=new FixedSpeedScroller(this); 44 | scroller.setmDuration(2500); 45 | scroller.initViewPagerScroll(viewPager); 46 | 47 | FixedSpeedScroller scroller2=new FixedSpeedScroller(this); 48 | scroller2.setmDuration(1500); 49 | scroller2.initViewPagerScroll(viewPager2); 50 | } 51 | 52 | private void initViewPager() { 53 | 54 | 55 | int[] ims={R.drawable.kenan,R.drawable.mingren,R.drawable.lufei}; 56 | String[] text={"身体虽然变小,但头脑依然灵活", 57 | "卡 给 分 新 诺 句 子 !!!", 58 | "我是要成为海贼王的男人!"}; 59 | for (int i = 0; i 2 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 12 | 13 | 20 | 21 | 22 | 23 |