二十四、ViewPager实现图片滑动预览
来源:互联网 发布:苏州百度快照优化 编辑:程序博客网 时间:2024/06/05 04:09
场景是这样的,用GridView展示了一些缩略图,当点击缩略图时,预览大图,并且可以滑动切换预览图,单击预览图则关闭预览界面,回到之前的缩略图界面。通过上述功能介绍发现,用ViewPager即可完全满足功能。
一、使用ViewPager加载预览图片
ViewPager使用和ListView、GridView差不多,不做过多介绍,主要是它的adapter稍微有些不一样。
先上adapter代码:
public class ImageViewPagerAdapter extends PagerAdapter{ private Context context; private List<String> images; public ImageViewPagerAdapter(List<String> images, Context context) { this.images = images; this.context = context; } @Override public int getCount() { if (images == null) return 0; return images.size(); } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public Object instantiateItem(ViewGroup container, int position) { View view = LayoutInflater.from(context).inflate(R.layout.image_vp_item, container, false); ((SimpleDraweeView)view.findViewById(R.id.iv_image)).setImageURI(UriUtil.parseUriOrNull(images.get(position))); container.addView(view); // 这里不是返回ViewGroup,而是返回key(这里view作为key) return view; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); }}item布局很简单,就是一张图片:
<?xml version="1.0" encoding="utf-8"?><com.facebook.drawee.view.SimpleDraweeView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:keng="http://schemas.android.com/apk/res-auto" android:id="@+id/iv_image" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_centerInParent="true" android:background="@color/black" android:scaleType="fitCenter" keng:actualImageScaleType="fitCenter" keng:placeholderImage="@drawable/default_head_white" />SimpleDraweeView是Facebook的开源图片加载控件,帮助我们从网络加载图片和缓存、释放图片。就是这个scaleType都要设为“fitCenter”,这样图片就可以顶宽或者顶高全屏显示。
上述adapter中,重写4个方法即可getCount、isViewFromObject、instantiateItem、destroyItem。
1、先说instantiateItem(ViewGroup container, int position),这个方法最重要,就是在这里构造视图的。
获取到item视图,然后添加到ViewGroup,别以为这样就完了,还要返回一个Object类型的返回值,一开始我受到误导,直接返回ViewGroup container,然后就出现问题了,ViewGroup一直显示不出来;后来才找到问题,这里不是返回ViewGroup本身,而是返回一个key,这个key可以说是ViewPager识别item的标示,它的用途在下面一个方法中有用到。
2、isViewFromObject(View view, Object object)方法用来判断instantiateItem(ViewGroup, int)函数所返回来的Key与一个页面视图是否是代表的同一个视图(即它俩是否是对应的,对应的表示同一个View),这里的Object就是上述返回的key,由于我们是直接返回的view,所以直接==即可。
3、destroyItem(ViewGroup container, int position, Object object)用来移除视图。
OK,现在在主activity中实现我们的adapter就行了:
adapter = new ImageViewPagerAdapter(images, this);viewPager = (ViewPager) findViewById(R.id.viewpager);viewPager.setAdapter(adapter);这样,就实现了我们的大部分功能,可以预览大图,可以滑动。
二、单击事件
现在,就差一个点击事件,我们可以直接在activity中监听点击事件么?
viewPager.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 点击关闭 finish(); }});事实证明,是不行的,我们需要在adapter里面,单个view去进行监听。所以,instantiateItem(ViewGroup container, int position)方法的完整代码应该是:
@Overridepublic Object instantiateItem(ViewGroup container, int position) { View view = LayoutInflater.from(context).inflate(R.layout.image_vp_item, container, false); view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 点击关闭 ((Activity)context).finish(); } }); ((SimpleDraweeView)view.findViewById(R.id.iv_image)).setImageURI(UriUtil.parseUriOrNull(images.get(position))); container.addView(view); // 这里不是返回ViewGroup,而是返回key(这里view作为key) return view;}
缩略效果图如下:
预览效果图如下:
参考:
http://blog.csdn.net/harvic880925/article/details/38453725
http://blog.csdn.net/larryl2003/article/details/6919513
- 二十四、ViewPager实现图片滑动预览
- Android ViewPager实现图片滑动预览效果
- ViewPager+ImageView 图片滑动预览
- Android实现滑动图片(ViewPager)
- viewPager实现图片左右滑动
- 使用ViewPager实现左右循环滑动图片
- 使用ViewPager实现图片滑动展示
- Android ViewPager 实现图片左右滑动查看
- Android ViewPager 实现图片左右滑动查看
- 使用ViewPager实现左右循环滑动图片
- 使用ViewPager实现图片滑动展示
- android实现图片左右滑动效果:viewpager
- ViewPager(二):Fragment+ViewPager实现页面滑动
- android viewpager广告栏左右预览上下一张图片实现
- ViewPager使用 -------滑动图片
- Android-ViewPager滑动图片
- Android ViewPager图片滑动
- Android实战简易教程-第三十四枪(基于ViewPager和FragmentPagerAdapter实现滑动通用Tab)
- fatal error LNK1104: 无法打开文件“gl_helper.h”
- 黑马程序员骗局
- React Native中加载指示器组件ActivityIndicator使用方法
- 第28篇 linux下布署apprtc(五)
- 【ORACLE/SQLSERVER/MySQL】字段聚合需求实现stuff,wm_concat,group_concat
- 二十四、ViewPager实现图片滑动预览
- 测试图标
- PS中如何查看图像的RGB值
- iOS 10 开发适配系列 之 权限Crash问题
- 刘看山 & Vue.js [图]
- HTTP状态吗详解
- 对AFNetworking简单封装GET,POST请求(block方法)
- js通过按钮button点击弹出一个新的窗口页面
- 如何改变多任务列表页标题描述的样式