Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使onDraw绘图更平滑_Android_Multithreading_Surfaceview_Smooth_Ondraw - Fatal编程技术网

Android 如何使onDraw绘图更平滑

Android 如何使onDraw绘图更平滑,android,multithreading,surfaceview,smooth,ondraw,Android,Multithreading,Surfaceview,Smooth,Ondraw,我将图像从屏幕的顶部移动到屏幕的底部,使其产生一种像别针一样的效果。它工作正常,但问题在于动画效果。我希望这是尽可能顺利,但我可以很容易地找到在这个下降效果挺举 我使用了Surfaceview和线程来实现这一点。线程不断更新图像的位置一个像素,并调用Surfaceview的onDrawcanvas方法,在该方法中绘制具有更新坐标的图像 下面是一些代码片段。首先是绘图线程,它不断更新我的图像坐标(像素) while(mRun){ canvas = null; try{

我将图像从屏幕的顶部移动到屏幕的底部,使其产生一种像别针一样的效果。它工作正常,但问题在于动画效果。我希望这是尽可能顺利,但我可以很容易地找到在这个下降效果挺举

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

下面是一些代码片段。首先是绘图线程,它不断更新我的图像坐标(像素)

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);
这似乎很简单,但也有冲动,我正在寻找一些方法来避免这些冲动


提前谢谢

@Saurabh Pareek:谢谢你的建议


我在模拟器上测试了同样的功能。但当我尝试在一台设备上运行同样的程序时,效果很好。没有冲动和相当好的动画

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