Son*_*man 5 java performance android canvas ondraw
我已经搜索了几个小时,并且无法找到一个简明明确的问题.我有一个应用程序,我需要在屏幕上绘制一个运动场(包括所有音高线).到目前为止,我已经扩展了SurfaceView,并且几乎复制了LunarLander演示的其余部分.应用程序将音高绘制到正确尺寸所需的所有数据都是从插座接收的,该插座也能正常工作.但是,在onDraw()函数的那一刻,我正在绘制每个帧的所有行,这会导致模拟器中相当慢的帧速率(例如~10fps).这是我的onDraw()函数:
@Override
public void onDraw(Canvas canvas) {
canvas.drawARGB(255,0,144,0);
canvas.drawLine(canvas, getFirstLine(), mPaint);
canvas.drawRect(canvas, getFirstRect(), mPaint);
canvas.drawRect(canvas, getSecondRect(), mPaint);
...
canvas.drawRect(canvas, getSecondRect(), mPaint);
drawAnimatedObjects();
}
Run Code Online (Sandbox Code Playgroud)
然后我在这个背景上绘制圆圈和不同的位置.我的问题是如何提高效率?有没有办法可以在应用程序初始化时绘制线条而不必每帧都重绘它们?
谢谢你的帮助.
Jos*_*osh 12
您绝对应该缓存任何在初始化时不会更改为位图的画布,然后在onDraw()中绘制该位图.这将有助于渲染时间.就像是:
Bitmap mField = null;
void init()
{
mField = new Bitmap(...dimensions...);
Canvas c = new Canvas(mField);
c.drawRect(...);
...
}
void onDraw(Canvas c)
{
c.drawBitmap(mField);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5525 次 |
最近记录: |