我正在开始一个新项目,到目前为止,我已经创建了一个简单的应用程序,其中有一个图像被绘制到Canvas
,您可以用手指在屏幕上拖动。这个想法是在游戏的Canvas
上绘制大量内容。然而拖动是非常滞后的,而用手指拖动屏幕可能每秒更新图像2-3次。它非常慢,所以我假设我做错了(我在Nexus S上)。
我只有应用程序的非常准确,只有一个包含线程的SurfaceView,用这个图像更新Canvas
。这是代码:
// In GameThread
private void doDraw(Canvas c) {
if(canvasInit){
Bitmap background = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.bg);
c.drawBitmap(background, offsetX, offsetY, null);
}
}
public boolean doTouchDown(MotionEvent event) {
if(drag == false){
//initialize drag
startX = event.getX();
startY = event.getY();
drag = true;
}else{
//caluclate new position
offsetX = Math.max(Math.min(0, offsetX + (event.getX() - startX)), mCanvasWidth - BACKGROUND_WIDTH);
offsetY = Math.max(Math.min(0, offsetY + (event.getY() - startY)), mCanvasHeight- BACKGROUND_HEIGHT);
startX = event.getX();
startY = event.getY();
}
return true;
}
public boolean doTouchUp(MotionEvent event){
drag = false;
return true;
}
答案 0 :(得分:1)
每次绘图时,您似乎都在加载Bitmap。您可以尝试将资源加载移动到某种初始化方法/ SurfaceView构造函数并比较性能吗?
Bitmap background;
...
private void init() {
...
background = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.bg);
...
}
private void doDraw(Canvas c) {
if(canvasInit){
c.drawBitmap(background, offsetX, offsetY, null);
}
}
答案 1 :(得分:1)
我认为问题出在doDraw
方法中,您每Draw
创建一个新的位图,尝试在Bitmap
中加载此Constructor
,然后在{{{}}中获取它1}}方法,并使用你的x和y绘制它。