【问题标题】:Android Live Wallpaper - layers & basics of XML in Live WallpapersAndroid 动态壁纸 - 动态壁纸中 XML 的层次和基础知识
【发布时间】:2013-09-09 13:50:26
【问题描述】:

我的问题可能很简单。我最近开始为 Android(以及一般的 Android 编码)创建动态壁纸,但我缺乏动态壁纸编码背后的基础知识,因为它真的很难找到。

我想创建具有 2 个(或更多)“层”的动态壁纸。我的两个所谓的层是:

  • 对触摸事件做出反应的背景
  • 位图,位于顶部

目前我正在一个画布中绘制所有内容,如下所示:

Resources res = getResources();
Bitmap image = BitmapFactory.decodeResource(res, R.drawable.image);

        Canvas c = null;
        try {
            c = holder.lockCanvas();
            if (c != null) {
                c.drawARGB(aa, rr, gg, bb);
                c.drawBitmap(image, 0, 0, paint);
            }
        } finally {
            if (c != null) holder.unlockCanvasAndPost(c);
        }

它可以工作,但性能真的很差,因为我在每帧重绘时都在绘制这个相对较大的 PNG 文件。

我想知道在动态壁纸中显示位图的最佳方式是什么? 以及以后如何为它们设置动画(基本上只是改变开始的位置)而不必每次都重新绘制它们? 最后,如何确定动态壁纸中的 z-index(具有多个图层)——这也可以像在“普通应用程序”中那样使用 XML 来完成吗?

【问题讨论】:

    标签: java android xml android-layout live-wallpaper


    【解决方案1】:

    今天我在 GitHub 上发布了一个live wallpaper template,它使用了画布和一个单独的动画线程。如果您刚开始使用动态壁纸,您可能想查看一下。

    在您的情况下,您应该只解码一次位图,然后简单地绘制它。每帧重绘位图没有错。如果你想拥有多个图层,只需按顺序绘制它们,以便最后绘制顶层。

    【讨论】:

    • 谢谢!仅对位图进行一次解码就大大提高了性能。我还将查看您的模板以了解更多信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多