Android ViewPager切换之PageTransformer接口中transformPage方法position参数使用详解

大家都知道在Android App项目开发、TV项目开发中,会经常性的使用到ViewPager,可以说是用的非常多,也十分重要的一个控件,然而在开发使用ViewPager的时候,我们可以给ViewPager之间的切换加上一个切换过渡的动画。
首先使用是很简单的,但是如何使用不是我们今天的重点,但是我这里会稍微提一下。
用一个Demo来演示吧,看看我们的工程代码解构。
首先来看我的布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:clipChildren="false"
    android:layout_height="match_parent">


    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:clipChildren="false"
        android:layout_height="match_parent"
        android:layout_width="match_parent" />

</LinearLayout>
OK,这就是今天我们Demo的一个布局文件,很简单,一个Width和Height都为match_parent的ViewPager控件。
那么接下来的代码无非就是给findViewById,找到控件ViewPager,然后给她设置PagerAdapter等,这里不详细去解释,我相信大家都会,直接上代码。
MainActivity.java:
package com.example.zhg.viewpager.transformerm.demo;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    private ViewPager mViewPager;
    private List<View> mPages = new ArrayList<View>();
    private PagerAdapter mPagerAdapter;
    private ViewPager.PageTransformer mDepthPageTransformer;
    private List<Bitmap> mBitmap = new ArrayList<Bitmap>();
    private int mRealWidth;
    private int mRealHeight;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
        intBitmaps();
        initPages();
        mViewPager = (ViewPager) findViewById(R.id.viewpager);
        mPagerAdapter = new ViewPagerAdapter(this,mPages);
        mViewPager.setAdapter(mPagerAdapter);// 设置Adapter
        mDepthPageTransformer = new DepthPageTransformer();
        mViewPager.setPageTransformer(true,mDepthPageTransformer);//设置切换动画
    }

    private void intBitmaps() {
        decodeBitmap(R.drawable.page_one);
        decodeBitmap(R.drawable.page_two);
        decodeBitmap(R.drawable.page_three);
        decodeBitmap(R.drawable.page_four);
        decodeBitmap(R.drawable.page_five);
        decodeBitmap(R.drawable.page_six);
    }

    private void decodeBitmap(int resid) {
        BitmapFactory.Options options = new BitmapFactory.Options();
        int scale = 3;
        /*  这里我就不需要这些逻辑代码了,不过大家还是按照实际需要来吧,
        因为我这是下载的都是像素比较高的壁纸,直接scale设置为3就可以。
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeResource(getResources(), resid,options);

        if(mRealHeight < options.outHeight){
            scale = options.outHeight / mRealHeight;
        }else if(mRealWidth < options.outWidth){
            scale = options.outWidth / mRealWidth;
        }
        */
        options.inSampleSize = 3;
        options.inJustDecodeBounds = false;
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(),resid,options);
        mBitmap.add(bitmap);
    }

    private void initPages() {
        for(int i = 0 ; i < 6 ; i++){
            ImageView v  = new PageImageView(this,i);
            ViewPager.LayoutParams pageLayoutParams = new ViewPager.LayoutParams();
            pageLayoutParams.height = ViewPager.LayoutParams.MATCH_PARENT;
            pageLayoutParams.width = ViewPager.LayoutParams.MATCH_PARENT;
            v.setImageBitmap(mBitmap.get(i));
            v.setScaleType(ImageView.ScaleType.FIT_XY);
            mPages.add(v);
        }
    }
}
PageImageView.java:
package com.example.zhg.viewpager.transformerm.demo;

import android.content.Context;
import android.widget.ImageView;

/**
 * Created by Administrator on 2016-5-13.
 */


public class PageImageView extends ImageView {
    private int mId;




    public PageImageView(Context context , int id) {
        this(context);
        this.mId = id;
    }

    public PageImageView(Context context) {
        super(context);
    }


    /**
     * 自定义这个View呢,其实主要就是为了在测试时候,
     * 直接打印,能输出它的id,以便观察
     * @return
     */
    @Override
    public String toString() {
        return this.mId+"&#
  • 14
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值