1

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

}

4

1 に答える 1

0

これを試して、

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

メソッドで削除anima.start();doDrawます。

于 2014-01-13T16:28:17.310 に答える