2017-06-21 11 views
0

私は1行を描いています。私は私のビューでAnglePropertyを追加しました。その角度プロパティを使用して、私はその線をその角度に動かす必要があります。ここでxamarin.androidでカスタムプロパティをアニメートする方法

はラインがメインの活動に

public class DrawView : View 
    { 
     Paint paint = new Paint(); 

     private double mvalue = 90; 
     public double Angle 
     { 
      get { return mvalue; } 
      set { 
       ObjectAnimator anim = ObjectAnimator.OfFloat(this, "Angle", (float)this.Angle, (float)value); 
       anim.SetDuration(500); 
       anim.Start(); 
       mvalue = value; 

      } 
     } 
     public DrawView(Context context):base(context) 
     { 
      paint.Color = Color.Green; 
     } 

     protected override void OnDraw(Canvas canvas) 
     { 
      base.OnDraw(canvas); 
      Value = Angle* Math.Pi/180; 
     var startX = 300; 
     var startY = 300; 
     var endX = 500 + 40 * Math.Sin(Value); 
     var endY = 500 + 40 * Math.Cos(Value); 

     canvas.DrawLine(startX, startY, (float)endX, (float)endY, paint);   
     } 
    } 

を描かれている私の見解ですが、私は角度が与えられているボタンを追加した、

public class MainActivity : Activity 
    { 
     DrawView drawview; 
     protected override void OnCreate(Bundle bundle) 
     { 
      base.OnCreate(bundle); 
drawview = new DrawView(this); 
      Button b = new Button(this); 
      b.SetHeight(50); 
      b.SetWidth(50); 
      b.Click += B_Click; 
      LinearLayout lay = new LinearLayout(this); 
      lay.AddView(b); 
      lay.AddView(drawview); 
} 
private void B_Click(object sender, System.EventArgs e) 
     { 
      drawview.Angle= 180; 
     } 
} 

誰でもにその行をアニメーション化する方法を提案してください特定の角度

答えて

0

論理は正しいですが、いくつかの問題があります。 Angleプロパティを定義したので、Valueプロパティを使用する代わりにAngleプロパティを使用してアニメーションを制御する必要があります。thisのように正常に動作します。詳細については、documentをご覧ください。

protected override void OnDraw(Canvas canvas) 
    { 
     base.OnDraw(canvas); 
     Angle = Angle * Math.PI/180; 
     var startX = 300; 
     var startY = 300; 
     var endX = 500 + 40 * Math.Sin(Angle); 
     var endY = 500 + 40 * Math.Cos(Angle); 

     canvas.DrawLine(startX, startY, (float)endX, (float)endY, paint); 
    } 

ボタンをクリックすると、Animationを開始します。

private void B_Click(object sender, System.EventArgs e) 
    { 
     //certain angle decided by EditText's text 
     Int32 number = int.Parse(et.Text.ToString()); 
     drawview.Angle = number; 
    } 
関連する問題