- 前期准备,如下图:
- 第一步、先书写布局文件:activity_main.xml文件如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
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">
</android.support.v4.view.ViewPager>
</RelativeLayout>
- 第二步、在MainAvtivity中声明控件并使用自带的适配器操作List的方式,操作页面切换。MainActivity代码如下:
package com.example.dujiang0311.viewpager;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private ViewPager mViewPager;
private int[] mImgId = new int[]{R.drawable.p1, R.drawable.p2, R.drawable.p3};
private List<ImageView> mList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mViewPager = (ViewPager) findViewById(R.id.viewpager);
mViewPager.setPageTransformer(true,new ZoomOutPageTransformer());
mViewPager.setAdapter(new PagerAdapter() {
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(mList.get(position));
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
ImageView imageView = new ImageView(MainActivity.this);
imageView.setImageResource(mImgId[position]);
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
container.addView(imageView);
mList.add(imageView);
return imageView;
}
@Override
public int getCount() {
return mImgId.length;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
});
}
}
- 动画切换类的书写(官方文档的例子):ZoomOutPageTransformer代码书写如下:
package com.example.dujiang0311.viewpager;
/**
* 项目名: ViewPager
* 包名: com.example.dujiang0311.viewpager
* 创建者: Dujiang0311
* 创建时间:2017/4/23 19:38
* 描述: TODO
*/
import android.annotation.SuppressLint;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.View;
public class ZoomOutPageTransformer implements ViewPager.PageTransformer
{
private static final float MIN_SCALE = 0.85f;
private static final float MIN_ALPHA = 0.5f;
@SuppressLint("NewApi")
public void transformPage(View view, float position)
{
int pageWidth = view.getWidth();
int pageHeight = view.getHeight();
Log.e("TAG", view + " , " + position + "");
if (position < -1)
{
view.setAlpha(0);
} else if (position <= 1)
{
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);
}
view.setScaleX(scaleFactor);
view.setScaleY(scaleFactor);
view.setAlpha(MIN_ALPHA + (scaleFactor - MIN_SCALE)
/ (1 - MIN_SCALE) * (1 - MIN_ALPHA));
} else
{
view.setAlpha(0);
}
}
}
- 注意:如果想做闪屏的操作提示模块,可以在FlashActivity中加判断,判断用户是否是第一次打开APP,然后就可以了。