2013-05-06 34 views
1

我设法使用ObjectAnimator在布局上查看动画。是否可以使用ObjectAnimator为Canvas上的对象设置动画效果?

我尝试使用ObjectAnimator类在画布上动画对象,但它不起作用。 它甚至有可能吗?

我所做的是创建扩展视图类,我所定义的ObjectAnimator像我一样的布局,然后我画在画布上,并开始动画(objectanimator.start)

这里是代码: (该//行是我的布局尝试女巫工作)

public class MainActivity extends Activity { 

SurfaceClass surface; 
private ObjectAnimator anima; 
//private Button but; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    surface = new SurfaceClass(this); 
    surface.resume(); 
    setContentView(surface); 
    //but = (Button)findViewById(R.id.button1); 
    //anima = ObjectAnimator.ofFloat(but, "y",400); 
    //anima.setDuration(5000); 
    //anima.setRepeatCount(100); 
    //anima.setRepeatMode(1); 
    //anima.start(); 

} 

面:

public class SurfaceClass extends SurfaceView implements Runnable{ 

SurfaceHolder sHolder; 
Boolean isRunning; 
Thread th; 
Canvas c; 
Obj object; 
ObjectAnimator anima; 


public SurfaceClass(Context context) { 
    super(context); 
    // TODO Auto-generated constructor stub 
    anima = ObjectAnimator.ofFloat(object, "y",1f); 
    anima.setDuration(3000); 
    anima.setRepeatCount(100); 
    anima.setRepeatMode(1); 
    //anima.start(); 
    object = new Obj(context); 
    sHolder = getHolder(); 
    isRunning = false; 
} 

@Override 
public void run() { 
    // TODO Auto-generated method stub 
    while(isRunning){ 
     if(!sHolder.getSurface().isValid()) 
      continue; 
     c = sHolder.lockCanvas(); 
     synchronized(sHolder){ 
      doDraw(c); 
     } 
     sHolder.unlockCanvasAndPost(c); 
    } 
} 

private void doDraw(Canvas c) { 
    // TODO Auto-generated method stub 

    c.drawBitmap(object.pic, object.x, object.y, null); 
    anima.start(); 
} 

public void resume() { 
    // TODO Auto-generated method stub 
    isRunning = true; 
    th = new Thread(this); 
    th.start(); 
} 

}

对象:

public class Obj extends View { 
float x = 200,y=30; 
Bitmap pic; 

public Obj(Context context) { 
    super(context); 
    // TODO Auto-generated constructor stub 
    pic = BitmapFactory.decodeResource(getResources(), R.drawable.cat_trance); 
} 
public void setY(float f){ 
    y=f; 
} 
public float getY(){ 
    return y; 
} 

}

+0

顺便说一句,它只是FC时开始...... – 2013-05-06 16:19:53

回答

0

尝试此,

@Override 
protected void onAttachedToWindow(){ 
    anima.start(); 
} 

doDraw方法除去anima.start();

相关问题