【问题标题】:Rendering Bitmap on SurfaceView impacting performance在 SurfaceView 上渲染位图会影响性能
【发布时间】:2013-01-30 00:02:16
【问题描述】:

我有一个扩展 SurfaceView(Android 应用程序 API 级别 8)的活动。需要将位图绘制到背景而不是简单的颜色。我能够在画布上绘制位图 --> 使用 void render(Canvas canvas) 中的注释代码,但它导致性能太低。

如果我们使用位图,渲染会变慢,但是如果我们只绘制颜色,那么一切都很好。

代码有问题吗?如何在不影响性能的情况下设置背景图片?

public class MainGamePanel extends SurfaceView implements
        SurfaceHolder.Callback {
public void render(Canvas canvas) {


        canvas.drawColor(Color.WHITE);
        /*
        Rect dest = new Rect(0, 0, getWidth(), getHeight());
        Paint paint = new Paint();
        paint.setFilterBitmap(true);

        Bitmap myBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.background_play);
        canvas.drawBitmap(myBitmap, null, dest, paint);
        */
        droid.draw(canvas);
    }
}

【问题讨论】:

    标签: android bitmap render android-canvas surfaceview


    【解决方案1】:

    也许您应该将您的位图创建为一个字段并在您的渲染方法()之外对其进行解码,例如:

    public class MainGamePanel extends SurfaceView implements
        SurfaceHolder.Callback {
    
        private Bitmap myBitmap; //creating a field
    
        public MainGamePanel() {
    
            myBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.background_play); //decode bitmap in constructor
    
        }
    
        public void render(Canvas canvas) {
    
    
        canvas.drawColor(Color.WHITE);
    
        Rect dest = new Rect(0, 0, getWidth(), getHeight());
        Paint paint = new Paint();
        paint.setFilterBitmap(true);
    
        canvas.drawBitmap(myBitmap, null, dest, paint); //draw your bitmap
    
        droid.draw(canvas);
        }
    }
    

    【讨论】:

    • 在渲染之外初始化绘制对象将提高性能。正如开发网站所说。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-08
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    相关资源
    最近更新 更多