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

   

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. 2018-3-28 智能算法-Swarm Intelligence
  2. Angular应用的依赖注入调试
  3. android 字符串替换_Android开发之旅:android架构
  4. 谁需要这件礼物?每一个爱学习的人!
  5. html 中写注释吗,html怎么注释?
  6. 前后端分离 与 不分离
  7. Python 日期时间处理
  8. JSON与JAVA的数据转换
  9. 转:java 进阶之路
  10. 计算机网络实验 网络命令的使用,计算机网络常用网络命令 实验报告.doc
  11. 十个非常实用的PS画笔使用技巧
  12. ADS1278学习总结
  13. ZCS证书的重新签发
  14. 分子运动android,分子热运动
  15. Java练习题__删除公共字符
  16. nasm寄存器xmm[0~8使用]
  17. 客户端表单验证_客户端的表单验证
  18. Python入门(二十三)- 文件操作1
  19. 开发通用资料——常用接口引脚定义
  20. word/latex插入矢量图并导出为pdf

热门文章

  1. 接口自动化测试白盒测试与黑盒测试的区别
  2. BZOJ 4009 HNOI2015 接水果 树套树
  3. 病毒性营销方案策划及复盘
  4. W: Possible missing firmware /lib/firmware/rtl_nic/rtl8125a-3.fw for module r8169
  5. H3C V7MSR路由器定时限速的典型应用配置
  6. 市面上是否有好用的巡防软件
  7. pythonqq音乐爬虫_手把手教你使用Python抓取QQ音乐数据(第二弹)
  8. dialog去除阴影和半透明背景
  9. DVB-S2X 帧结构
  10. 【svn】本地文件夹同步到SVN