2013-01-15 118 views
0

我该如何在android中为位图创建动画,以便它在抛物拱形或任何其他弯曲路径中移动穿过屏幕?目前,我正在使用的方法是使用onDraw()方法在画布上用x/y坐标绘制位图,然后在绘制位图后将该x/y坐标增加1,此时方法调用invalidate()重新绘制新位置的位图。动画位图在曲线上移动

更新:

也许这会给多一点背景下我想要做的事。下面是我的实现,现在的动画我的位图:

canvas.drawColor(Color.TRANSPARENT); 
canvas.drawBitmap(gBall, x, y, null); 

x += changeX; 
y += changeY; 

if(x >= (canvas.getWidth()-gBall.getWidth()) || x <= 0) 
    changeX = -changeX; 
if(y >= (canvas.getHeight()-gBall.getHeight()) || y <= 0) 
    changeY = -changeY; 


invalidate(); 

是否有同时仍然使用这个实现,使位图gBall曲线,因为它靠近屏幕边缘的方法是什么?

回答

0

使用Handler来CONTROLE速度:

public void draw(Canvas canvas, ...){ 
    if (System.currentTimeMillis() - lastCall < PERIOD-50){ 
     mHandler.postDelayed(mReDrawRunnable,PERIOD); 
     return; 
    } 

    //to call back 
    mHandler.removeCallbacks(mReDrawRunnable); 
    mHandler.postDelayed(mReDrawRunnable,PERIOD); 
    lastCall = System.currentTimeMillis(); 

    //your code here 
    ... 


} 
private long lastCall = 0; 
private static final PERIOD = 250; //millis 
private Handler mHandler = new Handler(); 
private Runnable mReDrawRunnable==new Runnable() { 
      public void run() {YourClass.this.invalidate();} 
     }; 

这是一个快速的方法来做到这一点,它应该工作。您应该创建另一个线程来控制绘图。

0

实现自定义动画师。要实现自定义动画设计器,您只需要覆盖Animator类的applyTransformation方法。然后,您可以使用您的自定义类的实例调用View.startAnimation。鉴于谷歌开发人员实施流畅动画的时间长度,这可能是最好的解决方案 - 比执行处理程序的操作要好得多,这很可能会导致垃圾收集造成的故障。正确实施的动画,在其applyTransform方法中不执行内存分配,可以运行而不会产生任何垃圾收集。

如果您看看平台资源,很快就会发现无故障动画是Android 4.x的主要开发目标。 Google工程师已经投入了大量工作来确保动画无毛刺地运行。你的绘制和失效策略可能确实很有效。 Handler方法不是那么多。但如果是我,我会花费额外的时间来利用已经投入到动画中的努力。