参考地址:https://blog.csdn.net/wxk105/article/details/51779566

需求:ViewPager中的ImageView能够缩放

效果图:

具体使用:

1.build.gradle中写入:maven url

repositories {jcenter()maven { url "https://jitpack.io" }}

2.添加依赖:

compile 'com.github.chrisbanes:PhotoView:2.1.3'

3.使用同ImageView

<com.github.chrisbanes.photoview.PhotoViewandroid:id="@+id/pic_pv"android:layout_width="match_parent"android:layout_height="match_parent" />

具体Demo:

public class MainActivity extends AppCompatActivity {private List<ImageInfo> list;//用于接收后台图片地址集合@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initData();//填充数据initView();//初始化控件}private void initData() {for (int i=0;i<urls.length;i++){ImageInfo imageInfo=new ImageInfo(urls[i],200,200);list.add(imageInfo);}}private void initView() {GridView gv_pic = (GridView) findViewById(R.id.gv_pic);gv_pic.setAdapter(new GvAdapter(this));gv_pic.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {list=new ArrayList<ImageInfo>();//点击位置及对象传入dialogPicShowDialog dialog=new PicShowDialog(MainActivity.this,list,position);dialog.show();}});}
}
public class PicShowDialog extends Dialog {private Context context;private View view;private List<ImageInfo> imageInfos;//接收传入集合private MyViewPager vp;private List<View> views = new ArrayList<View>();//图片上圆点集合private LayoutAnimationController lac;private LinearLayout ll_point;private ViewPagerAdapter pageAdapter;private int position;//点击位置private LinearLayout.LayoutParams paramsL = new LinearLayout.LayoutParams(10, 10);// 图片缓存 默认 等private DisplayImageOptions optionsImag = new DisplayImageOptions.Builder().showImageForEmptyUri(R.mipmap.zanwutupian).showImageOnFail(R.mipmap.zanwutupian).cacheInMemory(true).cacheOnDisk(true).considerExifParams(true).imageScaleType(ImageScaleType.EXACTLY).bitmapConfig(Bitmap.Config.RGB_565).build();public PicShowDialog(Context context, int themeResId) {super(context, themeResId);this.context = context;}public PicShowDialog(Context context, List<ImageInfo> imageInfos, int position) {this(context, R.style.Pic_Dialog);this.imageInfos = imageInfos;this.position = position;}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.act_dialog_pic);getWindow().setLayout(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
//        getWindow().setLayout(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);vp = (MyViewPager) findViewById(R.id.vp);ll_point = (LinearLayout) findViewById(R.id.ll_point);
//        init();initMyPageAdapter();
//        vp.setAdapter(new ViewPagerAdapter());vp.setCurrentItem(position);//滑动监听设置图片滑动时,相应点跟着变化vp.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {@Overridepublic void onPageScrolled(int i, float v, int i1) {}@Overridepublic void onPageSelected(int position) {if (views.size() != 0 && views.get(position) != null) {for (int i = 0; i < views.size(); i++) {if (i == position) {views.get(i).setBackgroundResource(R.drawable.point_focus2);} else {views.get(i).setBackgroundResource(R.drawable.point_normal2);}}}}@Overridepublic void onPageScrollStateChanged(int i) {}});}/**** 初始化viewpager适配器*/private void initMyPageAdapter() {initPoint();if (pageAdapter == null) {pageAdapter = new ViewPagerAdapter();if (vp != null) {vp.setAdapter(pageAdapter);}} else {pageAdapter.notifyDataSetChanged();}}//初始化圆点private void initPoint() {views.clear();ll_point.removeAllViews();if (imageInfos.size()==1){ll_point.setVisibility(View.GONE);}else {for (int i = 0; i < imageInfos.size(); i++) {View view = new View(context);paramsL.setMargins(dip2px(context, 5), dip2px(context, 2), 0, dip2px(context, 5));view.setLayoutParams(paramsL);if (i == position) {view.setBackgroundResource(R.drawable.point_focus2);} else {view.setBackgroundResource(R.drawable.point_normal2);}views.add(view);ll_point.addView(view);}}}//viewpager适配器private class ViewPagerAdapter extends PagerAdapter {@Overridepublic int getCount() {return imageInfos.size();}@Overridepublic boolean isViewFromObject(View view, Object object) {return view == object;}@Overridepublic Object instantiateItem(ViewGroup container, int position) {View view =View.inflate(context, R.layout.item_pic_show, null);PhotoView photoView = (PhotoView) view.findViewById(R.id.pic_pv);//这里使用Imageloader加载框架,加载网络图片,图片地址给的是网络图片。            ImageLoader.getInstance().displayImage(imageInfos.get(position).getUrl(),photoView,optionsImag);photoView.setOnPhotoTapListener(new PhotoViewAttacher.OnPhotoTapListener() {@Overridepublic void onPhotoTap(View view, float x, float y) {dismiss();}});((ViewPager) container).addView(view);return view;}@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {((ViewPager) container).removeView((View) object);}}private   int dip2px(Context context, float dpValue) {final float scale = context.getResources().getDisplayMetrics().density;return (int) (dpValue * scale + 0.5f);}}
public class GvAdapter extends BaseAdapter {private Context context;private List<ImageInfo> list;// 图片缓存 默认 等private DisplayImageOptions optionsImag = new DisplayImageOptions.Builder().showImageForEmptyUri(R.mipmap.zanwutupian).showImageOnFail(R.mipmap.zanwutupian).cacheInMemory(true).cacheOnDisk(true).considerExifParams(true).imageScaleType(ImageScaleType.EXACTLY).bitmapConfig(Bitmap.Config.RGB_565).build();public GvAdapter(Context context, List<ImageInfo> list){this.context=context;this.list=list;}@Overridepublic int getCount() {return list==null?0:list.size();}@Overridepublic Object getItem(int position) {return list.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {convertView=View.inflate(context, R.layout.item_image_view, null);ImageView iv_image= (ImageView) convertView.findViewById(R.id.iv_image);ImageLoader.getInstance().displayImage(list.get(position).getUrl(),iv_image,optionsImag);return convertView;}
}

完整源码:https://download.csdn.net/download/silence_sep/10656790

PhotoView+ViewPager相关推荐

