AVE*_*imi 5 rgb android bitmap widget
当我尝试在小部件上放置位图时,我使用了这个:
theBitmap = Bitmap.createBitmap(WW, HH,
Bitmap.Config.ARGB_8888);
.
.
// draw something using a canvas
.
.
rviews.setImageViewBitmap(R.id.time,theBitmap);
Run Code Online (Sandbox Code Playgroud)
这适用于我的手机但不适用于我的Galaxy平板电脑或Galaxy Note,
如果我将theBitmap复制到新的ARGB_4444,那么它适用于所有设备:
Bitmap clone= theBitmap.copy(Bitmap.Config.ARGB_4444, false); // workaround
rviews.setImageViewBitmap(R.id.time, clone);
Run Code Online (Sandbox Code Playgroud)
首先,没有您的解决方法,请检查您的logcat输出:
ERROR/JavaBinder(20204): !!! FAILED BINDER TRANSACTION !!!
Run Code Online (Sandbox Code Playgroud)
您可能正在达到保存对RemoteViews层次结构所做更改的IPC事务的文件大小限制.
使用Bitmap.Config.ARGB_4444配置复制位图时,每个像素将用2个字节表示,而Bitmap.Config.ARGB_8888(2.3和更高的默认配置)每个像素为4个字节[Source].
通过使用您的解决方法,您传递了一半的数据,因此,按大小限制发出吱吱声.这篇文章建议大小限制是1MB,但我不确定这是否因操作系统版本或制造商而异.
更新:传递图像的另一种方法是不发送位图本身,而是将URI传递给磁盘上的文件.然后,您需要确保其他进程对您的文件具有读取权限(例如,启动程序将在不同的进程中运行).如果要将文件写入/data/data/my.package.name/目录,可以通过在Context.openFileOutput()上指定MODE_WORLD_READABLE来执行此操作.例如:
remoteViews.setUri(R.id.time, "setImageURI", Uri.fromFile(file));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2629 次 |
| 最近记录: |