Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.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
Java 如何移动位图并设置其动画_Java_Android - Fatal编程技术网

Java 如何移动位图并设置其动画

Java 如何移动位图并设置其动画,java,android,Java,Android,我想将位图从X,Y移动到新的X',Y'并设置动画。我有一个SurfaceView作为活动的内部类,该SurfaceView作为线程运行,并处理画布上的所有绘图 以下是线程的运行方法: public void run() { while(threadOk == true) { if(!holder.getSurface().isValid()) continue; Canva

我想将位图从X,Y移动到新的X',Y'并设置动画。我有一个SurfaceView作为活动的内部类,该SurfaceView作为线程运行,并处理画布上的所有绘图

以下是线程的运行方法:

public void run() 
    {
        while(threadOk == true)
        {
            if(!holder.getSurface().isValid())
                continue;

            Canvas canvas = null;
            try
            {
                canvas = holder.lockCanvas();
                letsDraw(canvas);
            }
            finally 
            {

                if (canvas != null)
                {
                    holder.unlockCanvasAndPost(canvas);
                }
            }
        }
    }
下面是
letsDraw(Canvas Canvas)
方法:

public void letsDraw(Canvas canvas)
    {
        canvas.drawARGB(255, 0, 102, 0);
        canvas.drawBitmap(card.getPic(), card.getX(), card.getY(), null);
    }
是自定义类
卡(位图pic,float X,float Y)的实例

问题是,我知道如何处理这种情况。我想将位图“移动”几个像素,并在这样做时设置动画。

我认为实现这一点的唯一方法是使用LinearInterpolator计算位图的X和Y位置,然后使用“letsDraw”方法绘制

我认为实现这一点的唯一方法是使用LinearInterpolator计算位图的X和Y位置,并使用“letsDraw”方法绘制

你做错了

是你应该做的一个例子


基本上是为了“移动”(动画)要更新x和y坐标的图像,并重新绘制视图。这可以通过在draw调用结束时调用
invalidate()
来实现。

您做得都不对

是你应该做的一个例子


基本上是为了“移动”(动画)要更新x和y坐标的图像,并重新绘制视图。这可以通过在draw调用结束时调用
invalidate()
来实现。

我在youtube上浏览了一些教程,制作教程的人说这是正确的方法,因为在视图中,它作为单独的线程运行。你是说我不应该把它作为线程运行吗?不,你在
letsDraw()
中有一个不需要的draw调用。已为您提供了预制作的方法。然而,在你的情况下,如果你不想改变任何东西,你可以在draw调用结束时调用
invalidate()
。我在youtube上浏览了一些教程,制作这些教程的人说这是正确的方法,因为在视图中是作为单独的线程运行的。你是说我不应该把它作为线程运行吗?不,你在
letsDraw()
中有一个不需要的draw调用。已为您提供了预制作的方法。但是,在您的情况下,如果不想更改任何内容,只需在draw调用结束时调用
invalidate()