2012-04-29 34 views
2

我试图形成一个简单的动画(目前无非画些线条更)在View使用单为Android。动画使用简单的画布视图

这里是我的代码:

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? 
} 

上面的代码只是呈现在蓝色的背景,并绘制一条线。我找的方法(我beleive像OnPaint的东西,这样我可以画一些线条,而应用程序是开放的。我真的不知道过寻找什么。

+0

和视图将被重画。绘制不同的东西来创建一个动画 –

回答

0

你可以看一下Timer类,可以安排您的TimerTask(重写run()方法)并定期运行它,然后调用postInval run()方法中的idate()。此方法将调用的onDraw()方法和所有绘图画布可以在该方法来完成。这是假设这不是你的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方法中添加touch事件。此代码来自我正在处理的图形应用程序。它不断记录来自MIC的声音并将幅度绘制在两个独立的线程中。

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是在`OnDraw`调用`invalidate`结束的一个负责定时器