图片加载和处理的又一个神器 Fresco 的使用摘要记录

2016年Android开发工具链与架构演进深度解析 Android开发工具链的演进是移动应用开发效率提升的关键。从基础组件到架构设计,技术选型直接影响工程实践的质量与效率。2016年Android生态迎来重要转折,Retrofit、Glide等框架通过模块化设计解决了网络通信和图片加载等核心问题,而Dagger 2等依赖注入工具则优化了代码结构。这些技术不仅提升了开发效率,更为后续Kotlin、React Native等技术的普及奠定了基础。在电商、社交等高频应用场景中,合理选择工具链组合能显著提升性能表现,如Glide的链式调用完美适配RecyclerVi 阅读详情

官方网站:http://fresco-cn.org/


为什么使用Fresco:
Fresco 会替我们完成,显示占位图直到加载完成,下载图片,缓存图片,图片不再显示时候,从内存中移出;
注意Fresco的图片的宽高一定不能都是wrap_content,如果都是的话就不会显示图片了


0: 首先需要导入Frsco的包
1: 然后需要添加网络的访问权限
++++++++++++++++++++++++++++++++++++


2: 然后新建一个Application 在这个里面执行Fresco.initialize(context)的初始化
3:然后在xml 的布局文件中,加入命名空间
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:fresco="http://schemas.android.com/apk/res-auto"
4:在布局中加入SimpleDraweeView,注意这里的placeholderImage 是用来显示站位图的。
<com.facebook.drawee.view.SimpleDraweeView
    android:id="@+id/my_image_view"
    android:layout_width="20dp"
    android:layout_height="20dp"
    fresco:placeholderImage="@drawable/my_drawable"
  />


5: setImageURI()的方法来添加图片。
剩下的Fresco 会替我们完成,显示占位图知道加载完成,下载图片,缓存图片,图片不再显示时候,从内存中移出。


6:其中setImageURI(),
如果是网络上面的图片直接就是Uri.parse(网址),
如果是包里面的文件就是使用res://mipmap/+R.mipmap.yoyo
如果是android 手机目录中的文件就要使用file:///data/data/com.example.xue.frescodemo/files/345.jpg 注意 file是三条杠




如果需要用到mipmap里面的图片使用:
Uri uri = Uri.parse("res://包名(实际可以是任何字符串甚至留空)/" + R.drawable.ic_launcher)


draweeView_url.setImageURI(Uri.parse("https://material-design.storage.googleapis.com/publish/material_v_4/material_ext_publish/0Bx4BSt6jniD7NndTQW9VZTlZV2s/materialdesign_principles_bold.png"));
draweeView_res.setImageURI(Uri.parse("res://mipmap/"+R.mipmap.yoyo));
draweeView_local.setImageURI(Uri.parse("file:///data/data/com.example.xue.frescodemo/files/345.jpg"));




7:还可以设置进度条:使用的方法是setProgressBarImage
++++++++++++++++++++++++++++++++++++++++++++++



笔记:

如果需要用到mipmap里面的图片使用:
Uri uri = Uri.parse("res://包名(实际可以是任何字符串甚至留空)/" + R.drawable.ic_launcher)

draweeView_url.setImageURI(Uri.parse("https://material-design.storage.googleapis.com/publish/material_v_4/material_ext_publish/0Bx4BSt6jniD7NndTQW9VZTlZV2s/materialdesign_principles_bold.png"));
draweeView_res.setImageURI(Uri.parse("res://mipmap/"+R.mipmap.yoyo));
draweeView_local.setImageURI(Uri.parse("file:///data/data/com.example.xue.frescodemo/files/345.jpg"));


要设置进度条:
要显示进度,最简单的办法就是在 构建 hierarchy 时使用 ProgressBarDrawable,如下:
.setProgressBarImage(new ProgressBarDrawable())
        GenericDraweeHierarchyBuilder builder = new GenericDraweeHierarchyBuilder(getResources());
        GenericDraweeHierarchy genericDraweeHierarchy = builder.setProgressBarImage(new ProgressBarDrawable()).build();


        GenericDraweeHierarchyBuilder builder_res = new GenericDraweeHierarchyBuilder(getResources());
        GenericDraweeHierarchy genericDraweeHierarchy_res = builder_res.setProgressBarImage(new ProgressBarDrawable()).build();


        draweeView_url.setHierarchy(genericDraweeHierarchy);
        draweeView_res.setHierarchy(genericDraweeHierarchy_res);

