android在视图下绘制动画

时间:2012-07-09 11:20:12

标签: android android-layout android-animation android-view

我有层次结构:

Buttons  (Button childs)
   myView (View child)
      RelativeView (has background image)

在myView中我绘制了有动画的圆圈(刻度为0.5到1.0大小),它的性能非常低(绘制非常慢)

我无法使用surfaceview,因为在任何视图下,surfaceview都不能透明,如果它是
透明它必须是surface.setZOrderOnTop(true);

该怎么办?

P.S。

绘图代码

    // Square is Button that need to has animated circle under it
for (int i = 0; i < squares.size(); i++) {
        Square square = squares.get(i);
        if (square.animIndex == -1)
            continue;
        int left = square.getLeft();
        int top = getRelativeTop(square);

        int w = (int) (square.animIndex * square.getMeasuredWidth() * 4 / 10f);

        square.animIndex++;

        if (square.animIndex > 10) {
            square.animIndex = -1;
        }
              //note is circle bitmap
        c.drawBitmap(note, null, new Rect(left - w / 2 + square.getMeasuredWidth() / 2, top - w / 2
                + square.getMeasuredHeight() / 2, left - w / 2 + square.getMeasuredWidth() / 2 + w, top
                - w / 2 + square.getMeasuredHeight() / 2 + w), null);
    }

1 个答案:

答案 0 :(得分:1)

在没有看到完整代码的情况下,很难看出瓶颈的原因是什么,而且从你的问题中不太清楚你究竟想要绘制什么,所以我只能给你一些指示。

如果您发布的代码是onDraw()方法,那么我会考虑将所有计算移到另一个后台线程中。因为onDraw()是在主(GUI)线程中执行的,所以你应该尽可能地进行计算,即你的位图应该准备好转储到屏幕上,任何参数都应该作为变量提供即不要在getMeasuredHeight()中拨打onDraw()

你也在做演员:

  

int w =(int)(square.animIndex * square.getMeasuredWidth()* 4 / 10f);

如果可以,请避免混合使用浮点数和整数,从onDraw()方法中获取此计算。

Fianlly因为'onDraw()`在主线程中运行,所以你不必通过计算“占用”线程。这将导致您的应用程序无响应/迟缓,因此您的用户将卸载。您尝试绘制它的内容可能没有错,只是如何您正在解决这个问题。