如下图:可以滑动查看,可以放大缩小,点击长按保存图片

   

build.gradle中添加依赖

compile 'com.github.chrisbanes.photoview:library:+'//glide
compile 'com.github.bumptech.glide:glide:3.7.0'

外部 build.gradle

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

main布局文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#000000"android:orientation="vertical"><android.support.v4.view.ViewPagerandroid:id="@+id/viewpager"android:layout_width="match_parent"android:layout_height="match_parent" /><TextViewandroid:id="@+id/tv_num"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:textColor="#ffffff"android:textSize="30sp" />
</RelativeLayout>

MainActivity

public class MainActivity extends AppCompatActivity {private List<Fragment> fragmentList = new ArrayList<>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ViewPager viewpager = (ViewPager) findViewById(R.id.viewpager);final TextView tv_num = (TextView) findViewById(R.id.tv_num);Fragment fragment1 = PhotoFragment.newInstance("http://img1.3lian.com/2015/w22/87/d/105.jpg");Fragment fragment2 = PhotoFragment.newInstance("http://a3.topitme.com/0/d0/f1/1128126520d81f1d00o.jpg");Fragment fragment3 = PhotoFragment.newInstance("http://pic30.nipic.com/20130605/7447430_151725918000_2.jpg");Fragment fragment4 = PhotoFragment.newInstance("http://img1.3lian.com/2015/a1/46/d/100.jpg");Fragment fragment5 = PhotoFragment.newInstance("http://img2.imgtn.bdimg.com/it/u=294543409,575604841&fm=26&gp=0.jpg");Fragment fragment6 = PhotoFragment.newInstance("http://pic28.photophoto.cn/20130809/0036036894761435_b.jpg");fragmentList.add(fragment1);fragmentList.add(fragment2);fragmentList.add(fragment3);fragmentList.add(fragment4);fragmentList.add(fragment5);fragmentList.add(fragment6);tv_num.setText(1+"/"+fragmentList.size());PhotoFragmentAdapter adapter = new PhotoFragmentAdapter(getSupportFragmentManager(),fragmentList);viewpager.setAdapter(adapter);viewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {@Overridepublic void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}@Overridepublic void onPageSelected(int position) {tv_num.setText(position+1+"/"+fragmentList.size());}@Overridepublic void onPageScrollStateChanged(int state) {}});viewpager.setCurrentItem(2);}
}

PhotoFragment

public class PhotoFragment extends Fragment {private String url;private PhotoView mPhotoView;/*** 获取这个fragment需要展示图片的url* @param url* @return*/public static PhotoFragment newInstance(String url) {PhotoFragment fragment = new PhotoFragment();Bundle args = new Bundle();args.putString("url", url);fragment.setArguments(args);return fragment;}@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);url = getArguments().getString("url");}@Nullable@Overridepublic View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {View view = inflater.inflate(R.layout.fragment_img, container, false);mPhotoView = view.findViewById(R.id.photoview);//设置缩放类型,默认ScaleType.CENTER(可以不设置)mPhotoView.setScaleType(ImageView.ScaleType.CENTER);mPhotoView.setOnLongClickListener(new View.OnLongClickListener() {@Overridepublic boolean onLongClick(View view) {//Toast.makeText(getActivity(),"长按事件"+url,Toast.LENGTH_SHORT).show();mPhotoView.setDrawingCacheEnabled(true);Bitmap obmp = Bitmap.createBitmap(mPhotoView.getDrawingCache());mPhotoView.setDrawingCacheEnabled(false);saveMyBitmap(getActivity(), obmp);return true;}});mPhotoView.setOnPhotoTapListener(new PhotoViewAttacher.OnPhotoTapListener() {@Overridepublic void onPhotoTap(View view, float x, float y) {Toast.makeText(getActivity(),"点击事件,真实项目中可关闭activity",Toast.LENGTH_SHORT).show();getActivity().finish();}});Glide.with(getContext()).load(url).placeholder(R.mipmap.ic_launcher)//加载过程中图片未显示时显示的本地图片.error(R.mipmap.ic_launcher)//加载异常时显示的图片
//                .centerCrop()//图片图填充ImageView设置的大小.fitCenter()//缩放图像测量出来等于或小于ImageView的边界范围,该图像将会完全显示.into(mPhotoView);return view;}//保存文件到指定路径public void saveMyBitmap(Context context, Bitmap bitmap) {String sdCardDir = Environment.getExternalStorageDirectory() + "/DCIM/";File appDir = new File(sdCardDir, "HappyBirthday");if (!appDir.exists()) {//不存在appDir.mkdir();}String fileName = "HappyBirthday" + System.currentTimeMillis() + ".jpg";File file = new File(appDir, fileName);try {FileOutputStream fos = new FileOutputStream(file);bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);fos.flush();fos.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);Uri uri = Uri.fromFile(file);intent.setData(uri);getActivity().sendBroadcast(intent);Toast.makeText(getActivity(),"图片保存成功",Toast.LENGTH_SHORT).show();}}

PhotoFragmentAdapter

public class PhotoFragmentAdapter extends FragmentPagerAdapter{private List<Fragment> fragmentList;public PhotoFragmentAdapter(FragmentManager fm,List<Fragment> fragmentList) {super(fm);this.fragmentList = fragmentList;}@Overridepublic Fragment getItem(int position) {return fragmentList.get(position);}@Overridepublic int getCount() {return fragmentList.size();}
}

fragment_img布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><uk.co.senab.photoview.PhotoViewandroid:id="@+id/photoview"android:layout_width="match_parent"android:layout_height="match_parent" /></LinearLayout>

最后 别忘了权限

<uses-permission android:name="android.permission.INTERNET"></uses-permission><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>

完成

源码地址:https://download.csdn.net/download/changyiqiang/10745762

Android中使用PhotoView和ViewPager查看图片,并保存到本地相关推荐

