2

View我正在尝试在一个使用mono for 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?
}

上面的代码只是将背景渲染为蓝色并画了一条线。我正在寻找方法(我相信这样的方法,OnPaint以便在应用程序打开时画一些线。我真的不知道要寻找什么。

4

3 回答 3

3

查看github上的MonoDroid 示例项目。它是关于如何使用 MonoDroid 实现不同 Android 解决方案的综合资源。

它包含几个使用动画绘制的示例应用程序,包括Snake 游戏动态壁纸

于 2012-05-12T15:20:23.633 回答
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是负责计时器的人

于 2013-02-20T01:05:32.850 回答
0

您可以查看 Timer 类。它可以安排您的 TimerTask(覆盖 run() 方法)并定期运行它。之后,您可以在 run() 方法中调用 postInvalidate()。此方法将调用 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 方法中添加触摸事件。此代码来自我正在处理的图形应用程序。它不断地记录来自 MIC 的声音,并在两个单独的线程中绘制振幅。

于 2012-05-14T07:55:22.267 回答