我有一个扩展 ImageView(称为 PieView)的自定义视图,并且由于这是允许包含在 RemoteViews 中的视图之一,因此理论上应该可以工作。
我正在使用NotificationCompat.Builder
自定义视图向设备的通知栏发送通知,其中包括一个空白 ImageView,我想用我的自定义类(它是 ImageView 的后代)替换它。
这是我用来构建通知的内容:
final PieView pie = new PieView(c);
// My own method that redraws the View using this.invalidate()
pie.setRam(totalRam, freeRam);
pie.setDrawingCacheEnabled(true);
pie.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
pie.layout(0, 0, pie.getMeasuredWidth(), pie.getMeasuredHeight());
pie.buildDrawingCache(true);
Bitmap bitmap = Bitmap.createBitmap(pie.getDrawingCache());
pie.setDrawingCacheEnabled(false);
remoteViews.setImageViewBitmap(R.id.ivPie, bitmap);
mBuilder.setContent(remoteViews);
但是,这会导致java.lang.NullPointerException
以下行:
Bitmap bitmap = Bitmap.createBitmap(pie.getDrawingCache());
我假设视图尚未绘制,因为它没有放置在布局中的任何位置。如何解决这个问题?我很熟悉只支持一部分视图包含在通知的正文中,但肯定有一种方法可以将我的自定义视图预先创建为静态图像并使用 RemoteViews 将其添加到(允许的)ImageView 中。