AndroidViewPager相册横向移动的实现方法
当我们第一次下载QQ并且打开的时候,会有一个新手引导,引导是几张图片,再加上一些文字说明,向右滑动,直到结束,今天一大早起来研究了一下关于此种效果的实现之ViewPager控件。
下面这个例子将用ViewPager实现横向移动相册,ViewPager有一个对应的PagerAdapter,用于绑定数据;我们需要继承此类并实现自己的功能。
1、首先定义一个显示项所需要使用的数据对象ImageItem
publicclassImageItem{
privateintid;//资源id
privateStringname;//显示的名称
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicImageItem(intid,Stringname){
super();
this.id=id;
this.name=name;
}
publicintgetId(){
returnid;
}
publicvoidsetId(intid){
this.id=id;
}
}
2、ViewPager中每一面为一个Item,所以在layout目录下定义一个ViewPager的每一页的Item,名为pageritem.xml
<FrameLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/imgview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:contentDescription="@string/app_name"
android:scaleType="fitXY"/>
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|center_horizontal"/>
</FrameLayout>
3、新建一个java文件,对应ViewPager的每一项Item
publicclassViewpagerItemextendsFrameLayout{
privateImageViewimageview;//显示图片的ImageView
privateTextViewtextview;
privateBitmapbitmap;//图片对应的Bitmap
privateImageItemimageitem;//每一个图片项对象
publicViewpagerItem(Contextcontext){
super(context);
setViews();
}
publicViewpagerItem(Contextcontext,AttributeSetattrs){
super(context,attrs);
setViews();
}
publicvoidsetData(ImageItemitem){//用ImageItem填充数据
this.imageitem=item;
intresid=item.getId();
Stringname=item.getName();
imageview.setImageResource(resid);
textview.setText(name);
}
publicvoidreload(){//重新载入数据
intresid=imageitem.getId();
imageview.setImageResource(resid);
}
publicvoidrecycle(){//回收数据
imageview.setImageBitmap(null);
if(this.bitmap==null||this.bitmap.isRecycled()){
return;
}
this.bitmap.recycle();
this.bitmap=null;
}
publicvoidsetViews(){
LayoutInflaterinfalter=LayoutInflater.from(getContext());
Viewview=infalter.inflate(R.layout.pageritem,null);
textview=(TextView)view.findViewById(R.id.textView);
imageview=(ImageView)view.findViewById(R.id.imgview);
addView(view);
}
}
4、新建一个数据填充器PagerItemAdapter,继承自PagerAdapter
publicclassPagerItemAdapterextendsPagerAdapter{
privateContextcontext;
privateImageItem[]image;
publicPagerItemAdapter(Contextcontext,ImageItem[]image){
this.context=context;
this.image=image;
hashMap=newHashMap<Integer,ViewpagerItem>();
}
privateHashMap<Integer,ViewpagerItem>hashMap;//保存相片的id以及对应的ViewpagerItem
@Override
publicintgetCount(){
returnimage.length;
}
@Override
publicbooleanisViewFromObject(Viewarg0,Objectarg1){
returnarg0==arg1;
}
@Override
publicvoidfinishUpdate(ViewGroupcontainer){
super.finishUpdate(container);
}
@Override//初始化一个ViewpagerItem,如果已经存在就重新载入,没有的话new一个
publicObjectinstantiateItem(ViewGroupcontainer,intposition){
ViewpagerItemitem;
if(hashMap.containsKey(position)){
item=hashMap.get(position);
item.reload();
}else{
item=newViewpagerItem(context);
ImageItemitemimg=image[position];
item.setData(itemimg);
hashMap.put(position,item);
((ViewPager)container).addView(item);
}
returnitem;
}
@Override//当我们左右滑动图片的时候会将图片回收掉
publicvoiddestroyItem(Viewcontainer,intposition,Objectobject){
ViewpagerItemitem=(ViewpagerItem)object;
item.recycle();
}
}
5、在main.xml文件中添加一个ViewPager控件
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
6、修改MainActivity如下:
publicclassMainActivityextendsActivity{
privatefinalstaticintRES[]={R.drawable.p1,R.drawable.p2};//p1,p2为drawable文件夹下的两张图片
privateViewPagerviewpager;
privatePagerItemAdapteradapter;
privateImageItem[]item;
privatevoidsetView(){
item=newImageItem[2];
item[0]=newImageItem(RES[0],"page1");
item[1]=newImageItem(RES[1],"page2");
viewpager=(ViewPager)findViewById(R.id.viewpager);
adapter=newPagerItemAdapter(getApplicationContext(),item);
viewpager.setAdapter(adapter);
}
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setView();
}
}
运行程序,左右滑动屏幕出现如下效果!
相关文章
- 随机振动 matlab,Matlab内建psd函数在工程随机振动谱分析中的修正方法「建议收藏」
- flex vue 垂直居中居上_推荐几种在移动端实现垂直居中的方法[通俗易懂]
- 简单工厂模式、工厂方法模式和抽象工厂模式
- Linux系统下实现网卡休眠的方法(网卡休眠linux)
- Oracle按时间查询数据的实现方法(oracle根据时间查询)
- 出错解决Linux .sh文件运行出错的方法(linux.sh运行)
- MySQL数据安全:实现透明加密的新方法(mysql透明加密)
- 利用Redis实现高效统计数据的方法(redis统计)
- 查看Redis占用内存的实现方法(查询redis占用内存)
- 在Oracle中新增一列实现过程与方法(oracle中表新增一列)
- MySQL崩溃解决方法简介(MySQL不能运行了)
- 用asp实现无组件生成验证码的方法2种
- JQuery入门——用bind方法绑定事件处理函数应用介绍
- c#中oracle的to_date函数使用方法
- php正则表达式匹配img中任意属性的方法
- Mysqlselect语句设置默认值的方法
- C#中的扩展方法详解