2013-05-06 2 views
1

ObjectAnimator를 사용하여 레이아웃의 뷰에 애니메이션을 적용 할 수있었습니다.Canvas에서 객체 애니메이트에 ObjectAnimator를 사용할 수 있습니까?

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

BTW, 시작할 때 FC로 바뀝니다. –

답변

0

이 시도,

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

doDraw 방법에 anima.start();를 제거합니다.