服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Android - Android ViewPager相册横向移动的实现方法

Android ViewPager相册横向移动的实现方法

2021-01-09 17:01Android开发网 Android

本篇文章小编为大家介绍,Android ViewPager相册横向移动的实现方法。需要的朋友参考下

当我们第一次下载qq并且打开的时候,会有一个新手引导,引导是几张图片,再加上一些文字说明,向右滑动,直到结束,今天一大早起来研究了一下关于此种效果的实现之viewpager控件。

下面这个例子将用viewpager实现横向移动相册,viewpager有一个对应的pageradapter,用于绑定数据;我们需要继承此类并实现自己的功能。

1、首先定义一个显示项所需要使用的数据对象imageitem

复制代码 代码如下:

public class imageitem {
 private int id;// 资源id
 private string name;// 显示的名称
 public string getname() {
  return name;
 }
 public void setname(string name) {
  this.name = name;
 }
 public imageitem(int id, string name) {
  super();
  this.id = id;
  this.name = name;
 }
 public int getid() {
  return id;
 }
 public void setid(int id) {
  this.id = id;
 }
}

 

2、viewpager中每一面为一个item,所以在layout目录下定义一个viewpager的每一页的item,名为pageritem.xml

复制代码 代码如下:


<framelayout xmlns: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

复制代码 代码如下:


public class viewpageritem extends framelayout {
 private imageview imageview;// 显示图片的imageview
 private textview textview;
 private bitmap bitmap;// 图片对应的bitmap
 private imageitem imageitem;// 每一个图片项对象

 

 public viewpageritem(context context) {
  super(context);
  setviews();
 }
 public viewpageritem(context context, attributeset attrs) {
  super(context, attrs);
  setviews();
 }

 public void setdata(imageitem item) {// 用imageitem填充数据
  this.imageitem = item;
  int resid = item.getid();
  string name = item.getname();
  imageview.setimageresource(resid);
  textview.settext(name);
 }

 public void reload() {// 重新载入数据
  int resid = imageitem.getid();
  imageview.setimageresource(resid);
 }

 public void recycle() {// 回收数据
  imageview.setimagebitmap(null);
  if (this.bitmap == null || this.bitmap.isrecycled()) {
   return;
  }
  this.bitmap.recycle();
  this.bitmap = null;
 }

 public void setviews() {
  layoutinflater infalter = layoutinflater.from(getcontext());
  view view = 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

复制代码 代码如下:


public class pageritemadapter extends pageradapter {
 private context context;
 private imageitem[] image;

 

 public pageritemadapter(context context, imageitem[] image) {
  this.context = context;
  this.image = image;
  hashmap = new hashmap<integer, viewpageritem>();
 }

 private hashmap<integer, viewpageritem> hashmap;// 保存相片的id以及对应的viewpageritem

 @override
 public int getcount() {
  return image.length;
 }

 @override
 public boolean isviewfromobject(view arg0, object arg1) {
  return arg0 == arg1;
 }

 @override
 public void finishupdate(viewgroup container) {
  super.finishupdate(container);
 }

 @override// 初始化一个viewpageritem,如果已经存在就重新载入,没有的话new一个
 public object instantiateitem(viewgroup container, int position) {
  viewpageritem item;
  if (hashmap.containskey(position)) {
   item = hashmap.get(position);
   item.reload();
  } else {
   item = new viewpageritem(context);
   imageitem itemimg = image[position];
   item.setdata(itemimg);
   hashmap.put(position, item);
   ((viewpager) container).addview(item);
  }
  return item;
 }

 @override// 当我们左右滑动图片的时候会将图片回收掉
 public void destroyitem(view container, int position, object object) {
  viewpageritem item = (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如下:

复制代码 代码如下:


public class mainactivity extends activity {
 private final static int res[] = { r.drawable.p1, r.drawable.p2 };// p1,p2为drawable文件夹下的两张图片
 private viewpager viewpager;
 private pageritemadapter adapter;
 private imageitem[] item;

 

 private void setview(){
  item = new imageitem[2];
  item[0] = new imageitem(res[0], "page1");
  item[1] = new imageitem(res[1], "page2");
  viewpager = (viewpager) findviewbyid(r.id.viewpager);
  adapter = new pageritemadapter(getapplicationcontext(), item);
  viewpager.setadapter(adapter);
 }

 @override
 protected void oncreate(bundle savedinstancestate) {
  super.oncreate(savedinstancestate);
  setcontentview(r.layout.activity_main);
  setview();
 }
}

 


 运行程序,左右滑动屏幕出现如下效果!

 

Android ViewPager相册横向移动的实现方法Android ViewPager相册横向移动的实现方法Android ViewPager相册横向移动的实现方法

延伸 · 阅读

精彩推荐
  • AndroidAndroid CardView+ViewPager实现ViewPager翻页动画的方法

    Android CardView+ViewPager实现ViewPager翻页动画的方法

    本篇文章主要介绍了Android CardView+ViewPager实现ViewPager翻页动画的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    Abby代黎明9592022-03-02
  • AndroidAndroid实现Service获取当前位置(GPS+基站)的方法

    Android实现Service获取当前位置(GPS+基站)的方法

    这篇文章主要介绍了Android实现Service获取当前位置(GPS+基站)的方法,较为详细的分析了Service基于GPS位置的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    Ruthless8332021-03-31
  • Android汇总Android视频录制中常见问题

    汇总Android视频录制中常见问题

    这篇文章主要汇总了Android视频录制中常见问题,帮助大家更好地解决Android视频录制中常见的问题,需要的朋友可以参考下...

    yh_thu5192021-04-28
  • AndroidAndroid编程解析XML方法详解(SAX,DOM与PULL)

    Android编程解析XML方法详解(SAX,DOM与PULL)

    这篇文章主要介绍了Android编程解析XML方法,结合实例形式详细分析了Android解析XML文件的常用方法与相关实现技巧,需要的朋友可以参考下...

    liuhe68810042021-05-03
  • AndroidAndroid实现固定屏幕显示的方法

    Android实现固定屏幕显示的方法

    这篇文章主要介绍了Android实现固定屏幕显示的方法,实例分析了Android屏幕固定显示所涉及的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    鉴客6182021-03-27
  • AndroidAndroid界面效果UI开发资料汇总(附资料包)

    Android界面效果UI开发资料汇总(附资料包)

    android ui界面设计,友好的界面会提高用户体验度;同时也增强了android ui界面设计的难度,本文提供了一些常用开发资料(有下载哦)感兴趣的朋友可以了解下...

    Android开发网4652021-01-03
  • AndroidAndroid程序设计之AIDL实例详解

    Android程序设计之AIDL实例详解

    这篇文章主要介绍了Android程序设计的AIDL,以一个完整实例的形式较为详细的讲述了AIDL的原理及实现方法,需要的朋友可以参考下...

    Android开发网4622021-03-09
  • AndroidAndroid中AsyncTask详细介绍

    Android中AsyncTask详细介绍

    这篇文章主要介绍了Android中AsyncTask详细介绍,AsyncTask是一个很常用的API,尤其异步处理数据并将数据应用到视图的操作场合,需要的朋友可以参考下...

    Android开发网7432021-03-11