-1

我有层次结构:

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

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

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

该怎么办?

附言

绘图代码

    // 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);
    }
4

1 回答 1

1

如果没有看到您的完整代码,很难看出瓶颈的原因可能是什么,并且从您的问题中也不太清楚您要准确绘制什么,所以我只能给您一些指示。

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

你也在做演员:

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

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

Fianlly 因为“onDraw()”在主线程中运行,所以您必须不要“占用”计算线程。这将导致您的应用程序无响应/缓慢,因此您的用户将卸载。您尝试绘制的内容可能没有任何问题,只是的处理方式导致了问题。

于 2012-07-09T14:25:19.747 回答