FrescoImageView

Introduction: FrescoImageView 是一种 Android 平台的图像控件,可以异步加载网络图片、项目资源和本地图片,并且支持双指缩放、gif 动画、圆形圆角、图片的基本处理以及 Fresco 的所有特性。
More: Author   ReportBugs   
Tags:
图片缓存-动画-图片加载-Fresco-

FrescoImageView 是一种 Android 平台的图像控件,可以异步加载网络图片、项目资源和本地图片,并且支持双指缩放、图片的基本处理以及 Fresco 的所有特性。

该控件基于 Facebook 的图像加载库 Fresco 封装,Fresco 的所有方法和属性都可以使用。

Fresco-ImageView 本身继承自 DraweeView,所以可以直接把它当作 DraweeView 使用,除使用控件封装的加载方法外还可以通过 Fresco 原始的 ImageRequest 来加载图片。

特性

  • 直接继承 Fresco 的 DraweeView,本质是 View,同时兼容 Fresco 的所有参数和方法
  • 加载图片只需一步,无需繁杂的设置
  • 支持双指缩放,并且支持点击事件,替代 PhotoView 的控件

Project site: https://github.com/HomHomLin/FrescoImageView.

最新版本:v1.3.0

导入项目

Gradle dependency:

compile 'homhomlin.lib:frescoimageview:1.3.0'

or

Maven dependency:

<dependency>
  <groupId>homhomlin.lib</groupId>
  <artifactId>frescoimageview</artifactId>
  <version>1.3.0</version>
</dependency>

用法

导入 Fresco

在项目导入 FrescoImageView 后,还需要导入 Fresco,如下:

compile 'com.facebook.fresco:fresco:0.10.0'

截止至当前 Readme 编写时间,Fresco 的最新版本为 0.10.0。

FrescoImageView 本身并不包含 Fresco,如果你还需要 OKHTTP 请查阅 Fresco 用法或者看这个DEMO

Fresco-0.10.0 与之前版本有所区别,它将 GIF 和 WEBP 的库分离出来,所以如果你的项目使用了 Fresco-0.10.0 并且需要 FrescoImageView 实现 gif 和 webp 的功能,那么请添加以下依赖:

compile 'com.facebook.fresco:animated-webp:0.10.0'
compile 'com.facebook.fresco:animated-gif:0.10.0'

如果需要 Android2.3 版本实现 Gif,需要添加额外依赖:

compile 'com.facebook.fresco:animated-base-support:0.10.0'

配置 Fresco

在项目的 AndroidManifest.xml 中添加网络访问权限(视需求而定),example 中使用了 OkHttp,如果你有需要请参照 example。

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

在项目的 Application 类中配置 Fresco,这里其实是 Fresco 的内容。

public class App extends Application{
    @Override
    public void onCreate() {
        super.onCreate();
        Fresco.initialize(this);
    }
}

添加控件到 XML

在需要添加的界面 xml 中添加组件。

FrescoImageView 提供两种组件,分别是 FrescoImageView(普通控件)和 FrescoZoomImageView(可缩放控件),根据需要添加控件,以下以 FrescoZoomImageView 为例:

<lib.lhh.fiv.library.FrescoZoomImageView
    android:id="@+id/fiv"
    fresco:actualImageScaleType="fitCenter"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

在代码中 find 该组件。

FrescoZoomImageView frescoImageView = (FrescoZoomImageView)findViewById(R.id.fiv);

加载网络图片

调用 void loadView(String url, int defaultResID)方法。

url 表示需要加载的网络图片地址,defaultResID 表示占位图(默认图)。

frescoImageView.loadView(mImgUrl,R.mipmap.ic_launcher);

如果需要先显示默认图,然后加载显示一张低分辨率的图,最后再显示原图,可以使用 void loadView(String lowUrl ,String url, int defaultResID)方法,lowUrl 表示低分辨率图片地址。

加载本地图片

调用 void loadLocalImage(String path, int defaultRes)方法。

path 表示本地图片的绝对路径。

frescoImageView.loadLocalImage(path,R.mipmap.ic_launcher);

加载项目资源

选择以上任意一个方法,非 defaultResId 参数填写为 null 即可。

frescoImageView.loadLocalImage(null,R.mipmap.ic_launcher);

点击监听

如果你使用的是 FrescoZoomImageView,则需要调用 setOnDraweeClickListener(OnClickListener l)方法来设置点击事件的监听。

如果你使用的是 FrescoImageView,则可以直接使用 setOnClicklistener(OnClickListener l)。

开启和关闭 gif 动画

如果你的图片是 gif 类型的,则我们可以控制 FrescoImageView 的 Gif 动画,通过 FrescoImageView 的 setAnim(boolean anim)来控制,默认情况下,我们是开启动画的。

设置圆形

如果你需要将显示的图片变为圆形,则可以通过 asCircle()方法。

frescoImageView.asCircle();

Gif 图片设置为圆形

由于 Fresco 的原因,如果你需要将 gif 设置为圆形,则需要使用 setCircle(int overlay_color)方法,overlay_color 为背景图颜色。

frescoImageView.setCircle(Color.WHITE);

设置圆角

通过 setCornerRadius(float radius)方法,并传入需要的角度即可实现圆角和边角的切割。

frescoImageView.setCornerRadius(10);

设置图像处理器

你可能需要对图片做额外的处理,那么你可以编写一个 Fresco 的 PostProcessor,并通过 setPostProcessor(PostProcessor)方法来设置一个处理器。

frescoImageView.setPostProcessor(postProcessor);

设置是否点击重试加载

有时候图片会加载失败,这时候你可以设置是否允许让用户点击该图片重试加载,通过 setTapToRetryEnabled(boolean tapToRetryEnabled)方法来设置。

frescoImageView.setTapToRetryEnabled(true);

设置图片边框

通过 setBorder(int color, float width)方法来设置。

frescoImageView.setBorder(Color.BLACK, 3.0f);

清除图片圆角属性

也许你曾经设置过图片的圆角属性了,通过 clearRoundingParams()方法可以清除他们来恢复到初始状态。

frescoImageView.clearRoundingParams();

设置加载监听

有时候我们想监听图片加载的情况,通过 setControllerListener(ControllerListener controllerListener)方法可以添加监听。

通过 ControllerListener controllerListener = new BaseControllerListener()可以创建监听器。

frescoImageView.setControllerListener(controllerListener);

其他

FrescoImageView 基于 Fresco 封装,因此 Fresco 的用法同样适用于 FrescoImageView。

同样,FrescoZoomImageView 也支持以上说的 api 和 Fresco 的方法。

具体请看 Fresco:Fresco 的 Github

Developed By

License

Copyright 2016 LinHongHong

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Support Me
Apps
About Me
Google+: Trinea trinea
GitHub: Trinea