大家都知道在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+"&#