【问题标题】:how to make onDraw drawing smoother如何让onDraw绘图更流畅
【发布时间】:2012-04-23 11:55:27
【问题描述】:

我正在将图像从屏幕顶部移动到屏幕底部,以使其具有类似落针的效果。它工作正常,但问题在于动画效果。我希望这尽可能平滑,但我可以很容易地在这种下降效果中找到混蛋。

我使用了 Surfaceview 和线程来实现这一点。线程不断将图像的位置更新一个像素,并调用 Surfaceview 的 onDraw(canvas) 方法,在该方法中绘制具有更新坐标的图像。

这是一些代码 sn-p。首先是绘图线程不断更新我的图像坐标一些像素。

while(mRun){
    canvas = null;
    try{
        canvas = mSurfaceHolder.lockCanvas();
        //increment the coordinate by 5 pixels
            image.getCoordinate.setX(image.getCoordinate.getX + 5);
            image.getCoordinate.setY(image.getCoordinate.getY + 5);

        synchronized (mSurfaceHolder) {

            //call onDraw method to update position on canvas
            mPanel.onDraw(canvas);
        }

    }finally{
        if(canvas != null){
            mPanel.getSurfaceHolder().unlockCanvasAndPost(canvas);
        }
    }
}

然后是我的 SurfaceView 类中的 onDraw 方法,它在画布上绘制更新的图像:

canvas.drawBitmap(image, image.getCoordinate().getX(),image.getCoordinate().getY(), null);

这似乎很简单,但有一些混蛋,我正在寻找一些方法来避免这些混蛋。

提前致谢。

【问题讨论】:

  • 发布一些关于您的绘图外观的代码。通常最好检查自上次更新以来已经过去了多少时间,并计算一个偏移量而不是设置一个偏移量(例如一个像素)。这样,即使您的绘图需要比预期更长的时间,您也可以获得一致的动作。
  • 嗨,我已经用一些代码 sn-p 更新了我的帖子。
  • 谢谢你,它让你更容易理解你在做什么,你能否也发布onDraw() 方法的其余部分,以防万一有任何事情会降低性能在那里?
  • @Jave:在我的 onDraw 方法中就是这样。
  • 在真机上试试吧。它会完美运行。

标签: android multithreading surfaceview smooth ondraw


【解决方案1】:

@Saurabh Pareek :感谢好友的好建议。

我在模拟器上进行了同样的测试。但是当我尝试在设备上运行相同的设备时,它运行良好。没有混蛋和漂亮的动画。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-08
    • 1970-01-01
    • 2012-11-12
    • 1970-01-01
    • 2018-09-12
    相关资源
    最近更新 更多