1

ObjectAnimator を使用して Android でオブジェクトをアニメーション化する方法を学習していますが、セッター メソッドが更新されません。ディスプレイに単純なテキストを描画するカスタム ビューがあり、objectAnimator が操作するプライベート変数 (curnum) があるとします。

public class TempView extends View {

    private Float cur_num = new Float(0.0);
    private float curnum = 0f;

    public TempView(Context context, AttributeSet attrs)
    {
        super(context, attrs);
    }

    public void setCurnum()
    {
        curnum++;
        cur_num = new Float(curnum);
        invalidate();
    }

    @Override
    public void onDraw(Canvas canvas)
    {
        Paint paint = new Paint();
        paint.setStrokeWidth(8);
        paint.setTextSize(100);

        canvas.drawText(cur_num.toString(), 150, 150, paint);


    }
}

Activity クラスには、アニメーションを開始するアクション バー項目があります。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.


    int id = item.getItemId();
    if (id == R.id.startanim) {

       TempView v = (TempView)findViewById(R.id.tempView);
       ObjectAnimator anim = ObjectAnimator.ofFloat(v, "curnum", 0f, 1f);
       anim.setDuration(1000L);
       anim.start();
    }

    return super.onOptionsItemSelected(item);
}

しかし、どういうわけか、setter メソッドにブレークポイントを設定すると、ヒットすることはありません。

何か見逃しましたか?

4

1 に答える 1

5

開発者ガイドで述べたように:

アニメーション化するオブジェクト プロパティには、set() の形式のセッター関数 (キャメルの場合) が必要です。ObjectAnimator はアニメーション中にプロパティを自動的に更新するため、この setter メソッドでプロパティにアクセスできる必要があります。

アニメーション化するプロパティの getter メソッド (必要な場合) と setter メソッドは、ObjectAnimatorに指定する開始値と終了値と同じ型で動作する必要があります。

たとえば、次のように構成する場合はtargetObject.setPropName(float)、 andが必要です。targetObject.getPropName(float)ObjectAnimator

ObjectAnimator.ofFloat(targetObject, "propName", 1f)

したがって、メソッドを次のように変更する必要があります。

setCurnum(float f)
于 2014-03-29T20:15:20.233 に答える