首先建立一个普通的ViewPager

普通的ViewPager

加有动画效果的Viewpager


1.布局文件

"http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"    android:layout_height="match_parent" tools:context=".MainActivity">.support.v4.view.ViewPager    android:id="@+id/viewpager"    android:layout_width="match_parent"    android:layout_height="match_parent">.support.v4.view.ViewPager>

2.MainActivity

package com.example.administrator.viewpageraddanimation;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.Menu;import android.view.MenuItem;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[] mImagIds = new int[]{R.drawable.guide_image1            , R.drawable.guide_image2, R.drawable.guide_image3};    private List mImages = new ArrayList();    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mViewPager = (ViewPager) findViewById(R.id.viewpager);        //为ViewPager添加动画效果        mViewPager.setPageTransformer(true,new ZoomOutPageTransformer());        mViewPager.setAdapter(new PagerAdapter() {            @Override            public int getCount() {                return mImagIds.length;            }            @Override            public boolean isViewFromObject(View view, Object object) {                return view == object;            }            @Override            public Object instantiateItem(ViewGroup container, int position) {                ImageView imageView = new ImageView(MainActivity.this);                imageView.setImageResource(mImagIds[position]);                imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);//为了不让图片变形                container.addView(imageView);                mImages.add(imageView);                return imageView;            }            @Override            public void destroyItem(ViewGroup container, int position, Object object) {                container.removeView(mImages.get(position));            }        });    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.menu_main, menu);        return true;    }    @Override    public boolean onOptionsItemSelected(MenuItem item) {        // Handle action bar item clicks here. The action bar will        // automatically handle clicks on the Home/Up button, so long        // as you specify a parent activity in AndroidManifest.xml.        int id = item.getItemId();        //noinspection SimplifiableIfStatement        if (id == R.id.action_settings) {            return true;        }        return super.onOptionsItemSelected(item);    }}

为ViewPager添加动画

只需一个方法:

mViewPager.setPageTransformer(,)

先看一眼API

此方法只在3.0以上的版本有效,3.0以下是没有效果的。

这个方法要传两个参数:
第一个直接传true
第二个就是传动画效果,这里google给了两个例子(工具类),使用时只需要将这个类导入到你的工程中,然后直接调用即可。

例如:

mViewPager.setPageTransformer(true,new ZoomOutPageTransformer())

这样动画效果就实现了

第一种:Zoom-out Page Transformer 当在相邻界面滑动时,这个page transformer使页面收缩

public 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);        }    }}

2.Depth Page Transformer 这个page transformer使用默认动画的屏幕左滑动画。但是为右

public 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);        }    }}

更多相关文章

  1. Android(安卓)view获取焦点且有黄色高亮效果
  2. android 渐变的半圆进度条
  3. 7 android 星级滑块
  4. 【Android】向sdcard中写入文件
  5. Android(安卓)View (transship)
  6. (Android)调用百度地图api之添加覆盖物
  7. Android(安卓)Studio3.2 Butter Knife配置填坑
  8. Android(安卓)日期时间选择器
  9. android_常用UI控件_02_EditText_01添加图片到edittext中

随机推荐

  1. 关于 Linux Polkit 权限提升漏洞(CVE-202
  2. html基础-图文列表、表格
  3. html基础-表格合并练习
  4. SEO主要是做什么的?零基础能学习吗?
  5. 板绘发型怎么画?动漫绘画头发教程
  6. CF卡里面的目录无法访问也打不开文件的找
  7. 【北亚数据恢复】服务器raid阵列瘫痪导致
  8. 图文列表与商品表的代码实现
  9. 图文列表及表格学习总结
  10. markdown常用语法