0

我有一个扩展 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 中。

4

1 回答 1

2

我有一个扩展 ImageView(称为 PieView)的自定义视图,并且由于这是允许包含在 RemoteViews 中的视图之一,因此理论上应该可以工作。

由于PieViewAndroid中没有,它不能是“允许包含的视图之一RemoteViews”,无论从理论上还是在实践中,它都不起作用。虽然ImageView允许,但不允许子类。

如何解决这个问题?

将您的饼图绘制到 a 上Bitmap,也许是通过 a Bitmap-backed Canvas,然后应用Bitmapusing setImageViewBitmap()on RemoteViews。但是,请记住,整体RemoteViews结构需要相当小(小于 1MB),所以不要让您的位图太大。

于 2013-09-22T14:49:40.083 回答