  1. Android实现将View转化为图片并保存到本地

    一.概述 app中有需求需要将View转化为图片并保存到本地,这里分两种情况: 1.View本身已经显示在界面上 2.View还没有添加到界面上或者没有显示(绘制)过 二.实现方法 对于上述的第一种情 ...

  2. python 编写一段自动下载微信群的聊天记录中的图片并保存到本地的代码

    以下是一段简单的 Python 代码,可以自动下载微信群聊天记录中的图片并保存到本地: import requestsdef download_image(url, file_name):respon ...

  3. (Metro学习三)图片uri保存到本地图片库

    已知网络上图片的uri地址,如何将网络图片保存到本地呢?代码如下: 保存图片到本地 private async Task SaveImageFromUrl(string uri, string fil ...

  4. php curl 下载图片,CURL实现下载远程图片并保存到本地

    WEB开发中我们经常使用一些简单的采集功能,这样可以自动把远程服务器的图片或资源直接采集保存到本地服务器中:实现下载远程图片并把它保存到本地有很多方法,比如可以直接能过file_get_content ...

  5. python save保存图片到本地_python爬取网站上的图片并保存到本地

    1.导入需要的模块requests,BeautifulSoup,os(用于文件读写). 2.创建一个类,并初始化. class BeautifulPicture: def __init__(self) ...

  6. [转]使用URLConnection下载文件或图片并保存到本地

    Code import java.io.FileOutputStream;    import java.io.InputStream;    import java.io.OutputStream; ...

  7. php 远程图片大小,PHP下载远程图片并保存到本地方法总结

    这篇文章主要介绍了PHP下载远程图片并保存到本地方法总结的相关资料,需要的朋友可以参考下 1.获取远程文件大小及信息的函数 function getFileSize($url){ $url = par ...

  8. python爬虫网页图片并保存到本地

    #coding=utf-8 import urllib import re #py抓取页面图片并保存到本地 #获取页面信息 def getHtml(url): page = urllib.urlope ...

  9. 简单的图片爬取,爬取豆瓣电影图片并保存到本地

    文章目录 前言 一.前提准备 1.对页面进行分析 2.准备框架 二.代码实现 三.总结 前言 这是本人第一次写博客,如有失误请见谅.这段时间,由于疫情原因,在家无聊,再加上这学期要学习爬虫这们课程.所 ...

最新文章

  1. mybaits六:参数处理
  2. vivo硬件测试员干什么的_vivo的新年礼物:用APEX 2019告诉你5G旗舰机该长啥样
  3. String path = request.getContextPath
  4. 代码描述10911 - Forming Quiz Teams
  5. C++之unique_ptr
  6. linux nfs文件共享
  7. Nacos 服务治理(服务注册中心)
  8. 第七章 变量进阶与点阵LED 练习题
  9. redspider无法启动,并行配置不正确
  10. Evolutionary Clustering of Streaming Trajectories
  11. 中国手机企业库存高达6000万,市场正常后或大规模降价促销
  12. 最新-手把手教Unity2017.3 Android Studio3.0.1 SDK接入教程含jdk和sdk环境配置
  13. UCOS-III笔记
  14. DevExpress 控件使用菜单栏之BarManager
  15. php图片点阵,HTML5边玩边学(八)-砖块贴图点阵字
  16. Unity第一人称手游-左侧控制移动,右侧控制视角和方向(第一人称,类似吃鸡游戏)
  17. 万向区块链小课堂:超短文梳理区块链层级,字字珠玑
  18. 【单片机实验】扬声器实验
  19. apt upgrade与 apt dist-upgrade的区别
  20. 成长就是从认识到自己的无知而开始的

热门文章

  1. 分布式datax CDC架构设计
  2. Windows快速配置路由,同时使用内网和外网
  3. 华为笔记本怎么下载python_华为官方解析何为Python爬虫 小白看过来
  4. python迁移到另一台电脑上网_Python虚拟环境导出包安装到另一台电脑的方法
  5. 石油大 Contest1777 - 2019年第二阶段我要变强个人训练赛第九场 I 热狗树(树形dp)
  6. rosegarden教程_使用数字音频工作站Rosegarden制作优美的音乐
  7. python 仪表数字识别_利用Python进行数字识别
  8. shineblink ZE08K-CH2O甲醛测量
  9. 项目管理者应具备的能力
  10. Android开源音频编辑工具ringdroid