2012-04-29 16 views
2

私はViewでモノを使って簡単なアニメーションを作成しようとしています。単純なキャンバスを使用したアニメーションビュー

public class DemoView : View 
{ 
    public DemoView(Context context, IAttributeSet attrs) : 
     base(context, attrs) 
    { 
     Initialize(); 
    } 

    public DemoView(Context context, IAttributeSet attrs, int defStyle) : 
     base(context, attrs, defStyle) 
    { 
     Initialize(); 
    } 

    private void Initialize() 
    { 
    } 

    protected override void OnDraw(Android.Graphics.Canvas canvas) 
    { 
     base.OnDraw(canvas); 

     canvas.DrawColor(Color.Blue); 

     Paint pen = new Paint(); 

     pen.Color = Color.Red; 
     pen.StrokeWidth = 2; 
     pen.SetStyle(Paint.Style.Stroke); 

     canvas.DrawLine(0, 0, 25, 25, pen); 
    } 

    //How to add other lines to form an animation? 
} 

上記のコードは、単に青色のバックグラウンドをレンダリングして線を描画:

は、ここに私のコードです。私はメソッドを探しています(私はOnPaintのようなものを信じていますので、アプリケーションが開いている間に線を引くことができます)。

+0

の責任でした。アニメーションを作成するためにさまざまなことを描く –

答えて

3

githubのMonoDroid samples projectを見てください。 MonoDroidと異なるのAndroidソリューションを実装する方法のためのリソース。

それは、Snake gameLive Wallpaperを含むアニメーションの描画を使用していくつかのサンプルアプリケーションが含まれています。

0

あなたはTimerクラスで見ることができます。それは(あなたのTimerTaskををスケジュールすることができますrun()メソッドをオーバーライドして定期的に実行します。その後、postInval run()メソッドのidate()このメソッドはonDraw()メソッドを呼び出し、すべてのCanvas描画をそのメソッドで実行できます。これはあなたのUIクラスでないと仮定しています。それ以外の場合はinvalidate()を呼び出します。

public DrawView(Context context, VoiceGraphActivity _parent) { 
    super(context); 
    parent_ = _parent; 

    paintBorder.setStyle(Style.STROKE); 
    paintBorder.setColor(0xff888870); 
    paintBorder.setAlpha(170); 

    paintGraph.setStyle(Style.STROKE); 
    paintGraph.setColor(0xff888888); 
    paintGraph.setAlpha(230); 

    timer = new Timer(); 

    class liveGraph extends TimerTask { 

     @Override 
     public void run() { 

      postInvalidate(); 
     } 

    }; 

    int UI_UPDATE_MS = 100; 

    timer.schedule(new liveGraph(), UI_UPDATE_MS, UI_UPDATE_MS); 
} 

runメソッドでタッチイベントを追加できます。このコードは私が取り組んでいるGraphingアプリケーションからのものです。それはMICからのサウンドを絶えず記録し、2つの別々のスレッドで振幅を引き出します。

2

これは私のOnDraw方法は

protected override void OnDraw(Android.Graphics.Canvas canvas) 
{ 
    base.OnDraw(canvas); 

    if (x < 0 && y < 0) 
    { 
     x = Width/2; 
     y = Height/2; 
    } 
    else 
    { 
     x += xVelocity; 
     y += yVelocity; 

     if (x > Width - particleWidth || x < 0) 
      xVelocity *= -1; 
     if (y > Height - particleHeight || y < 0) 
      yVelocity *= -1; 
    } 

    Paint p = new Paint(); 
    p.Color = Color.White; 
    canvas.DrawCircle(x, y, particleWidth, p); 
    handler.PostDelayed(Invalidate, FRAME_RATE); 
} 

handler.PostDelayedのように見えるものでは `invalidate`とビューが再描画されます`呼び出すOnDraw`の終わりにタイマー