为什么objectAnimator不会调用setter方法

时间:2014-03-29 19:59:22

标签: android objectanimator

我正在学习如何使用ObjectAnimator为android上的对象设置动画,但我没有看到它更新我的setter方法。假设我有一个自定义视图,它在显示器上绘制一个简单的文本,并且有一个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方法上放置一个断点,它就永远不会被击中。

我错过了什么吗?

1 个答案:

答案 0 :(得分:4)

developers guide中所述:

  

您要设置动画的对象属性必须具有setter函数   (在驼峰的情况下)以set()的形式。因为   ObjectAnimator会在动画期间自动更新属性   必须能够使用此setter方法访问该属性。

     

您的属性的getter(如果需要)和setter方法   动画必须与开始和结束相同的类型操作   您指定的值到ObjectAnimator。

例如,如果您构建以下targetObject.setPropName(float),则必须targetObject.getPropName(float)ObjectAnimator

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

因此您需要将方法更改为:

setCurnum(float f)