Ahab's Studio.

Glide 源码分析 - 加载图片到通知栏和应用小部件中

字数统计: 315阅读时长: 1 min
2019/02/17 Share

上面说到的下载、预加载主要通过 RequestFutureTarget、PreloadTarget 实现,平时使用 Glide 直接加载图片到 ImageView 的方式则是通过 ImageViewTarget,Glide 中还提供了 NotificationTarget 和 AppWidgetTarget 来实现加载图片到通知栏和应用小部件中。使用方法十分简单,下面列出加载图片到通知栏的实现示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/**
* 加载图片到通知栏
*/
private void loadNotificationImg() {
//构建一个通知栏
final int NOTIFICATION_ID = 1;
final RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.remoteview_notification);
rv.setImageViewResource(R.id.iv, R.mipmap.ic_launcher);
rv.setTextViewText(R.id.tv, "Short Message");
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(context, "channel_id")
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle("Content Title")
.setContentText("Content Text")
.setContent(rv)
.setPriority(NotificationCompat.PRIORITY_HIGH);
final Notification notification = mBuilder.build();
notification.bigContentView = rv;
NotificationManager service = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
service.notify(NOTIFICATION_ID, notification);

//加载图片到通知栏
NotificationTarget notificationTarget = new NotificationTarget(
context,
R.id.iv,
rv,
notification,
NOTIFICATION_ID);
Glide.with(context).asBitmap().load(imgUrl).into(notificationTarget);
}

实际的更新方法封装于 NotificationTarget 中:

1
2
3
4
5
6
7
8
9
/**
* Updates the Notification after the Bitmap resource is loaded.
*/
private void update() {
NotificationManager manager =
(NotificationManager) this.context.getSystemService(Context.NOTIFICATION_SERVICE);
Preconditions.checkNotNull(manager)
.notify(this.notificationTag, this.notificationId, this.notification);
}

通过 AppWidgetTarget 加载图片到应用小部件中与此类似,这些均继承自 Target 接口,了解原理后,我们可以自定义 Target 来随意的定制功能了。

关注公众号,Get 更多知识点

原文作者:Ahab

原文链接:http://yhaowa.gitee.io/693b387a/

发表日期:February 17th 2019, 4:23:48 pm

更新日期:April 7th 2020, 11:34:42 pm

版权声明:本文采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可

CATALOG