设置缓存:

/**
 * Created by XUE on 2015/12/30.
 */
public class BaseApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        ImagePipelineConfig config = ImagePipelineConfig.newBuilder(this)
                .setBitmapMemoryCacheParamsSupplier(new Supplier<MemoryCacheParams>() {
                    @Override
                    public MemoryCacheParams get() {


                        return new MemoryCacheParams(20<<20,
                                100,
                                Integer.MAX_VALUE,
                                Integer.MAX_VALUE,
                                Integer.MAX_VALUE
                        );
                    }
                }).setMainDiskCacheConfig(DiskCacheConfig.newBuilder()
                .setMaxCacheSize(50<<20)
                .setBaseDirectoryPath(getCacheDir())
                .setBaseDirectoryName("fresco")
                .build())
                .setBitmapsConfig(Bitmap.Config.RGB_565)
                .build();
        Fresco.initialize(this);
    }
}




引入Fresco

1. Android Studio 或者 Gradle

dependencies {
  compile 'com.facebook.fresco:fresco:0.6.0+'
}

开始使用 Fresco

如果你仅仅是想简单下载一张网络图片,在下载完成之前,显示一张占位图,那么简单使用SimpleDraweeView 即可。

为了下载网络图片,请确保在 AndroidManifest.xml 中有以下权限:

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

在 Application 初始化时,在应用调用 setContentView() 之前,进行初始化:(这里需要自己自定义Application,然后在清单文件中指定)

Fresco.initialize(context);

在xml布局文件中, 加入命名空间:

<!-- 其他元素 -->
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:fresco="http://schemas.android.com/apk/res-auto">

加入SimpleDraweeView:

<com.facebook.drawee.view.SimpleDraweeView
    android:id="@+id/my_image_view"
    android:layout_width="20dp"
    android:layout_height="20dp"
    fresco:placeholderImage="@drawable/my_drawable"
  />

开始加载图片

Uri uri = Uri.parse("https://raw.githubusercontent.com/facebook/fresco/gh-pages/static/fresco-logo.png");
SimpleDraweeView draweeView = (SimpleDraweeView) findViewById(R.id.my_image_view);
draweeView.setImageURI(uri);

剩下的,Fresco会替你完成:

  • 显示占位图直到加载完成;
  • 下载图片;
  • 缓存图片;
  • 图片不再显示时,从内存中移除;

关键概念

Drawees

Drawees 负责图片的呈现,包含几个组件,有点像MVC模式。

DraweeView

继承于 View, 负责图片的显示。

一般情况下,使用SimpleDraweeView 即可. 简单的用法,在这个页面:开始使用 。

它支持很多自定义效果,参见这里: 自定义显示效果.

DraweeHierarchy

DraweeHierarchy 用于组织和维护最终绘制和呈现的Drawable对象,相当于MVC中的M。

如果你想在Java代码中自定义图片的展示,可以通过这类实现,具体的请参考这里: 在Java代码中自定义显示效果

DraweeController

DraweeController 负责和 image loader 交互(默认是Fresco中 image pipeline),可以创建一个这个类的实例,来实现对所要显示的图片做更多的控制。

DraweeControllerBuilder

DraweeControllers 由 DraweeControllerBuilder 采用 Builder 模式创建,创建之后,不可修改。具体参见: 使用ControllerBuilder。

Listeners

使用 ControllerListener 的一个场景就是设置一个 Listener监听图片的下载。

Image Pipeline

Fresco 的 Image Pipeline 负责图片的获取和管理。图片可以来自远程服务器,本地文件,或者Content Provider,本地资源。压缩后的文件缓存在本地存储中,Bitmap数据缓存在内存中。

