【问题标题】:how to draw a path on canvas after a specific time delay?如何在特定时间延迟后在画布上绘制路径?
【发布时间】:2019-04-23 16:13:56
【问题描述】:

我想在特定时间延迟后在画布上绘制一条路径,我检查了此链接Draw a Path as animation on canvas ,但它没有解释我正在寻找的问题。

我只想在绘制路径之前延迟一下。

private void OnPainSurface(object sender, SKPaintSurfaceEventArgs args)
 {
      canvas = args.Surface.Canvas;
      canvas.Clear();


      foreach (SKPath path in inProgressPaths.Values)
      {
           //Delay before drawing a path, ex: 5 seconds
           canvas.DrawPath(path, paint);
      }

}

【问题讨论】:

    标签: android xamarin.android android-animation android-canvas skiasharp


    【解决方案1】:

    您可以在View 上使用postInvalidateDelayed 方法

    在你的例子中是

    foreach (SKPath path in inProgressPaths.Values)
      {
           //Delay before drawing a path, ex: 5 seconds
           TimeUnit.SECONDS.sleep(5);
           canvas.DrawPath(path, paint);
      }
    

    编辑

    您可以使用Handler 在每次迭代中给出延迟,在 Kotlin 中是这样完成的

    Handler().postDelayed({
        canvas.DrawPath(path, paint);
    }, 5000)
    

    编辑 2

    你可以试试这个

    Handler handler = new Handler();
    Action action = () => 
    {
       canvas.DrawPath(path, paint);
    };
    
    handler.postDelayed(action, 5000);
    

    【讨论】:

    • 这不起作用,它会立即绘制所有内容。
    • 我编辑了答案,你可以试试新的解决方案吗?
    • 是的,我做到了,我在按下按钮时调用invalidate,在上面的OnPaintSurface方法foreach循环内我调用这个canvasView.PostInvalidateDelayed(2000); canvas.DrawPath(path.Item2, paint);
    • 试过让应用崩溃Handler h = new Handler(); Action myAction = () => { canvas.DrawPath(path.Item2, paint); }; h.PostDelayed(myAction, 1000);
    • 崩溃说明了什么?
    猜你喜欢
    • 1970-01-01
    • 2019-04-12
    • 1970-01-01
    • 1970-01-01
    • 2013-12-20
    • 1970-01-01
    • 2013-05-18
    • 1970-01-01
    • 2015-10-08
    相关资源
    最近更新 更多