【问题标题】:Rotated images in remoteviews远程视图中的旋转图像
【发布时间】:2013-01-02 06:00:42
【问题描述】:

我正在制作一个电池小部件,为了避免不同级别有 20 个单独的 PNG 文件,我有一个 PNG,我将其旋转到 20 个位置。在 Android 3.x+ 上,这很容易,因为 ImageView 元素作为旋转属性。为了向后兼容,我使用矩阵生成其他图像,如下所示:

if(Build.VERSION.SDK_INT < 11) {
        Bitmap bmp = BitmapFactory.decodeResource(context.getResources(), R.drawable.battery_green);
        Matrix m = new Matrix();
        for(int i = 0; i < 20; i++) {
            String idName = "batt_s_"+i;
            int id = context.getResources().getIdentifier(idName, "id", context.getPackageName());
            m.setRotate((i * 18) - 8);
            Bitmap newBmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), m, true);
            myViews.setImageViewBitmap(id, newBmp);
        }
    }

但是,这不起作用,因为尽管图像本身很小,但这样做 20 次超过了活页夹限制,我得到了!!! Binder 交易失败!!! 我生成的一个位图可以很好地发送,我觉得我需要一种方法以某种方式将我的一个大交易分成 20 个单独的交易。必须有办法绕过这个限制,这样我才能在 Android 2.x 上支持我的用户。有什么想法吗?

我必须补充一点,我正在修改的原始 PNG 文件在磁​​盘上是 903 字节。我的超出绑定限制的交易是 1,271,808 字节。我假设这是因为生成 Bitmap 对象实际上是创建了一个 BMP 文件,它的大小当然比 PNG 大得多。有没有办法完全避免使用位图?

【问题讨论】:

    标签: android bitmap backwards-compatibility android-appwidget remoteview


    【解决方案1】:

    也许这会有所帮助:

    这是在可用的小型活页夹限制内完成工作的解决方法。

    https://groups.google.com/forum/#!topic/android-developers/KKEyW6XdDvg/discussion

    【讨论】:

    • 我已经多次阅读整个线程。我还没有找到任何真正帮助我的东西。我正在动态生成新的位图,所以据我所知,我不能使用 URI,并且我尝试在发送位图之前缩放位图并更改其密度,但没有任何效果。跨度>
    • 只是想知道...是否会在每个事务之间设置 x 毫秒的延迟帮助...?
    • "Binder 事务缓冲区有一个有限的固定大小,目前为 1Mb,由进程中所有正在进行的事务共享。"所以延迟不应该有帮助。我真正需要的是一种强制事务缓冲区在循环迭代之间发送和清除的方法
    • 我最终在生成图像时将图像保存到磁盘,然后按照您提供的链接中的建议使用 URI,所以我想您得到了正确的答案标记。谢谢!有关我必须做什么的更多详细信息,请查看here
    猜你喜欢
    • 1970-01-01
    • 2011-08-19
    • 2015-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多