从 SuperTextView 诞生之初,便始终坚持一个愿景,即帮助 Android 开发者愉悦的去构建一个应用。git
通过一年多的不断的聆听、思考、探索、验证, SuperTextView 完成了屡次迭代,改善了一些问题,新增了一些功能,不断的完善,以带给开发者更好的开发体验。github
现在, SuperTextView 已经具有了诸如圆角、边框、描边、按压变色、多状态图、圆角图、万能的 Adjuster 、加载网络图片等一系列的经常使用功能。得益于此,开发者可以轻松实现各类本来十分麻烦的效果,节省大量的开发时间,有效减小页面的复杂度,下降项目维护成本。bash
写代码,本应如此愉悦!网络
早在几个月前,就开始有不少开发者向 CoorChice 建议,是否可以让 SuperTextView 具有加载网络图片的功能。其实这也是 CoorChice 好久以前就有考虑过的,但在 SuperTextView 的早期,完善其核心功能仍然是首要目标,因此一直没涉猎到图片相关的功能。框架
直到上一个大版本,SuperTextView v2.0,CoorChie 才尝试添加了图片展现的功能。这使得SuperTextView 可以使用的范围获得了扩大,同时针对图片也推出了给图片增长描边、设置圆角、设置状态图等功能。相关使用文档可到如下连接查阅:ide
【你好, SuperTextView】 - https://www.jianshu.com/p/1b91e11e441dsvg
这一次尝试,得到了开发者们不错的反响,你们对于使用 SuperTextView 去展现处理图片是有所期待的。上一个版本发布后,开发者们对于一个能展现网络图片的 SuperTextView 彷佛更加的感兴趣了。布局
那么,如今,你所期待已久的 SuperTextView 在此!this
显示一张网络图片,在 SuperTextView 中只须要以下代码:url
SuperTextView stv_1 = (SuperTextView) findViewById(R.id.stv_1);
//填入图片Url
stv_1.setUrlImage(url);
复制代码
效果就如上图中的第二个显示头像的例子同样。
若是你但愿将网络图片做为 SuperTextView 的 StateDrawable 来展现的话,彻底没问题。
//填入图片Url
stv_1.setUrlImage(url, false);
复制代码
第二个参数为 false 表示网络图片将不会被做为背景充满整个 SuperTextView,而是做为一个状态图。固然,有关状态图的一切配置都将运用到此。就像上图中的第一个例子同样,整个布局包括图片、文字、背景都在一个 SuperTextView 中被处理,从网络下载的图片被做为 StateDrawable 放到了图中的位置。
SuperTextView 为了保持依赖库的纯净和尽量小的体积,并无内置任何的图片加载框架。因此默认状况,将使用内置的一个简易图片引擎去下载图片,确保开发者可以正常使用展现网络图片的功能。
但 CoorChice 仍然建议开发者根据项目的具体状况,选择一个目前正在使用的图片加载框架,设置到 SuperTextView 中,以用来加载图片。 SuperTextView 具有适配任意图片加载框架的能力。下面 CoorChice 将经过 Glide 和 Picasso 的例子展现如何将现有的图片框架安装到 SuperTextView 中。
在 SuperTextView 中,核心的图片加载引擎被抽象成接口 Engine ,开发者须要根据所用的图片框架,实现一个 Engine。
public class GlideEngine implements Engine {
private Context context;
public GlideEngine(Context context) {
this.context = context;
}
@Override
public void load(String url, final ImageEngine.Callback callback) {
Glide.with(context).load(url).into(new SimpleTarget<GlideDrawable>() {
@Override
public void onResourceReady(GlideDrawable resource, GlideAnimation<? super GlideDrawable> glideAnimation) {
// 主要是经过callback返回Drawable对象给SuperTextView
callback.onCompleted(resource);
}
});
}
}
复制代码
public class PicassoEngine implements Engine {
private Context context;
public PicassoEngine(Context context) {
this.context = context;
}
@Override
public void load(String url, final ImageEngine.Callback callback) {
Picasso.with(context).load(url).into(new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
// 主要是经过callback返回Drawable对象给SuperTextView
callback.onCompleted(new BitmapDrawable(Resources.getSystem(), bitmap));
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
});
}
}
复制代码
实现好 Engine 后,下一步就是要将其安装到 SuperTextView 中。
CoorChice 建议能够在 Application的onCreate()
中进行安装,这样当须要使用 SuperTextView 加载显示网络图片的时候,就可以用到三方图片框架了。
public class STVApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
// 安装图片引擎
ImageEngine.install(new GlideEngine(this));
// ImageEngine.install(new PicassoEngine(this));
}
}
复制代码
一行代码,轻松安装。
须要注意的是,任什么时候候,后安装的 Engine 实例老是会替换掉先前安装的 Engine 实例,即 SuperTextView 只容许全局存在一个 Engine 实例。
如今,你可让 SuperTextView 使用指定的三方图片加载框架去加载图片了。
dependencies {
compile 'com.github.chenBingX:SuperTextView:v3.0.0'
}
复制代码
点击这里跳转SuperTextView项目地址。https://github.com/chenBingX/SuperTextView
- 若是你喜欢SuperTextView,但愿能顺手到 Github 点个star以示鼓励哦!
- 抽出空余时间写文章分享须要动力,还请各位看官动动小手点个赞,CoorChice谢谢各位老铁啊😄
- CoorChice一直在不按期的创做新的干货,想要上车只需进到CoorChice的【我的主页】点个关注就行了哦。发车喽~
点击这里跳转SuperTextView项目地址。https://github.com/chenBingX/SuperTextView