我有层次结构:
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);
}
答案 0 :(得分:1)
在没有看到完整代码的情况下,很难看出瓶颈的原因是什么,而且从你的问题中不太清楚你究竟想要绘制什么,所以我只能给你一些指示。
如果您发布的代码是onDraw()
方法,那么我会考虑将所有计算移到另一个后台线程中。因为onDraw()
是在主(GUI)线程中执行的,所以你应该尽可能地进行小计算,即你的位图应该准备好转储到屏幕上,任何参数都应该作为变量提供即不要在getMeasuredHeight()
中拨打onDraw()
。
你也在做演员:
int w =(int)(square.animIndex * square.getMeasuredWidth()* 4 / 10f);
如果可以,请避免混合使用浮点数和整数,从onDraw()方法中获取此计算。
Fianlly因为'onDraw()`在主线程中运行,所以你不必通过计算“占用”线程。这将导致您的应用程序无响应/迟缓,因此您的用户将卸载。您尝试绘制它的内容可能没有错,只是如何您正在解决这个问题。