  1. 使用photoview+viewpager实现图片缩放切换(类似微信朋友圈图片查看)

    首先看一下最终效果 经过分析可知,整个页面布局应该是一个Listview,它的每一个条目item中包含原型头像(采用CircleImageVIew)一个数目可变的GridView和其他,Gridvie ...

  2. android 新闻频道,GitHub - xiyy/TopNews: 一款Android新闻客户端,并提供电视台直播功能...

    TopNews 一款Android新闻客户端,独立开发完成,主要功能包括: 1 新闻频道分类,头条.社会.国内.娱乐.体育.军事.科技.财经.时尚 使用ViewPager+FragmentPagerA ...

  3. Android仿微信照片浏览器

    Android仿微信照片浏览器 最近一直在忙IM,所以还给介绍一下IM相关的Android仿微信照片浏览器,支持照片放大缩小,长按.点击.点击照片内外等监听事件,可以实现市面上常见的长按保存照片的功能 ...

  4. 微信朋友圈的实现(图片查看,手势放大、缩小)

    效果图: 简单的就这样,实现效果的方法有多种,可以使用ListView嵌套GridView,也可以直接使用RecycleView,这里只说RecycleView的实现方法. 难一点的地方就是每个ite ...

  5. Android使用ViewPager+PhotoView实现图片查看器

    可实现功能效果说明: 可实现多张图片点击放大,手指控制,左右滑动,多张图片点击任意位置定位显示任意位置图片:无动画,可自己加 效果图:                             核心代码 ...

  6. PhotoView结合ViewPager的简单使用

    之前已经学过了ExpandableListView的基本用法,这次就在上面的基础上来结合PhotoView实现真正的浏览图片的做法. 使用PhotoView前需要添加依赖: compile 'com. ...

  7. Android中使用PhotoView和ViewPager查看图片,并保存到本地

    如下图:可以滑动查看,可以放大缩小,点击长按保存图片     build.gradle中添加依赖 compile 'com.github.chrisbanes.photoview:library:+' ...

  8. android PhotoView的用法

    先来张效果图 PhotoView的简介: 它是一个图片查看库,实现图片浏览功能,支持pinch手势或者点击放大缩小.支持在ViewPager中翻页浏览图片. 它是一款扩展字Anroid ImageVi ...

  9. 图片预览组件PhotoView

    图片预览组件PhotoView PhotoView是一款图片预览组件,广泛应用于大图的查看.该组件支持图片手势缩放.旋转等功能.它可以很好的和ViewPager.Picasso等组件结合,实现各种复杂 ...

最新文章

  1. CSP:CSP认证考试:202012-1(期末预测之安全指数)满分答案,Java版
  2. opencv中resize函数
  3. 《鸿蒙理论知识04》HarmonyOS概述之系统定义
  4. 循环内部异步函数处理相关问题解析
  5. mysql 如何调用函数结果_MySQL自定义函数调用不出结果
  6. mysql错误码1709_MySQL5.6出现ERROR 1709 (HY000): Index column size too large问题的解决方法...
  7. 经典计算机实现量子逻辑门,量子计算机:对量子逻辑门的探讨
  8. SpringBoot之Bean之多实例选择
  9. SQL存储过程与自定义函数实例
  10. 想快速了解AI各领域的前沿研究成果?可以来这个网站看看 | 资源
  11. 白盒测试:三角形问题实验报告
  12. 情绪管理 | 压力、愤怒、烦恼,面对不良情绪,你会怎么做?
  13. 重启电脑数据丢失怎么恢复?这篇指南很受用!
  14. java aspose.words 生成word目录和更新目录
  15. UWB_安信可NodeMCU-BU01的使用
  16. Windows 10配置网络代理服务器
  17. Java API--IO流整理
  18. 2020计算机考研复试
  19. UnityShader_屏幕后处理之辉光
  20. Linux 桥接ping不通外网(特别是校园网) 解决方式及错误总结

热门文章

  1. 高通开发Qual FQ
  2. Vue--template标签--自动补齐
  3. mysql binlog 设置日志大小 保存时间
  4. scala 隐式详解(implicit关键字)
  5. 五金机电行业智能渠道商管理平台搭建,构建数字化渠道管理新模式
  6. 设计模式之策略模式详解
  7. JDBC遇到的ClassCastException问题
  8. java连接mysql实现增删改查_java连接数据库,实现增删改查操作
  9. 1.配置SessionFactory
  10. 【Visual Studio】使用 pexports 根据 VS 的 .dll 动态链接库生成 .lib 库文件