天天看点

ViewPage-图片滑动

//主页面——MainActivity.java

package com.example.testviewpage;

import java.util.ArrayList;

import java.util.List;

import android.os.Bundle;

import android.app.Activity;

import android.support.v4.view.PagerAdapter;

import android.support.v4.view.ViewPager;

import android.view.Menu;

import android.view.View;

import android.view.ViewGroup;

import android.view.Window;

import android.widget.ImageView;

import android.widget.ImageView.ScaleType;

public class MainActivity extends Activity {

 private ViewPager mViewPager;

 private int[] mImgIds=new int[]

   {R.drawable.guide_image1,R.drawable.guide_image2,R.drawable.guide_image3};

 private List<ImageView> mImages=new ArrayList<ImageView>();

 @Override

 protected void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  requestWindowFeature(Window.FEATURE_NO_TITLE);

  setContentView(R.layout.activity_main);

  mViewPager=(ViewPager) findViewById(R.id.id_ViewPager);

//要用那个效果就把哪个注释解开

  //mViewPager.setPageTransformer(true, new DepthPageTransformer());

  mViewPager.setPageTransformer(true, new ZoomOutPageTransformer());

  //mViewPager.setPageTransformer(true, new RotateDownPageTransformer());

  mViewPager.setAdapter(new PagerAdapter() {

   @Override

   public Object instantiateItem(ViewGroup container, int position) {

    ImageView imageview=new ImageView(MainActivity.this);

    imageview.setImageResource(mImgIds[position]);

    imageview.setScaleType(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 isViewFromObject(View arg0, Object arg1) {

    // TODO Auto-generated method stub

    return arg0==arg1;

   }

   @Override

   public int getCount() {

    // TODO Auto-generated method stub

    return mImgIds.length;

   }

  });

 }

}

//DepthPageTransformer.java——这是一种方式,从深到浅浮现出来

package com.example.testviewpage;

import android.view.View;

import android.annotation.SuppressLint;

import android.support.v4.view.ViewPager;

public class DepthPageTransformer implements ViewPager.PageTransformer {

    private static final float MIN_SCALE = 0.75f; 

    @SuppressLint("NewApi")

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

        } 

    } 

RotateDownPageTransformer.java——第二种页面变换的方式,效果读者运行代码即可出现

package com.example.testviewpage; 

import com.nineoldandroids.view.ViewHelper; 

import android.annotation.SuppressLint; 

import android.support.v4.view.ViewPager; 

import android.util.Log; 

import android.view.View; 

public class RotateDownPageTransformer implements ViewPager.PageTransformer 

    private static final float ROT_MAX = 20.0f; 

    private float mRot; 

    public void transformPage(View view, float position) 

    { 

        Log.e("TAG", view + " , " + position + ""); 

        if (position < -1) 

        { // [-Infinity,-1) 

            // This page is way off-screen to the left. 

            ViewHelper.setRotation(view, 0); 

        } else if (position <= 1) // a页滑动至b页 ; a页从 0.0 ~ -1 ;b页从1 ~ 0.0 

        { // [-1,1] 

            // Modify the default slide transition to shrink the page as well 

            if (position < 0) 

            { 

                mRot = (ROT_MAX * position); 

                ViewHelper.setPivotX(view, view.getMeasuredWidth() * 0.5f); 

                ViewHelper.setPivotY(view, view.getMeasuredHeight()); 

                ViewHelper.setRotation(view, mRot); 

            } else 

            { 

                mRot = (ROT_MAX * position); 

                ViewHelper.setPivotX(view, view.getMeasuredWidth() * 0.5f); 

                ViewHelper.setPivotY(view, view.getMeasuredHeight()); 

                ViewHelper.setRotation(view, mRot); 

            } 

            // Scale the page down (between MIN_SCALE and 1) 

            // Fade the page relative to its size. 

        } else 

        { // (1,+Infinity] 

            // This page is way off-screen to the right. 

            ViewHelper.setRotation(view, 0); 

        } 

    } 

ZoomOutPageTransformer.java——第三中页面滑动方式,效果是按照一定角度偏转,比较炫

package com.example.testviewpage; 

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) 

        { // [-Infinity,-1) 

            // This page is way off-screen to the left. 

            view.setAlpha(0); 

        } else if (position <= 1) //a页滑动至b页 ; a页从 0.0 -1 ;b页从1 ~ 0.0 

        { // [-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); 

        } 

    } 

Layout下面的xml页面文件-------非常简单

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent">

<android.support.v4.view.ViewPager

    android:id="@+id/id_ViewPager"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    >

</android.support.v4.view.ViewPager>

</RelativeLayout>