一、Fresco简介

Fresco是facebook出品的一款图片加载框架,使用了Fresco之后,不需要再考虑图片的加载和内存占用的问题,堪称图片加载的神器。Fresco将图片存储到一个特殊的区域,避免了OOM。

Fresco:github.com/facebook/fr…

二、使用Fresco实现大图浏览

先上效果图:

效果图

1、需求

  • 点击图片出现大图浏览的界面
  • 背景要全黑
  • 没有状态栏
  • 支持手势放大及拖拽
  • 点击关闭大图浏览

2、功能实现

(1)、引入Fresco和PhotoDraweeView

要实现手势放大和拖拽,还需要引入PhotoDraweeView

PhotoDraweeView:github.com/ongakuer/Ph…

在项目中添加依赖

compile 'com.facebook.fresco:fresco:1.2.0'
compile 'me.relex:photodraweeview:1.1.2'复制代码

(2)、初始化Fresco

创建MyApp,继承自Application,在onCreate()方法中初始化Fresco

public class MyApp extends Application {@Overridepublic void onCreate() {super.onCreate();Fresco.initialize(this);}
}复制代码

在清单文件中指定Application类,

<applicationandroid:name=".MyApp"android:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN"/><category android:name="android.intent.category.LAUNCHER"/></intent-filter></activity>
</application>复制代码

(3)、添加SimpleDraweeView控件

在主页面添加SimpleDraweeView控件,设置下载链接,然后设置点击事件,跳转到图片浏览页面

添加SimpleDraweeView控件

<com.facebook.drawee.view.SimpleDraweeViewandroid:id="@+id/sd_view"android:clickable="true"android:layout_centerInParent="true"android:layout_width="match_parent"android:layout_height="match_parent"/>复制代码

设置下载链接并设置点击事件

public class MainActivity extends AppCompatActivity {private SimpleDraweeView mImageView;private String IMG_URL = "https://juemuren4449.com/uploads/mouse.jpg";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();initData();initEvent();}private void initView() {mImageView = (SimpleDraweeView) findViewById(R.id.sd_view);}private void initData() {mImageView.setImageURI(IMG_URL);}private void initEvent() {mImageView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Intent intent = new Intent(MainActivity.this, ImageViewActivity.class);intent.putExtra("img_url", IMG_URL);startActivity(intent);}});}
}复制代码

(4)、添加PhotoDraweeView控件

在大图浏览布局中添加PhotoDraweeView控件

<me.relex.photodraweeview.PhotoDraweeViewandroid:id="@+id/photoView"android:layout_width="match_parent"android:layout_height="match_parent"/>复制代码

将PipelineDraweeController设置给PhotoDraweeView,并设置点击关闭

public class ImageViewActivity extends Activity {private PhotoDraweeView mPhotoDraweeView;private String img_url;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_image_view);initView();initData();initEvent();}private void initView() {mPhotoDraweeView = (PhotoDraweeView) findViewById(R.id.photoView);}private void initData() {img_url = getIntent().getStringExtra("img_url");if (!TextUtils.isEmpty(img_url)) {PipelineDraweeControllerBuilder controller = Fresco.newDraweeControllerBuilder();controller.setUri(img_url);//设置图片urlcontroller.setOldController(mPhotoDraweeView.getController());controller.setControllerListener(new BaseControllerListener<ImageInfo>() {@Overridepublic void onFinalImageSet(String id, ImageInfo imageInfo, Animatable animatable) {super.onFinalImageSet(id, imageInfo, animatable);if (imageInfo == null || mPhotoDraweeView == null) {return;}mPhotoDraweeView.update(imageInfo.getWidth(), imageInfo.getHeight());}});mPhotoDraweeView.setController(controller.build());} else {Toast.makeText(this, "图片获取失败", Toast.LENGTH_SHORT).show();}}private void initEvent() {//添加点击事件mPhotoDraweeView.setOnPhotoTapListener(new OnPhotoTapListener() {@Overridepublic void onPhotoTap(View view, float x, float y) {finish();}});}
}复制代码

(5)、设置大图浏览Activity的主题

在清单文件中设置ImageViewActivity的主题为全屏

<activityandroid:name=".ImageViewActivity"android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen">
</activity>复制代码

至此,我们就使用Fresco实现了大图浏览的功能

注意:如果使用上面的方法,那么ImageViewActivity要继承自Activity,当然也可以通过其他方式实现全屏,例如自定义主题样式。

代码已上传至Github:github.com/juemuren444…

欢迎访问我的博客:juemuren4449.com/

使用 Fresco 实现大图浏览(支持手势放大、拖拽)相关推荐

  1. android 手势放缩_手把手教你打造支持手势放大缩小的ImageView

    写在前面 最近有了新的任务,学习的时间比以前少了不少,Java回炉的文估计是得缓缓了,不过每周一篇尽量保质保量.最近感觉我文写的有点不好,因为我写东西除非必要,不然概念性的东西我基本上都是一笔带过-- ...

