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

滞段百货商场

滞段百货商场

2016-02-19 10:18

下面图老师小编要跟大家分享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();
 }

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

 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);

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  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 HashMapInteger, ViewpagerItem();
 }

 private HashMapInteger, 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();
 }
}


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

展开更多 50%)
分享

猜你喜欢

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

编程语言 网络编程
Android ViewPager相册横向移动的实现方法

Android利用ViewPager实现滑动广告板实例源码

编程语言 网络编程
Android利用ViewPager实现滑动广告板实例源码

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Android 按后退键退出Android程序的实现方法

编程语言 网络编程
Android 按后退键退出Android程序的实现方法

Android 用SQLite实现事务的方法

编程语言 网络编程
Android 用SQLite实现事务的方法

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

Android中实现EditText圆角的方法

编程语言 网络编程
Android中实现EditText圆角的方法

基于Android中手势交互的实现方法

编程语言 网络编程
基于Android中手势交互的实现方法

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

最新设计的非主流分组_厌倦山盟海誓 - QQ非主流分组

最新设计的非主流分组_厌倦山盟海誓 - QQ非主流分组

对着月亮说 耶;对着太阳说 切 - QQ图案分组

对着月亮说 耶;对着太阳说 切 - QQ图案分组
下拉加载更多内容 ↓