通过我们前面的学习,我们知道ViewPager是可以做出近乎完美的滑动体验,回顾整个Android,我们发现Gallery具备同样的特点,于是我们大胆地猜想,Gallery是否和ViewPager之间有些关联呢?两者在功能上的类似和重叠,总会让我们对此充满好奇,我们开始思考:如果不借助Gallery,我们能否做出像Gallery一样的效果呢?答案是肯定的。那么,我们今天就来一起学习自己动手打造一个Gallery吧。
首先讲述下原理,和前面一样,当我们继承PagerAdapter这个类时,一般会传入一个View类型的数组,这样在ViewPager绑定了这个适配器类时,就能将这个View数组里的View对象显示出来。在这里,View可以是一个布局,也可以是某个控件,甚至是任何继承自View的控件。所以,我们同样可以传入一个ImageView作为这个View对象啊。好,明白了原理,我们就来开始今天的学习吧!
首先来看布局代码,ViewPager是必不可少的一个控件。
<LinearLayout 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:orientation="vertical" android:background="#000000" tools:context=".MainActivity" > <android.support.v4.view.ViewPager android:id="@+id/ViewPager" android:layout_width="fill_parent" android:layout_height="fill_parent"/> </LinearLayout>
接下来是那个百用不厌的ViewPagerAdapter类,继承自PagerAdapter:
package com.Android.ViewPager4Gallery; import java.util.ArrayList; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.view.View; public class ViewPagerAdapter extends PagerAdapter { private ArrayList<View> Views;//存放View的ArrayList /* * ViewAdapter构造函数 * @author:Robin */ public ViewPagerAdapter(ArrayList<View> Views) { this.Views=Views; } /* * 返回View的个数 */ @Override public int getCount() { if(Views!=null) { return Views.size(); } return 0; } /* * 销毁View */ @Override public void destroyItem(View container, int position, Object object) { ((ViewPager)container).removeView(Views.get(position)); } /* * 初始化 */ @Override public Object instantiateItem(View container, int position) { ((ViewPager)container).addView(Views.get(position),0); return Views.get(position); } /* * 判断View是否来自Object */ @Override public boolean isViewFromObject(View view, Object object) { return (view==object); } }
package com.Android.ViewPager4Gallery; import java.util.ArrayList; import android.os.Bundle; import android.app.Activity; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.view.Menu; import android.view.View; import android.view.Window; import android.widget.ImageView; import android.widget.Toast; public class MainActivity extends Activity implements OnPageChangeListener { //图像资源 private int[] Resources=new int[]{R.drawable.image1,R.drawable.image2,R.drawable.image3, R.drawable.image5,R.drawable.image5,R.drawable.image6,R.drawable.image7,R.drawable.image10, R.drawable.image11,R.drawable.image13,R.drawable.image16,R.drawable.image17,R.drawable.image18, R.drawable.image19,R.drawable.image21,R.drawable.image22,R.drawable.image23,R.drawable.image24, R.drawable.image25,R.drawable.image27,R.drawable.image28,R.drawable.image29}; //适配器 private ViewPagerAdapter mAdapter; //View数组 private ArrayList<View> Views; //ViewPager private ViewPager mViewPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); //初始化Views Views=new ArrayList<View>(Resources.length); for(int i=0;i<Resources.length;i++) { ImageView image=new ImageView(this); image.setImageResource(Resources[i]); image.setScaleType(ImageView.ScaleType.FIT_XY); image.setAdjustViewBounds(true); Views.add(image); } //初始化ViewPager mViewPager=(ViewPager)findViewById(R.id.ViewPager); //初始化适配器 mAdapter=new ViewPagerAdapter(Views); //绑定 mViewPager.setAdapter(mAdapter); //事件注册 mViewPager.setOnPageChangeListener(this); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public void onPageScrollStateChanged(int arg0) { } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { //Toast.makeText(this, "你滚动了ViewPager", Toast.LENGTH_SHORT).show(); } @Override public void onPageSelected(int position) { Toast.makeText(this, "这是第"+position+"张图片", Toast.LENGTH_SHORT).show(); } }
今天的内容就是这样了,快考试了,能写博客的时间不多咯!呵呵
ViewPager相关文章:
1、Android开发之ViewPager+ActionBar+Fragment实现响应式可滑动Tab
2、Android开发学习之基于ViewPager实现Gallery画廊效果
3、Android开发学习之使用ViewPager+PagerTabStrip制作可滑动的Tab
4、Android开发学习之使用ViewPager打造应用引导界面面