2014-09-24 87 views
1

我在我的本地平台(android)中使用了下面的代码片段来为该值设置动画效果,并且它在android中正常工作。动画在Xamarin中不起作用

public void setValue(double value) { 
     if(this.renderer != null) 
     { 
      ObjectAnimator anim= ObjectAnimator.ofFloat(this.renderer,"Value",(float)this.value,(float)value); 
      anim.setDuration(1500); 
      anim.start(); 
     } 

     this.value = value; 
    } 

虽然尝试设置NEWVALUE从XamarinValue财产(Android系统),它设置NEWVALUE但动画xamarin不工作。

我想念什么?

任何时候Android运行时需要调用托管代码都需要Android调用包装器(ACW),并且是必需的,因为在运行时无法向Dalvik注册类。 reference link

所以我试图声明ObjectAnimator anim早期和动画为下面的值,

public void setValue(double value) { 
if(this.renderer != null) 
{ 
    anim= ObjectAnimator.ofFloat(this.renderer,"Value",(float)this.value,(float)value); 
    anim.setDuration(1500); 
    anim.start(); 
} 

this.value = value; 

}

但提到的问题没有解决。

+0

也许使用正确的方法名称? Xamarin不使用较低的骆驼案例。 – Cheesebaron 2014-09-24 12:41:36

+0

@Cheesebaron,上面提到的代码在'Android(native)'而不是'Xamarin'中 – 2014-09-24 12:45:21

回答

3

ObjectAnimator试图找到方法的setValue(浮动)渲染类。

您需要添加[导出]属性以使其对Java端可见。

public class Renderer: Java.Lang.Object 
{ 
    private float _value; 
    [Export] 
    public float getValue() 
    { 
     return _value; 
    } 

    [Export] 
    public void setValue(float value) 
    { 
     _value = value; 
     Log.Debug("TestRenderer", "Value: {0}", value); 
    } 
} 

现在,您就可以使用ObjectAnimator这样的:

var renderer = new Renderer(); 
var anim = ObjectAnimator.OfFloat(renderer, "value", 0f, 1f); 
anim.SetDuration(2000); 
anim.Start(); 

更多信息,请参见ObjectAnimator Proxy to Animate TopMargin can't find setting/getter