2014-03-29 115 views
1

我正在学习如何使用ObjectAnimator在android上动画,但是我没有看到它更新了我的setter方法。假设我有一个在显示屏上绘制一个简单的文本,并有私有变量(curnum)的客户视图,一个objectAnimator将操作:为什么objectAnimator不调用setter方法

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


    } 
} 

现在我的活动课,我有启动的动作栏项目动画:

@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方法上放置断点,它永远不会被击中。

我错过了什么吗?

+0

setCurnum()应该是setCurnum (浮点值)? – pskink

+0

** invalidate()** setter函数内部是绝对必要的,以便动画运行。 – Odaym

回答

4

正如developers guide说:

,你是动画必须在集的形式setter函数 (骆驼的情况下)的对象属性()。由于ObjectAnimator在动画过程中自动更新属性,因此 必须能够使用此setter方法访问属性。物业

吸气(如果需要)和setter方法,你是 动画必须在同类型为出发运作和终止您指定到ObjectAnimator 值。

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

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

所以,你需要改变你的方法:

setCurnum(float f) 
+0

谢谢!有用! –

相关问题