  2. Swift开发:仿Clear手势操作(拖拽、划动、捏合)UITableView

    2019独角兽企业重金招聘Python工程师标准>>> 这是一个完全依靠手势的操作ToDoList的演示,功能上左划删除,右划完成任务,拖拽调整顺序,捏合张开插入. 项目源码: ht ...

  3. winform自定义窗体边框样式模板(支持四周边框拖拽改变窗体大小,支持鼠标拖动头部移动窗体)

    winform自己的边框已经过时,但小伙伴们又觉得自定义太过麻烦.本文将手把手教你自定义winform边框样式,并提供源代码链接(可直接作为模板使用).话不多说,直接上操作步骤. 先上一张完成截图 一 ...

  4. QT+GIS+opengl,实现地图瓦片的离线opengl渲染,支持放大拖拽

    地图瓦片需要下载好,在运行opengl时根据你的位置搜索出瓦片中需要的图片,然后进行拼接,因为瓦片的名字是索引,而且每个瓦片的大小都是256像素,其实是可以算出每个像素点的经纬度的,根据屏幕的经纬度4 ...

  5. android+放大缩小图片+有jar嘛,Android相册支持点击放大图片,滑动切换图片,手势放大缩小...

    [实例简介] 项目使用了开源框架Universal-Image-Loader 显示本地图库所有照片 点击放大,单击退出 双击放大缩小 支持左右滑动查看图片 支持手势放大缩小图片 [实例截图] [核心代 ...

  6. 手机端的多图片剪辑上传支持手势支持预览

    上篇PC端的多图片剪辑上传发错地方了...我发下链接点击打开链接 这次基于photoClip找了一个事例,然后改装了一下,使其支持多图片,可控数目,可预览,可剪辑,支持手势放大缩小 <!doct ...

  7. Android开发学习之ImageView手势拖拽、缩放、旋转

    在Android应用中,图片随手势的拖拽.缩放.旋转在很多场景中都会用到,今天我们要做的就是在ImageView的基础上实现一个可以拖拽.缩放.转转的TouchView. 一.实现原理 OnTouch ...

  8. H5头像完整制作,可拖拽缩放,可添加装饰图标(装饰图标支持缩放、旋转、拖拽)

    H5头像制作类的程序本以为到处都可以搜索到,可是真写这个项目的时候才发现太困难了,因为根本没有现成的功能模块可以拼凑,着实费了不少力气,好在最终圆满交工. 还是先看效果 源码获取渠道 小程序内联系客服 ...

  9. 计算机视觉项目:手势拖拽方块和手势控制音量

    项目简介: 电子科技大学中山学院2019级计算机视觉的课程设计 语言:Python 开发工具:Pycharm.Python3.9 库:PyQt.OpenCv.mediapipe 功能: 手势拖拽方块: ...

最新文章

  1. iOS进阶之底层原理-weak实现原理
  2. H3C SecPath防火墙GRE+IPSEC+OSPF典型配置举例
  3. python爬虫 爬取有道翻译详解
  4. python 简历处理_按照这个方式学Python,老板把垃圾桶里的简历舔回来:月薪50000...
  5. 让sourceSafe每天自动备份及修复(适用于vss6.0和vss2005)
  6. 百度昆仑AI芯片已完成研发:明年初量产 由三星代工
  7. 作为90后迈向成为一个优秀的男人系列之二
  8. python 数据框按行拼接_使用python进行数据分析
  9. 微信小程序云开发开源项目:在线捐赠功德箱
  10. linux rpm找不到命令_linux 基础知识
  11. spring如何实现IOC和DI思想?
  12. 如何备份以及恢复Windows系统的环境变量
  13. mysql orm_从MySQL到ORM(二):MySQL基础
  14. 跟这台计算机连接的一个USB设备运行不正常,Windows无法识别
  15. 「BTC之城」的奇幻漂流
  16. import绝对路径问题
  17. HMC5883L常见问题解答
  18. 使用 wireshark 抓本地包
  19. C语言计算数字乘积根,c语言,求任意一个整数各位数字之积
  20. SVG实现超酷素描动画

热门文章

  1. 【香水】区分迪奥小姐Miss Dior中样式相似的几款香水
  2. 【Multisim仿真】运放电路:反相比例运算电路
  3. scrapy ,Selenium 企查查模拟登录
  4. linux :安装中文输入法
  5. 基于JAVA黑白图片和上色处理系统(Springboot框架+AI人工智能) 开题报告
  6. 阿里云大数据——搭建企业级数据分析平台
  7. cogs 740 分配问题
  8. Often Misused: Authentication 一个ip日志你还要我怎样
  9. bt linux wifi,Ubuntu安装无线网卡驱动Wifi/BT BCM4330(AP6383)
  10. Zookeeper:Zookeeper的主从选举机制