ActivityMainfest.xml
-
<?xml version="1.0" encoding="utf-8"?>
-
<manifest xmlns:android=""
-
package="cn.com.xiebiao.myviewpager" >
-
-
<application
-
android:allowBackup="true"
-
android:icon="@mipmap/ic_launcher"
-
android:label="@string/app_name"
-
android:theme="@style/Theme.AppCompat.NoActionBar" >
-
<activity
-
android:name=".MainActivity"
-
android:label="@string/app_name" >
-
<intent-filter>
-
<action android:name="android.intent.action.MAIN" />
-
-
<category android:name="android.intent.category.LAUNCHER" />
-
</intent-filter>
-
</activity>
-
</application>
-
- </manifest>
activity_main.xml
-
<RelativeLayout xmlns:android=""
-
xmlns:tools="" android:layout_width="match_parent"
-
android:layout_height="match_parent" >
-
<android.support.v4.view.ViewPager
-
android:id="@+id/viewPager"
-
android:layout_width="match_parent"
-
android:layout_height="match_parent"/>
- </RelativeLayout>
MainActivity.java
-
package cn.com.xiebiao.myviewpager;
-
-
import android.app.Activity;
-
import android.support.v4.view.PagerAdapter;
-
import android.support.v4.view.ViewPager;
-
import android.os.Bundle;
-
import android.view.View;
-
import android.view.ViewGroup;
-
import android.widget.ImageView;
-
-
import java.util.ArrayList;
-
import java.util.List;
-
-
/***
-
* 3.0以下版本使用viewpage,引入nineoldandroids.jar,1.重写官方的两个特效的属性动画方法,并且2.在setPageTransformer
-
* 源码中修改最低版本判断的if函数即可。
-
* 如果要实现自定义的viewpager特效,只需要修改官方提供的特效效果代码,即可。
-
*/
-
-
public class MainActivity extends Activity {
-
private ViewPager viewPager;
-
private int[] images={R.drawable.guide1,R.drawable.guide2,R.drawable.guide3,R.drawable.guide4};
-
private List<ImageView> imageViewList=new ArrayList<ImageView>();
-
-
-
-
@Override
-
protected void onCreate(Bundle savedInstanceState) {
-
super.onCreate(savedInstanceState);
-
setContentView(R.layout.activity_main);
-
viewPager = (ViewPager) this.findViewById(R.id.viewPager);
-
/**
-
* 官方文档的特效一
-
*/
-
//viewPager.setPageTransformer(true, new ZoomOutPageTransformer());
-
/**
-
* 官方文档的特效二
-
*/
-
viewPager.setPageTransformer(true,new DepthPageTransformer());
-
/**
-
* 正常效果
-
*/
-
viewPager.setAdapter(new PagerAdapter() {
-
@Override
-
public Object instantiateItem(ViewGroup container, int position) {
-
ImageView imageView = new ImageView(MainActivity.this);
-
imageView.setImageResource(images[position]);
-
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
-
container.addView(imageView);
-
imageViewList.add(imageView);
-
-
return imageView;
-
}
-
-
@Override
-
public int getCount() {
-
return images.length;
-
}
-
-
@Override
-
public boolean isViewFromObject(View view, Object o) {
-
return view == o;
-
}
-
-
@Override
-
public void destroyItem(ViewGroup container, int position, Object object) {
-
container.removeView(imageViewList.get(position));
-
}
-
});
-
}
-
-
/**
-
* 官方文档的特效一
-
*/
-
class ZoomOutPageTransformer implements ViewPager.PageTransformer {
-
private static final float MIN_SCALE = 0.85f;
-
private static final float MIN_ALPHA = 0.5f;
-
-
public void transformPage(View view, float position) {
-
int pageWidth = view.getWidth();
-
int pageHeight = view.getHeight();
-
-
if (position < -1) { // [-Infinity,-1)
-
// This page is way off-screen to the left.
-
view.setAlpha(0);
-
-
} else if (position <= 1) { // [-1,1]
-
// Modify the default slide transition to shrink the page as well
-
float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));
-
float vertMargin = pageHeight * (1 - scaleFactor) / 2;
-
float horzMargin = pageWidth * (1 - scaleFactor) / 2;
-
if (position < 0) {
-
view.setTranslationX(horzMargin - vertMargin / 2);
-
} else {
-
view.setTranslationX(-horzMargin + vertMargin / 2);
-
}
-
-
// Scale the page down (between MIN_SCALE and 1)
-
view.setScaleX(scaleFactor);
-
view.setScaleY(scaleFactor);
-
-
// Fade the page relative to its size.
-
view.setAlpha(MIN_ALPHA +
-
(scaleFactor - MIN_SCALE) /
-
(1 - MIN_SCALE) * (1 - MIN_ALPHA));
-
-
} else { // (1,+Infinity]
-
// This page is way off-screen to the right.
-
view.setAlpha(0);
-
}
-
}
-
}
-
-
/**
-
* 官方文档的特效二
-
*/
-
class DepthPageTransformer implements ViewPager.PageTransformer {
-
private static final float MIN_SCALE = 0.75f;
-
-
public void transformPage(View view, float position) {
-
int pageWidth = view.getWidth();
-
-
if (position < -1) { // [-Infinity,-1)
-
// This page is way off-screen to the left.
-
view.setAlpha(0);
-
-
} else if (position <= 0) { // [-1,0]
-
// Use the default slide transition when moving to the left page
-
view.setAlpha(1);
-
view.setTranslationX(0);
-
view.setScaleX(1);
-
view.setScaleY(1);
-
-
} else if (position <= 1) { // (0,1]
-
// Fade the page out.
-
view.setAlpha(1 - position);
-
-
// Counteract the default slide transition
-
view.setTranslationX(pageWidth * -position);
-
-
// Scale the page down (between MIN_SCALE and 1)
-
float scaleFactor = MIN_SCALE
-
+ (1 - MIN_SCALE) * (1 - Math.abs(position));
-
view.setScaleX(scaleFactor);
-
view.setScaleY(scaleFactor);
-
-
} else { // (1,+Infinity]
-
// This page is way off-screen to the right.
-
view.setAlpha(0);
-
}
-
}
-
}
-
- }