2013-02-13 74 views
1

我想将位图从X,Y移动到新的X',Y'并为其设置动画。我有一个SurfaceView作为Activity的内部类,并且SurfaceView作为线程运行并处理画布上的所有图形。如何移动位图并为其设置动画效果

这里是线程的run方法:

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); 
    } 

card是一个自定义类Card(Bitmap pic, float X, float Y)的一个实例。 事情是,我知道如何处理这种情况。我想将位图“转移”几个像素,并在此过程中对其进行动画处理。

回答

1

你这样做是错的。

Here是你应该做的一个例子。

基本上要“移动”(动画)要更新x和y坐标的图像并重绘视图。这可以通过在您的平局通话结束时简单地拨打invalidate()来完成。

+0

我一直在浏览YouTube上的一些教程,并让他们说这是正确的方法,因为在视图中作为一个单独的线程运行。所以你说我不应该把它作为一个线程运行? – Kajzer 2013-02-13 11:33:25

+1

不,你在'letsDraw()'中调用了一个不需要的方法。已经有预制的方法可供您使用。但在你的情况下,如果你不想改变任何东西,你可以简单地在绘图调用结束时调用'invalidate()'。 – Synaero 2013-02-13 11:39:34

0

我认为实现这一目标的唯一方法是使用LinearInterpolator计算位图的X和Y位置并将其绘制在“letsDraw”方法上。

相关问题