在5.0系统以下,Image Pipeline 使用`pinned purgeables*将Bitmap数据避开Java堆内存,存在ashmem中。这要求图片不使用时,要显式地释放内存。

SimpleDraweeView 自动处理了这个释放过程,所以没有特殊情况,尽量使用SimpleDraweeView,在特殊的场合,如果有需要,也可以直接控制Image Pipeline。

ImageRequest

ImageRequest存储着Image Pipeline处理被请求图片所需要的有用信息(Uri、是否渐进式图片、是否返回缩略图、缩放、是否自动旋转等。)。

它仅仅用来装信息,而且一经初始化后就无法改变内容(即Immutable,不过可以获取内容)。 并且它的初始化只能通过ImageRequest.fromUri(Uri uri)或ImageRequestBuilder.build()来实现。

SimpleDraweeView调用setUri(Uri)会产生一个默认的ImageRequest含有指定Uri信息,如果需要修改ImageRequest其他信息,必须手动创建ImageRequest,并在PipelineDraweeControllerBuilder调用.build()之前使用.setImageRequest设置它。



支持的URIs

Fresco 支持许多URI格式。

特别注意:Fresco 不支持 相对路径的URI. 所有的URI都必须是绝对路径,并且带上该URI的scheme。

如下:

类型Scheme示例
远程图片http://, https://HttpURLConnection 或者参考 使用其他网络加载方案
本地文件file://FileInputStream
Content providercontent://ContentResolver
asset目录下的资源asset://AssetManager
res目录下的资源res://Resources.openRawResource

res 示例:

Uri uri = Uri.parse("res://包名(实际可以是任何字符串甚至留空)/" + R.drawable.ic_launcher);


注意,只有图片资源才能使用在Image pipeline中,比如(PNG)。其他资源类型,比如字符串,或者XML Drawable在Image pipeline中没有意义。所以加载的资源不支持这些类型。

像ShapeDrawable这样声明在XML中的drawable可能引起困惑。注意到这毕竟不是图片,如果想把这样的drawable作为图像显示。

那么把这个drawable设置为占位图,然后把URI设置为null。



在XML中使用Drawees

Drawees 具有极大的可定制性。

下面的例子给出了可以配置的各种选项:

<com.facebook.drawee.view.SimpleDraweeView
    android:id="@+id/my_image_view"
    android:layout_width="20dp"
    android:layout_height="20dp"
    fresco:fadeDuration="300"
    fresco:actualImageScaleType="focusCrop"
    fresco:placeholderImage="@color/wait_color"
    fresco:placeholderImageScaleType="fitCenter"
    fresco:failureImage="@drawable/error"
    fresco:failureImageScaleType="centerInside"
    fresco:retryImage="@drawable/retrying"
    fresco:retryImageScaleType="centerCrop"
    fresco:progressBarImage="@drawable/progress_bar"
    fresco:progressBarImageScaleType="centerInside"
    fresco:progressBarAutoRotateInterval="1000"
    fresco:backgroundImage="@color/blue"
    fresco:overlayImage="@drawable/watermark"
    fresco:pressedStateOverlayImage="@color/red"
    fresco:roundAsCircle="false"
    fresco:roundedCornerRadius="1dp"
    fresco:roundTopLeft="true"
    fresco:roundTopRight="false"
    fresco:roundBottomLeft="false"
    fresco:roundBottomRight="true"
    fresco:roundWithOverlayColor="@color/corner_color"
    fresco:roundingBorderWidth="2dp"
    fresco:roundingBorderColor="@color/border_color"
  />
必须设置layoutwidth和layoutheight

如果没有在XML中声明这两个属性,将无法正确加载图像。

wrap_content

Drawees 不支持 wrap_content 属性。

所下载的图像可能和占位图尺寸不一致,如果设置出错图或者重试图的话,这些图的尺寸也可能和所下载的图尺寸不一致。

如果大小不一致,图像下载完之后,假设如果是wrap_content,View将会重新layout,改变大小和位置。这将会导致界面跳跃。

固定宽高比

只有希望显示的固定宽高比时,可以使用wrap_content。

如果希望显示的图片保持一定宽高比例,如果 4:3,则在XML中:

<com.facebook.drawee.view.SimpleDraweeView
    android:id="@+id/my_image_view"
    android:layout_width="20dp"
    android:layout_height="wrap_content"
    <!-- other attributes -->

然后在代码中指定显示比例:

mSimpleDraweeView.setAspectRatio(1.33f);


在JAVA代码中使用Drawees

设置或更改要显示的图片

mSimpleDraweeView.setImageURI(uri);

如果要更加复杂的配置,可使用ControllerBuilder;

自定义显示图

一般情况下,在XML设置显示效果即可, 如果想更多定制化,可以这样:

创建一个 builder 然后设置给 DraweeView:

List<Drawable> backgroundsList;
List<Drawable> overlaysList;
GenericDraweeHierarchyBuilder builder =
    new GenericDraweeHierarchyBuilder(getResources());
GenericDraweeHierarchy hierarchy = builder
    .setFadeDuration(300)
    .setPlaceholderImage(new MyCustomDrawable())
    .setBackgrounds(backgroundList)
    .setOverlays(overlaysList)
    .build();
mSimpleDraweeView.setHierarchy(hierarchy);

对于同一个View,请不要多次调用setHierarchy,即使这个View是可回收的。创建 DraweeHierarchy 的较为耗时的一个过程,应该多次利用。

如果要改变所要显示的图片可使用setController 或者 setImageURI。

修改 DraweeHierarchy

DraweeHierarchy 的一些属性可以在运行时改变。

要改变这些属性,首先获取一个引用:

GenericDraweeHierarchy hierarchy = mSimpleDraweeView.getHierarchy();
修改占位图

修改占位图为资源id:

hierarchy.setPlaceholderImage(R.drawable.placeholderId);

或者修改为一个 Drawable:

Drawable drawable; 
// 创建一个drawable
hierarchy.setPlaceholderImage(drawable);
修改显示的图像

修改缩放类型:

hierarchy.setActualImageScaleType(ScalingUtils.ScaleType.CENTER_INSIDE);

当然,如果修改为 focusCrop, 需要指定一个居中点:

hierarchy.setActualImageFocusPoint(point);

或者设置一个color filter:

ColorFilter filter;
// 创建filter
hierarchy.setActualImageColorFilter(filter);
圆角

All of the rounding related params, except the rounding method, can be modified. You get aRoundingParams object from the hierarchy, modify it, and set it back again:

除了圆角显示方式(原来为圆角的不能修改为圆圈,反之亦然),其他圆角相关的呈现参数,具体参见这里 是可以动态修改的。

如下: 获取DraweeHierarchy的圆角显示参数,修改圆角半径为10。

RoundingParams roundingParams = hierarchy.getRoundingParams();
roundingParams.setCornersRadius(10);
hierarchy.setRoundingParams(roundingParams);

Drawee的各种效果配置编辑和纠错

内容导航

定义

本页说明如何设置实现不同的图片呈现效果。

除了要加载的图片,其他各个设置都可以在xml中指定。在xml中指定的时候,可以是drawable/下的资源,也可以颜色。

在Java 代码中也可以指定。如果需要 通过程序设定 的话会接触到这个类:GenericDraweeHierarchyBuilder

通过代码设置是,设置的值可以是资源id,也可以是Drawable的子类。

创建完GenericDraweeHierarchy之后,也可以通过该类的相关方法,重新设置一些效果。

大多数的用户呈现不同效果的drawables都是可以缩放的.

设置要加载的图

除了需要加载的图片是真正必须的,其他的都是可选的。如前所述,图片可以来自多个地方。

所需加载的图片实际是DraweeController的一个属性,而不是DraweeHierarchy的属性。

可使用setImageURI方法或者通过设置DraweeController 来进行设置。

对于要加载的图片,除了可以设置缩放类型外,DraweeHierarchy 还公开出一些其他方法用来控制显示效果:

默认的缩放类型是: centerCrop

占位图(Placeholder)

在调用setController 或者 setImageURI 之后,占位图开始显示,直到图片加载完成。

对于渐进式格式的JPEG图片,占位图会显示直到满足已加载的图片解析度到达设定值。

XML 中属性值: placeholderImage
Hierarchy builder中的方法: setPlaceholderImage
Hierarchy method: setPlaceholderImage
默认值: a transparent ColorDrawable
默认缩放类型: centerInside

设置加载失败占位图

如果URI是无效的,或者下载过程中网络不可用,将会导致加载失败。当加载图片出错时,你可以设置一个出错提示图片。

XML 中属性值: failureImage
Hierarchy builder中的方法: setFailureImage
默认值: The placeholder image
默认缩放类型: centerInside

点击重新加载图

在加载失败时,可以设置点击重新加载。这时提供一个图片,加载失败时,会显示这个图片(而不是失败提示图片),提示用户点击重试。

在ControllerBuilder 中如下设置:

.setTapToRetryEnabled(true)

加载失败时,image pipeline 会重试四次;如果还是加载失败,则显示加载失败提示图片。

XML 中属性值: retryImage
Hierarchy builder中的方法: setRetryImage
默认值: The placeholder image
默认缩放类型: centerInside

显示一个进度条

如果设置一个进度条图片,提示用户正在加载。该图片会覆盖在 Drawee 上直到图片加载完成。

如果需要自定义,更详细的情况,请参考 进度条页面

XML 中属性值: progressBarImage
Hierarchy builder中的方法: setProgressBarImage
默认值: None
默认缩放类型: centerInside

背景

背景图会最先绘制,在XML中只可以指定一个背景图,但是在JAVA代码中,可以指定多个背景图。

当指定一个背景图列表的时候,列表中的第一项会被首先绘制,绘制在最下层,然后依次往上绘制。

背景图片不支持缩放类型,会被强制到Drawee尺寸大小。

XML 中属性值: backgroundImage
Hierarchy builder中的方法: setBackground, setBackgrounds
默认值: None
默认缩放类型: N/A

设置叠加图(Overlay)

叠加图会最后被绘制。

和背景图一样,XML中只可以指定一个,如果想指定多个,可以通过JAVA代码实现。

当指定的叠加图是一个列表的时候,列表第一个元素会被先绘制,最后一个元素最后被绘制到最上层。

同样的,不支持各种缩放类型。

XML 中属性值: overlayImage
Hierarchy builder中的方法: setOverlay, setOverlays
默认值: None
默认缩放类型: N/A

设置按压状态下的叠加图

同样不支持缩放,用户按压DraweeView时呈现。

XML 中属性值: pressedStateOverlayImage
Hierarchy builder中的方法: setPressedStateOverlay
默认值: None
默认缩放类型: N/A



进度条

要显示进度,最简单的办法就是在 构建 hierarchy 时使用 ProgressBarDrawable,如下:

.setProgressBarImage(new ProgressBarDrawable())

这样,在 Drawee 的底部就会有一个深蓝色的矩形进度条。

自定义进度条

如果你想自定义进度条,请注意,如果想精确显示加载进度,需要重写Drawable.onLevelChange:

class CustomProgressBar extends Drawable {
   @Override
   protected void onLevelChange(int level) {
     // level is on a scale of 0-10,000
     // where 10,000 means fully downloaded

     // your app's logic to change the drawable's
     // appearance here based on progress
   }
}

安卓逆向实战:从协议分析到算法还原,以漫画App为例 在移动应用开发和安全研究领域,理解客户端与服务器的通信协议是核心技能之一。其基本原理在于,客户端通过构造特定格式的请求与服务器交互,而服务器则通过验证签名等机制确保请求的合法性与完整性。这项技术的价值在于,它不仅是进行安全审计、漏洞挖掘的基础,也是实现自动化数据采集、理解应用架构的关键。在实际应用场景中,如分析内容类App的数据加载流程,常涉及对网络请求签名算法和资源加密逻辑的逆向分析。本次探讨聚焦于**安卓逆向**和**协议分析**,通过一个典型漫画App的案例,详细拆解了从抓包、反编译到使用Frida动 阅读详情

相关推荐

Apple Pencil 终极指南:从选型到高阶技巧,释放 iPad 生产力

在数字创作与移动办公领域,压感与精准输入是提升效率的核心技术。压感技术通过识别下笔力度,模拟真实笔触的粗细浓淡,为数字绘画和手写笔记带来自然表现力。这项技术结合低延迟与高精度,构成了现代触控笔的硬件基础,其价值在于弥合了传统纸笔书写与数字设备之间的体验鸿沟。在无纸化办公、在线教育、创意设计等场景中,一支好的触控笔能显著提升内容采集、编辑和创作的流畅度。本文以 Apple Pencil 与 iPad 的深度整合为例,深入解析如何通过软硬件搭配与个性化设置,构建高效的无纸化工作流,并涵盖笔记管理、绘画设计等主流

weixin_30448603的博客 433

Android图片缓存框架 - Fresco的GenericDraweeHierarchy (五)

目录 1.Fresco 简介 2. Fresco 文档 3. Fresco开发步骤 4. Fresco加载图片6种方式 5. Drawees xm属性设置 6 Fresco实现圆角或圆形图片 7. DraweeHierarchy设置 7.1 DraweeHierarchy简介 7.2 设置占位图 7.3 设置加载失败图片 7.4 设置淡入淡出 7.5 设置图片缩放类型 7...

牛八少爷的专栏 1515

金蝶云星空应用开发初级考试题目汇总

摘要:本文为金蝶云星空应用开发初级考试题目汇总

2401_86113757的博客 3799

Fresco网络图片加载

Fresco 内存管理 Fresco 的最大亮点在于它的内存管理。解压后的图片,即 Android 中的 Bitmap ,占用大量的内存,在 Android 5.0以下系统中,这会显著地引发界面卡顿。而使用 Fresco 将很好地解决这个问题,Fresco 会将图片放到一个特别的内存区域,当图片不再显示的时候,占用的内存会自动被释放,这会使得 APP 更流畅,减少因图片内存占用而引发的 OOM...

stapan的博客 1045

【CTFhub】——hate_php2021

【CTFhub】——hate_php2021

manerzi的博客 1605

【商业化】【msix打包】Python 应用打包为 MSIX 的正确流程:入口点问题与解决方案

发现用msix打包工具打包python做的exe时总找不到程序入口点,后来理了一下才发现自己误会了,需要先生成一个基本的setup.exe,msix的打包是基于这个初始的安装程序进行的。只需要点击Buile-》Compile,然后Open Output Folder就可以得到exe安装程序了。可以使用免费工具inno setup来创建初始安装包。其中{group}这样的变量会自动匹配,不用自己指定。如果点击Run会运行安装程序。

每日出拳老爷子的博客 1103

Android图片加载神器之Fresco-更灵活的设置加载特效[Java代码实现XML效果]

GenericDraweeHierarchy 百学须先立志—学前须知: 之前我们学会了如何在XML中设置各项特效的属性,可是在日常开发中,我们的需求是变化莫测的,不可能是提前在XML声明好,也不是所有的控件都写在XML里面;于是用Java代码控制各项特效属性就显得格外重要,掌握这一重要技能势在必得! 尽信书,不如无书—能学到什么? 1、DraweeHierarchy 

LUFANZHENG的专栏 1418

Python-OpenCV及cv2,numpy库最新安装教程[最全步骤]

安装教程目录前言OpenCV-Python安装教程报错解决cv2安装numpy安装opencv安装(附加)总结 前言 首先,我知道一些看到我的Blog的人已经在网上找了很多歪路子,现在已经火冒三丈了(我也是这样过来的hhhh),那么现在,深呼吸,跟着我的教程,不要着急,每一步都要读一遍。完整安装过程需要1个小时左右(仅供参考,本人第一次安装python花了一天(确信)) OpenCV-Python...

qq_45425286的博客 7430

图片加载框架之图片加载框架选型(一)下篇

阿里P7移动互联网架构师进阶视频(每日更新中)免费学习请点击:https://space.bilibili.com/474380680 本篇文章将通过Picasso分析、Fresco的使用来阐述图片加载框架选型: 一、 Picasso分析 <meta charset="utf-8"> Picasso是Square公司开源的一个Android平台上的图片加载框架 ...

AndroidAlvin的博客 308

RagFlow实战:如何用DeepDoc引擎高效处理扫描PDF文档(附完整代码解析)

本文详细解析了如何利用RagFlow的DeepDoc引擎高效处理扫描PDF文档。通过实战演示从环境搭建、PDF预处理、文本检测与识别,到布局分析与表格结构提取的完整流程,并提供了完整的代码实现。该方案超越了传统OCR,能输出保留原始版面信息的结构化数据,为构建高质量知识库提供了强大支持。

weixin_29245767的博客 299

PPT高清导出秘籍:如何轻松设置600dpi图片分辨率

本文详细解析了PPT导出图片模糊的根本原因,并提供了通过修改Windows注册表将导出分辨率从默认的96dpi提升至600dpi的完整教程。该方法能显著提升图片清晰度,满足学术出版与高质量印刷需求,文中还包含效果对比、进阶设置及常见问题解答。

a0b1c2d3的专栏 1313

Fresco用法总结基础篇

Fresco是Facebook最新推出的一款用于Android应用中展示图片的强大图片库,可以从网络、本地存储和本地资源中加载图片。相对于ImageLoader,拥有更快的图片下载速度以及可以加载和显示gif图等诸多优势,是个很好的图片框架。PS:毕竟是facebook开源的,我说差也不会有人相信,还是夸夸吧! github地址:https://github.com/facebook/fresc

wl1769127285的专栏 1万+

强网杯Web题ezphp解题全记录:利用PHP反序列化与条件竞争拿下服务器

本文详细解析了强网杯Web题目ezphp的解题过程,通过PHP反序列化与条件竞争漏洞的组合利用,成功获取服务器权限。文章深入剖析了反序列化链的构造、文件上传绕过技巧以及条件竞争的实际应用,为CTF选手和Web安全研究者提供了宝贵的实战经验。

weixin_29006187的博客 376

3分钟掌握微信聊天记录永久保存:WeChatMsg完全指南

你是否曾经因为误删微信聊天记录而懊悔不已?那些与家人朋友的温馨对话、工作中的重要沟通、生活中的珍贵瞬间,难道就只能随着时间流逝而消失吗?今天,我要向你介绍一款能够彻底解决这个痛点的神奇工具——WeChatMsg。这是一款完全免费、开源的专业工具,专为Mac用户设计,让你轻松实现微信聊天记录的永久保存、智能分析和可视化展示。无论你是普通用户还是技术爱好者,都能在短短几分钟内掌握这个强大的数据守护神器

gitblog_01163的博客 325

【CSP-S 提高组】考试大纲集合

【CSP-S提高组】考试大纲集合

weixin_42596089的博客 7254

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Android漫画阅读神器Cimoc:35个源聚合与智能阅读体验

在移动设备成为主流阅读载体的今天,漫画爱好者面临着资源分散、体验不佳的困扰。Cimoc作为开源Android漫画阅读器,通过技术创新解决了这一痛点,让用户在一个应用中即可享受全网漫画资源。 ## 阅读体验的革命性突破 传统漫画应用往往受限于单一平台,而Cimoc实现了**多源聚合阅读**的革命性突破。应用整合了35个主流漫画平台的解析能力,从动漫之家到汗汗漫画,从57漫画到吹妖漫画,覆盖了市面

gitblog_01181的博客 1568

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

hongyangWeixinArticles性能优化专题:让你的App飞起来的10个技巧

在Android开发领域,**性能优化**是每个开发者必须掌握的核心技能。鸿洋的微信公众号文章集合hongyangWeixinArticles中包含了大量关于Android性能优化的实战经验和技术分享。今天,我们将从这些宝贵的文章中提炼出10个让你的App飞起来的**性能优化技巧**,帮助新手和普通开发者快速掌握Android应用优化的精髓。 ## 📊 为什么性能优化如此重要? **Andr

gitblog_00096的博客 823

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

OptiScaler终极指南:3步实现跨显卡游戏画质优化神器

你是否曾因显卡品牌限制而无法体验心仪游戏的最佳画质?是否在NVIDIA、AMD、Intel三大阵营间感到选择困难?今天,让我为你介绍一款革命性的游戏优化工具——OptiScaler,它能打破显卡技术壁垒,让你的游戏体验实现质的飞跃! ## 🔍 什么是OptiScaler? 想象一下,你有一台翻译机,能把中文翻译成英文、日文、法文等多种语言。OptiScaler就是游戏世界的"翻译官",它能在

gitblog_00848的博客 417

2026年MacBook用户转向Windows笔记本选购与Boot Camp安装全攻略

最近在帮朋友选笔记本时,发现一个挺普遍的现象:很多习惯了 macOS 生态的用户,因为预算、特定软件兼容性或者想体验更开放的硬件生态,开始考虑转向 Windows 平台。特别是面对传闻中的“MacBook Neo”这类未来概念产品时,与其等待,不如在当下成熟的 Windows 阵营里找到更务实、更具性价比的替代品。无论是学生党、职场新人,还是追求极致性能的创作者和开发者,Windows 笔记本市场都提供了极其丰富的选择。 本文将为你系统梳理 2026 年这个时间节点下,从入门到旗舰的五款代表性 Window

458

[问题解决]Fresco设置圆角效果不生效问题探究

[问题解决]Fresco设置圆角效果不生效问题探究 /** * Created by diql on 2017/2/21 11:07:04. */ 问题 在View中设置: fresco:roundedCornerRadius="3dp" 发现根本就看不到圆角效果,为了确定,设置为”180dp”,发现也没有生效,确定了问题的产生。 ...

weixin_30809333的博客 527

Fresco简介

简介:由Facebook最新推出的一款用于Android应用中展示图片的强大图片库,采用MVC设计模式。(被誉为最好的图片处理框架,facebook出品,必出精品) 优势:底层直接用的是C语言,所以对于内存的管理特别强大,一张图片如果 picasso 来处理要用80%的话,那么fresco只占40%,必须使用它的自定义控件,设置src属性,可以直接引用GIF...,各方面都不用管的.一句话越

PowerSen的博客 1480

Fresco的使用

1.首先按照需求导入相应的依赖 /*Fresco的基础依赖*/(必须导入) implementation 'com.facebook.fresco:fresco:0.14.1' /*Fresco的GIF功能的依赖*/(实现gif动图功能) implementation 'com.facebook.fresco:animated-gif:0.14.1' 2.在Application中初始化...

大可爱的小可爱 746

【安卓】Fresco动态设置占位图

本来觉得没必要写,但是大概百度了一下,发现并不太好找这个方法,就写一个吧,手动滑稽.png SimpleDraweeView pic; GenericDraweeHierarchy hierarchy = pic.getHierarchy(); //设置占位图 hierarchy.setPlaceholderImage(占位图ID); ...

WWGtest的博客 1344

五、Fresco——ScaleType focusCrop属性详解

我们可以通过 fresco:actualImageScaleType="focusCrop"来设置图片的ScaleType为focusCrop,与ImageView.ScaleType有哪些区别呢? - 添加focusCrop类型 - 没有matirx类型除此之外,其他类型两者都一样,包括center、centerCrop、centerInside、fitCenter 等等。focusCro

Daipanhua的专栏 1万+

android Fresco图片加载框架初始化详细配置

写在前面 很久以前在有道云笔记上写的笔记,打算放弃它了,将笔记迁移到这里来。文章可能还有很多不足,请大家谅解,欢迎大佬提意见。 本文使用到的东西 android studio fresco 1.正文 Fresco初始化详细配置 package com.facebook.fresco.sample.configs; import android.content.Context; import...

玖涯博客 932

四、Fresco——Drawee Image属性详解

定义这篇文章概述了能在Drawee中显示的图形的种类,并且该如何 设置它们。 除了实际的图片,Drawee的所有属性都能在xml中设置,xml中的Image属性值要么是Android drawable,要么是color resource。 同时,也能通过GenericDraweeHierarchyBuilder类的方法设置Image,Image可以是资源图片或drawable的子类,少数

Daipanhua的专栏 1794
上一篇: Retrofit是一个不错的网络请求库
下一篇: Windows7内置搜索,同时搜索文件名以及文件里面的内容
千雅爸爸
博客等级 码龄18年 292粉丝 639原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值