在小部件中动态放置位图时,绑定器事务失败

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (15)

谁可以告诉我绑定器事务错误失败的原因吗?我可以在logcat中看到这个错误消息。我在尝试将小部件动态地放入小部件时遇到此错误...

提问于
用户回答回答于

可以将位图压缩为一个字节的数组,然后在另一个活动中解压缩它,如下所示。

压缩!!

        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
        byte[] bytes = stream.toByteArray(); 
        setresult.putExtra("BMP",bytes);

解压!!

        byte[] bytes = data.getByteArrayExtra("BMP");
        Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
用户回答回答于

这是因为RemoteViews的所有更改都是序列化的(例如setInt和setImageViewBitmap)。位图也被序列化成一个内部包。不幸的是,这个包的大小限制很小。

你可以通过这样缩小图像大小来解决这个问题:

 public static Bitmap scaleDownBitmap(Bitmap photo, int newHeight, Context context) {

 final float densityMultiplier = context.getResources().getDisplayMetrics().density;        

 int h= (int) (newHeight*densityMultiplier);
 int w= (int) (h * photo.getWidth()/((double) photo.getHeight()));

 photo=Bitmap.createScaledBitmap(photo, w, h, true);

 return photo;
 }

选择newHightto足够小(对于屏幕上的每一个方格,~100)并将其用于你的小部件,你的问题将得到解决:)

扫码关注云+社区