├── .gitignore ├── README.md ├── README_CH.md ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── cn │ │ └── youngkaaa │ │ └── yviewpagerdemo │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── cn │ │ │ └── youngkaaa │ │ │ └── yviewpagerdemo │ │ │ ├── BannerActivity.java │ │ │ ├── FragmentInner.java │ │ │ ├── GallaryViewPager.java │ │ │ ├── MainActivity.java │ │ │ └── YViewPager1.java │ └── res │ │ ├── drawable │ │ ├── circle_normal.xml │ │ ├── circle_selected.xml │ │ ├── image2.jpg │ │ ├── jay_fantexi.jpg │ │ ├── jay_jay.jpg │ │ └── logo.jpg │ │ ├── layout │ │ ├── activity_banner.xml │ │ ├── activity_gallary_view_pager.xml │ │ ├── activity_main.xml │ │ └── fragment_inner.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 │ └── cn │ └── youngkaaa │ └── yviewpagerdemo │ └── ExampleUnitTest.java ├── build.gradle ├── gif ├── horizontal.gif └── vertical.gif ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── screens ├── record.gif └── record_circle.gif ├── settings.gradle └── yviewpager ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src ├── androidTest └── java │ └── cn │ └── youngkaaa │ └── yviewpager │ └── ExampleInstrumentedTest.java ├── main ├── AndroidManifest.xml ├── java │ └── cn │ │ └── youngkaaa │ │ └── yviewpager │ │ ├── YFragmentPagerAdapter.java │ │ ├── YFragmentStatePagerAdapter.java │ │ ├── YPagerAdapter.java │ │ └── YViewPager.java └── res │ └── values │ ├── attrs.xml │ └── strings.xml └── test └── java └── cn └── youngkaaa └── yviewpager └── ExampleUnitTest.java /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/workspace.xml 5 | /.idea/libraries 6 | .DS_Store 7 | /build 8 | /captures 9 | .externalNativeBuild 10 | .idea 11 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 支持水平方向上滑动和竖直方向上的滑动,直接修改的官方提供的`ViewPager`的源码,注入了方向判断,使用起来和官方的`ViewPager`基本一样,还有监听事件也是一样的,支持`setOffscreenPageLimit()`可以放心滑动,以及`TabLayout`等。 2 | 3 | 4 | 开源地址:[https://github.com/open-android/ViewPager](https://github.com/open-android/ViewPager "开源项目地址") 5 | 6 | 7 | ![horizontal](gif/horizontal.gif) 8 | 9 | ![vertical](gif/vertical.gif) 10 | 11 | * 详细的使用方法在DEMO里面都演示啦,如果你觉得这个库还不错,请赏我一颗star吧~~~ 12 | 13 | * 欢迎关注微信公众号、长期为您推荐优秀博文、开源项目、视频 14 | 15 | ![](http://upload-images.jianshu.io/upload_images/4037105-8f737b5104dd0b5d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 16 | 17 | ## 使用步骤 18 | 19 | ### 1. 在project的build.gradle添加如下代码(如下图) 20 | 21 | allprojects { 22 | repositories { 23 | ... 24 | maven { url "https://jitpack.io" } 25 | } 26 | } 27 | 28 | 29 | ![](http://oi5nqn6ce.bkt.clouddn.com/itheima/booster/code/jitpack.png) 30 | 31 | 32 | 33 | ### 2. 在Module的build.gradle添加依赖 34 | 35 | compile 'com.github.open-android:ViewPager:0.1.0' 36 | 37 | 38 | 39 | 40 | ### 3.在xml复制如下代码 41 | ``` 42 | 47 | ``` 48 | 49 | 就像上面这样,只需要设置`app:orientation`属性,该属性可选值为:`vertical`和`horizontal`,分别代表竖直方向上滑动和水平方向上滑动。 50 | 51 | ### 也可以使用java代码 52 | 53 | ``` 54 | mViewPager.setDirection(YViewPager.VERTICAL); 55 | 56 | mViewPager.setDirection(YViewPager.HORIZONTAL); 57 | 58 | ``` 59 | 60 | 具体意思同上 61 | 注意,推荐在XML里面设置方向,请切记。 62 | 63 | ### 使用的ViewPager的适配器的时候需要继承YFragmentPagerAdapter 64 | ``` 65 | class FragmentAdapter extends YFragmentPagerAdapter { 66 | 67 | public FragmentAdapter(FragmentManager fm) { 68 | super(fm); 69 | } 70 | 71 | @Override 72 | public Fragment getItem(int position) { 73 | return mFragments.get(position); 74 | } 75 | 76 | @Override 77 | public int getCount() { 78 | return mFragments.size(); 79 | } 80 | 81 | 82 | } 83 | 84 | ``` 85 | 86 | -------------------------------------------------------------------------------- /README_CH.md: -------------------------------------------------------------------------------- 1 | 支持水平方向上滑动和竖直方向上的滑动,直接修改的官方提供的`ViewPager`的源码,注入了方向判断,使用起来和官方的`ViewPager`基本一样,还有监听事件也是一样的,支持`setOffscreenPageLimit()`可以放心滑动,以及`TabLayout`等。 2 | 3 | 4 | 开源地址:[https://github.com/open-android/ViewPager](https://github.com/open-android/ViewPager "开源项目地址") 5 | 6 | 7 | ![horizontal](gif/horizontal.gif) 8 | 9 | ![vertical](gif/vertical.gif) 10 | 11 | * 详细的使用方法在DEMO里面都演示啦,如果你觉得这个库还不错,请赏我一颗star吧~~~ 12 | 13 | * 欢迎关注微信公众号、长期为您推荐优秀博文、开源项目、视频 14 | 15 | ![](http://upload-images.jianshu.io/upload_images/4037105-8f737b5104dd0b5d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 16 | 17 | ## 使用步骤 18 | 19 | ### 1. 在project的build.gradle添加如下代码(如下图) 20 | 21 | allprojects { 22 | repositories { 23 | ... 24 | maven { url "https://jitpack.io" } 25 | } 26 | } 27 | 28 | 29 | ![](http://oi5nqn6ce.bkt.clouddn.com/itheima/booster/code/jitpack.png) 30 | 31 | 32 | 33 | ### 2. 在Module的build.gradle添加依赖 34 | 35 | compile 'com.github.open-android:ViewPager:0.1.0' 36 | 37 | 38 | 39 | 40 | ### 3.在xml复制如下代码 41 | ``` 42 | 47 | ``` 48 | 49 | 就像上面这样,只需要设置`app:orientation`属性,该属性可选值为:`vertical`和`horizontal`,分别代表竖直方向上滑动和水平方向上滑动。 50 | 51 | ### 也可以使用java代码 52 | 53 | ``` 54 | mViewPager.setDirection(YViewPager.VERTICAL); 55 | 56 | mViewPager.setDirection(YViewPager.HORIZONTAL); 57 | 58 | ``` 59 | 60 | 具体意思同上 61 | 注意,推荐在XML里面设置方向,请切记。 62 | 63 | ### 使用的ViewPager的适配器的时候需要继承YFragmentPagerAdapter 64 | ``` 65 | class FragmentAdapter extends YFragmentPagerAdapter { 66 | 67 | public FragmentAdapter(FragmentManager fm) { 68 | super(fm); 69 | } 70 | 71 | @Override 72 | public Fragment getItem(int position) { 73 | return mFragments.get(position); 74 | } 75 | 76 | @Override 77 | public int getCount() { 78 | return mFragments.size(); 79 | } 80 | 81 | 82 | } 83 | 84 | ``` 85 | 86 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | .gradle/ 2 | .idea/ 3 | */build/ 4 | build/ 5 | gradle/ 6 | local.properties 7 | *.iml -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 25 5 | buildToolsVersion "25.0.0" 6 | defaultConfig { 7 | applicationId "cn.youngkaaa.yviewpagerdemo" 8 | minSdkVersion 15 9 | targetSdkVersion 25 10 | versionCode 1 11 | versionName "1.0" 12 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 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 | androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 25 | exclude group: 'com.android.support', module: 'support-annotations' 26 | }) 27 | compile 'com.android.support:appcompat-v7:25.0.0' 28 | testCompile 'junit:junit:4.12' 29 | compile project(path: ':yviewpager') 30 | } 31 | -------------------------------------------------------------------------------- /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 H:\Android_SDK\adt-bundle-windows-x86_64-20131030\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/cn/youngkaaa/yviewpagerdemo/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | package cn.youngkaaa.yviewpagerdemo; 2 | 3 | import android.content.Context; 4 | import android.support.test.InstrumentationRegistry; 5 | import android.support.test.runner.AndroidJUnit4; 6 | 7 | import org.junit.Test; 8 | import org.junit.runner.RunWith; 9 | 10 | import static org.junit.Assert.*; 11 | 12 | /** 13 | * Instrumentation test, which will execute on an Android device. 14 | * 15 | * @see Testing documentation 16 | */ 17 | @RunWith(AndroidJUnit4.class) 18 | public class ExampleInstrumentedTest { 19 | @Test 20 | public void useAppContext() throws Exception { 21 | // Context of the app under test. 22 | Context appContext = InstrumentationRegistry.getTargetContext(); 23 | 24 | assertEquals("cn.youngkaaa.yviewpagerdemo", appContext.getPackageName()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/java/cn/youngkaaa/yviewpagerdemo/BannerActivity.java: -------------------------------------------------------------------------------- 1 | package cn.youngkaaa.yviewpagerdemo; 2 | 3 | import android.os.Bundle; 4 | import android.support.v4.view.ViewPager; 5 | import android.support.v7.app.AppCompatActivity; 6 | import android.util.Log; 7 | import android.view.Gravity; 8 | import android.view.View; 9 | import android.view.ViewGroup; 10 | import android.widget.ImageView; 11 | import android.widget.LinearLayout; 12 | 13 | import java.util.ArrayList; 14 | import java.util.List; 15 | 16 | import cn.youngkaaa.yviewpager.YPagerAdapter; 17 | import cn.youngkaaa.yviewpager.YViewPager; 18 | 19 | public class BannerActivity extends AppCompatActivity { 20 | private static final String TAG = "BannerActivity"; 21 | private YViewPager mYViewPager; 22 | private LinearLayout mLinearIndicator; 23 | private List mImageViews; 24 | private int mTotalCount = 0; 25 | 26 | @Override 27 | protected void onCreate(Bundle savedInstanceState) { 28 | super.onCreate(savedInstanceState); 29 | setContentView(R.layout.activity_banner); 30 | mYViewPager = (YViewPager) findViewById(R.id.viewpager1); 31 | mLinearIndicator = (LinearLayout) findViewById(R.id.linearIndicator); 32 | 33 | initImgs(); 34 | 35 | // setIndicator(0); 36 | 37 | mYViewPager.setAdapter(new ImagePagerAdapter()); 38 | 39 | mYViewPager.setCurrentItem(0); 40 | 41 | mYViewPager.addOnPageChangeListener(new YViewPager.OnPageChangeListener() { 42 | @Override 43 | public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 44 | 45 | } 46 | 47 | @Override 48 | public void onPageSelected(int position) { 49 | setIndicator(position%mImageViews.size()); 50 | Log.d(TAG,"POSITION=====>"+mYViewPager.getCurrentItem()); 51 | } 52 | 53 | @Override 54 | public void onPageScrollStateChanged(int state) { 55 | 56 | } 57 | }); 58 | 59 | 60 | } 61 | 62 | private void setIndicator(int pos) { 63 | mLinearIndicator.removeAllViews(); 64 | for (int i = 0; i < mImageViews.size(); i++) { 65 | int resId = i == pos ? R.drawable.circle_selected : R.drawable.circle_normal; 66 | ImageView indicator = new ImageView(this); 67 | indicator.setImageResource(resId); 68 | LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(68, 68); 69 | indicator.setLayoutParams(lp); 70 | mLinearIndicator.addView(indicator); 71 | } 72 | } 73 | 74 | 75 | private void initImgs() { 76 | mImageViews = new ArrayList<>(); 77 | 78 | ViewPager.LayoutParams lp = new ViewPager.LayoutParams(); 79 | lp.gravity = Gravity.LEFT; 80 | 81 | ImageView imageView1 = new ImageView(this); 82 | imageView1.setImageResource(R.drawable.jay_fantexi); 83 | imageView1.setScaleType(ImageView.ScaleType.CENTER_CROP); 84 | 85 | ImageView imageView2 = new ImageView(this); 86 | imageView2.setImageResource(R.drawable.jay_jay); 87 | imageView2.setScaleType(ImageView.ScaleType.CENTER_CROP); 88 | 89 | ImageView imageView3 = new ImageView(this); 90 | imageView3.setImageResource(R.drawable.logo); 91 | imageView3.setScaleType(ImageView.ScaleType.CENTER_CROP); 92 | 93 | ImageView imageView4 = new ImageView(this); 94 | imageView4.setImageResource(R.drawable.image2); 95 | imageView4.setScaleType(ImageView.ScaleType.CENTER_CROP); 96 | 97 | ImageView imageView5 = new ImageView(this); 98 | imageView5.setImageResource(R.drawable.jay_jay); 99 | imageView5.setScaleType(ImageView.ScaleType.CENTER_CROP); 100 | 101 | ImageView imageView6 = new ImageView(this); 102 | imageView6.setImageResource(R.drawable.logo); 103 | imageView6.setScaleType(ImageView.ScaleType.CENTER_CROP); 104 | 105 | imageView1.setLayoutParams(lp); 106 | imageView2.setLayoutParams(lp); 107 | imageView3.setLayoutParams(lp); 108 | imageView4.setLayoutParams(lp); 109 | imageView5.setLayoutParams(lp); 110 | imageView6.setLayoutParams(lp); 111 | 112 | mImageViews.add(imageView1); 113 | mImageViews.add(imageView2); 114 | mImageViews.add(imageView3); 115 | mImageViews.add(imageView4); 116 | mImageViews.add(imageView5); 117 | mImageViews.add(imageView6); 118 | } 119 | 120 | class ImagePagerAdapter extends YPagerAdapter { 121 | @Override 122 | public Object instantiateItem(ViewGroup container, int position) { 123 | // Log.d(TAG,"############instantiateItem() start############"); 124 | // Log.d(TAG, "position=>" + position); 125 | View img = mImageViews.get(position); 126 | container.addView(img); 127 | // Log.d(TAG,"############instantiateItem() end############"); 128 | return img; 129 | } 130 | 131 | @Override 132 | public int getCount() { 133 | return mImageViews.size(); 134 | } 135 | 136 | @Override 137 | public boolean isViewFromObject(View view, Object object) { 138 | return view == object; 139 | } 140 | 141 | @Override 142 | public void destroyItem(ViewGroup container, int position, Object object) { 143 | container.removeView((View) object); 144 | } 145 | } 146 | } 147 | -------------------------------------------------------------------------------- /app/src/main/java/cn/youngkaaa/yviewpagerdemo/FragmentInner.java: -------------------------------------------------------------------------------- 1 | package cn.youngkaaa.yviewpagerdemo; 2 | 3 | import android.os.Bundle; 4 | import android.support.annotation.DrawableRes; 5 | import android.support.annotation.Nullable; 6 | import android.support.v4.app.Fragment; 7 | import android.view.LayoutInflater; 8 | import android.view.View; 9 | import android.view.ViewGroup; 10 | import android.widget.ImageView; 11 | import android.widget.TextView; 12 | 13 | /** 14 | * Created by : youngkaaa on 2017/2/22. 15 | * Contact me : 645326280@qq.com 16 | */ 17 | 18 | public class FragmentInner extends Fragment { 19 | public static final String KEY_TITLE="KEY_TITLE"; 20 | public static final String KEY_IMG="KEY_IMG"; 21 | private TextView mTextView; 22 | private ImageView mImageView; 23 | @Nullable 24 | @Override 25 | public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 26 | View rootView=inflater.inflate(R.layout.fragment_inner,container,false); 27 | mTextView= (TextView) rootView.findViewById(R.id.tv1); 28 | mImageView= (ImageView) rootView.findViewById(R.id.img1); 29 | return rootView; 30 | } 31 | 32 | public static FragmentInner newInstance(String title, @DrawableRes int res){ 33 | Bundle bundle=new Bundle(); 34 | bundle.putString(KEY_TITLE,title); 35 | bundle.putInt(KEY_IMG,res); 36 | FragmentInner fragment=new FragmentInner(); 37 | fragment.setArguments(bundle); 38 | return fragment; 39 | } 40 | 41 | @Override 42 | public void onActivityCreated(@Nullable Bundle savedInstanceState) { 43 | super.onActivityCreated(savedInstanceState); 44 | Bundle arguments = getArguments(); 45 | mTextView.setText(arguments.getString(KEY_TITLE)); 46 | mImageView.setImageResource(arguments.getInt(KEY_IMG)); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /app/src/main/java/cn/youngkaaa/yviewpagerdemo/GallaryViewPager.java: -------------------------------------------------------------------------------- 1 | package cn.youngkaaa.yviewpagerdemo; 2 | 3 | import android.support.v4.app.Fragment; 4 | import android.support.v4.app.FragmentManager; 5 | import android.support.v7.app.AppCompatActivity; 6 | import android.os.Bundle; 7 | 8 | import java.util.ArrayList; 9 | import java.util.List; 10 | 11 | import cn.youngkaaa.yviewpager.YFragmentPagerAdapter; 12 | import cn.youngkaaa.yviewpager.YViewPager; 13 | 14 | public class GallaryViewPager extends AppCompatActivity { 15 | private YViewPager mViewPager; 16 | private List mFragments; 17 | 18 | @Override 19 | protected void onCreate(Bundle savedInstanceState) { 20 | super.onCreate(savedInstanceState); 21 | setContentView(R.layout.activity_gallary_view_pager); 22 | mViewPager= (YViewPager) findViewById(R.id.viewPagerGallary); 23 | initData(); 24 | 25 | mViewPager.setAdapter(new FragmentAdapter(getSupportFragmentManager())); 26 | mViewPager.setPageMargin(18); 27 | mViewPager.setOffscreenPageLimit(2); 28 | } 29 | 30 | private void initData() { 31 | mFragments=new ArrayList<>(); 32 | FragmentInner fragmentInner1=FragmentInner.newInstance("fragment1",R.drawable.jay_jay); 33 | FragmentInner fragmentInner2=FragmentInner.newInstance("fragment2",R.drawable.jay_fantexi); 34 | FragmentInner fragmentInner3=FragmentInner.newInstance("fragment3",R.drawable.image2); 35 | FragmentInner fragmentInner4=FragmentInner.newInstance("fragment4",R.drawable.logo); 36 | FragmentInner fragmentInner5=FragmentInner.newInstance("fragment5",R.drawable.jay_jay); 37 | FragmentInner fragmentInner6=FragmentInner.newInstance("fragment6",R.drawable.image2); 38 | mFragments.add(fragmentInner1); 39 | mFragments.add(fragmentInner2); 40 | mFragments.add(fragmentInner3); 41 | mFragments.add(fragmentInner4); 42 | mFragments.add(fragmentInner5); 43 | mFragments.add(fragmentInner6); 44 | } 45 | 46 | class FragmentAdapter extends YFragmentPagerAdapter { 47 | 48 | public FragmentAdapter(FragmentManager fm) { 49 | super(fm); 50 | } 51 | 52 | @Override 53 | public Fragment getItem(int position) { 54 | return mFragments.get(position); 55 | } 56 | 57 | @Override 58 | public int getCount() { 59 | return mFragments.size(); 60 | } 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /app/src/main/java/cn/youngkaaa/yviewpagerdemo/MainActivity.java: -------------------------------------------------------------------------------- 1 | package cn.youngkaaa.yviewpagerdemo; 2 | 3 | import android.os.Bundle; 4 | import android.support.v4.app.Fragment; 5 | import android.support.v4.app.FragmentManager; 6 | import android.support.v4.view.ViewPager; 7 | import android.support.v7.app.AppCompatActivity; 8 | import android.util.Log; 9 | import android.view.Gravity; 10 | import android.view.View; 11 | import android.widget.Button; 12 | import android.widget.ImageView; 13 | import android.widget.LinearLayout; 14 | import android.widget.TextView; 15 | 16 | import java.util.ArrayList; 17 | import java.util.List; 18 | 19 | import cn.youngkaaa.yviewpager.YFragmentPagerAdapter; 20 | import cn.youngkaaa.yviewpager.YViewPager; 21 | 22 | public class MainActivity extends AppCompatActivity { 23 | 24 | private static final String TAG = "MainActivity"; 25 | private YViewPager mViewPager; 26 | private List mImageViews; 27 | private LinearLayout lTopCircleIndicator; 28 | private int mPosition; 29 | private boolean isEdgeSwipe; 30 | private int mLastPos; 31 | private List mFragments; 32 | private TextView mTextView; 33 | private int mCurrentItem=0; 34 | private Button mButtonHorizontal; 35 | private Button mButtonVertical; 36 | private int mCurrentPos=0; 37 | @Override 38 | protected void onCreate(Bundle savedInstanceState) { 39 | super.onCreate(savedInstanceState); 40 | setContentView(R.layout.activity_main); 41 | mViewPager = (YViewPager) findViewById(R.id.viewpager); 42 | mTextView= (TextView) findViewById(R.id.numIndicator); 43 | mButtonHorizontal= (Button) findViewById(R.id.btnHorizontal); 44 | mButtonVertical= (Button) findViewById(R.id.btnVertical); 45 | initData(); 46 | 47 | mViewPager.setAdapter(new FragmentAdapter(getSupportFragmentManager())); 48 | 49 | mViewPager.setPageMargin(10); 50 | mViewPager.addOnPageChangeListener(new YViewPager.OnPageChangeListener() { 51 | @Override 52 | public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 53 | Log.d(TAG, "onPageScrolled() position=>" + position + ",positionOffset=>" + positionOffset + 54 | ",positionOffsetPixels=>" + positionOffsetPixels); 55 | } 56 | 57 | @Override 58 | public void onPageSelected(int position) { 59 | Log.d(TAG, "onPageSelected() position=>" + position); 60 | setIndicators(position); 61 | } 62 | 63 | @Override 64 | public void onPageScrollStateChanged(int state) { 65 | Log.d(TAG, "onPageScrollStateChanged() state=>"+state); 66 | } 67 | }); 68 | 69 | mButtonHorizontal.setOnClickListener(new View.OnClickListener() { 70 | @Override 71 | public void onClick(View view) { 72 | mViewPager.setDirection(YViewPager.HORIZONTAL); 73 | } 74 | }); 75 | mButtonVertical.setOnClickListener(new View.OnClickListener() { 76 | @Override 77 | public void onClick(View view) { 78 | mViewPager.setDirection(YViewPager.VERTICAL); 79 | } 80 | }); 81 | } 82 | 83 | private void initData() { 84 | mFragments=new ArrayList<>(); 85 | FragmentInner fragmentInner1=FragmentInner.newInstance("fragment1",R.drawable.jay_jay); 86 | FragmentInner fragmentInner2=FragmentInner.newInstance("fragment2",R.drawable.jay_fantexi); 87 | FragmentInner fragmentInner3=FragmentInner.newInstance("fragment3",R.drawable.image2); 88 | FragmentInner fragmentInner4=FragmentInner.newInstance("fragment4",R.drawable.logo); 89 | FragmentInner fragmentInner5=FragmentInner.newInstance("fragment5",R.drawable.jay_jay); 90 | FragmentInner fragmentInner6=FragmentInner.newInstance("fragment6",R.drawable.image2); 91 | mFragments.add(fragmentInner1); 92 | mFragments.add(fragmentInner2); 93 | mFragments.add(fragmentInner3); 94 | mFragments.add(fragmentInner4); 95 | mFragments.add(fragmentInner5); 96 | mFragments.add(fragmentInner6); 97 | setIndicators(mCurrentPos); 98 | } 99 | 100 | private void setIndicators(int position) { 101 | mTextView.setText(position+1+"/"+mFragments.size()); 102 | } 103 | 104 | private void initImages() { 105 | mImageViews = new ArrayList<>(); 106 | 107 | ViewPager.LayoutParams lp=new ViewPager.LayoutParams(); 108 | lp.gravity= Gravity.LEFT; 109 | 110 | ImageView imageView1 = new ImageView(this); 111 | imageView1.setImageResource(R.drawable.jay_fantexi); 112 | imageView1.setScaleType(ImageView.ScaleType.CENTER_CROP); 113 | 114 | ImageView imageView2 = new ImageView(this); 115 | imageView2.setImageResource(R.drawable.jay_jay); 116 | imageView2.setScaleType(ImageView.ScaleType.CENTER_CROP); 117 | 118 | ImageView imageView3 = new ImageView(this); 119 | imageView3.setImageResource(R.drawable.image2); 120 | imageView3.setScaleType(ImageView.ScaleType.CENTER_CROP); 121 | 122 | ImageView imageView4 = new ImageView(this); 123 | imageView4.setImageResource(R.drawable.jay_jay); 124 | imageView4.setScaleType(ImageView.ScaleType.CENTER_CROP); 125 | 126 | ImageView imageView5 = new ImageView(this); 127 | imageView5.setImageResource(R.drawable.logo); 128 | imageView5.setScaleType(ImageView.ScaleType.CENTER_CROP); 129 | 130 | imageView1.setLayoutParams(lp); 131 | imageView2.setLayoutParams(lp); 132 | imageView3.setLayoutParams(lp); 133 | imageView4.setLayoutParams(lp); 134 | imageView5.setLayoutParams(lp); 135 | 136 | mImageViews.add(imageView1); 137 | mImageViews.add(imageView2); 138 | mImageViews.add(imageView3); 139 | mImageViews.add(imageView4); 140 | mImageViews.add(imageView5); 141 | } 142 | 143 | class FragmentAdapter extends YFragmentPagerAdapter { 144 | 145 | public FragmentAdapter(FragmentManager fm) { 146 | super(fm); 147 | } 148 | 149 | @Override 150 | public Fragment getItem(int position) { 151 | return mFragments.get(position); 152 | } 153 | 154 | @Override 155 | public int getCount() { 156 | return mFragments.size(); 157 | } 158 | 159 | 160 | } 161 | } 162 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/circle_normal.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/circle_selected.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/image2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/open-android/ViewPager/71effd0b909b767f449741adf7f36a54bcb074a3/app/src/main/res/drawable/image2.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable/jay_fantexi.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/open-android/ViewPager/71effd0b909b767f449741adf7f36a54bcb074a3/app/src/main/res/drawable/jay_fantexi.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable/jay_jay.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/open-android/ViewPager/71effd0b909b767f449741adf7f36a54bcb074a3/app/src/main/res/drawable/jay_jay.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable/logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/open-android/ViewPager/71effd0b909b767f449741adf7f36a54bcb074a3/app/src/main/res/drawable/logo.jpg -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_banner.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 17 | 18 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_gallary_view_pager.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 17 | 18 | 19 | 20 | 32 | 33 | 40 | 41 |