2013-05-06 2 views
1

Мне удалось анимировать вид на макете с помощью ObjectAnimator.Можно ли использовать ObjectAnimator для анимации объектов на Canvas?

Я пробовал анимировать объекты на холсте, используя класс ObjectAnimator, но это не сработало. это возможно?

, что я сделал это создание класса, расширяющий View, я определил 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

BTW, это просто FC при запуске ... –

ответ

0

попробовать это,

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

anima.start(); и удалить в doDraw методом.

Смежные вопросы