Android 在画布上绘制多条线,中间有延迟

Android 在画布上绘制多条线,中间有延迟,android,canvas,android-bitmap,ondraw,Android,Canvas,Android Bitmap,Ondraw,几个月后,我终于创建了我的第一个非平凡应用程序。 现在我想添加一些漂亮的动画(不确定它是否是一个合适的术语),比如逐步绘制图形。下面的Gif解释了我需要什么。此时,我的应用程序立即绘制图形,没有任何延迟 在MyFragment类中,有一个FrameLayout,其中添加了自定义视图(我的图形): public class MyFragment extends Fragment{ ... FrameLayout mFL; MyDraw mydraw = new MyDraw(getContext

几个月后,我终于创建了我的第一个非平凡应用程序。 现在我想添加一些漂亮的动画(不确定它是否是一个合适的术语),比如逐步绘制图形。下面的Gif解释了我需要什么。此时,我的应用程序立即绘制图形,没有任何延迟

在MyFragment类中,有一个FrameLayout,其中添加了自定义视图(我的图形):

public class MyFragment extends Fragment{
...
FrameLayout mFL;
MyDraw mydraw = new MyDraw(getContext(),floatArray_coord_X,floatArray_coord_Y);
mFL.addView(mydraw);
...
}

然后在我的自定义视图类中进行一些计算并绘制线:

public class MyDraw extends View{
  private Bitmap mBitmap;
  private Canvas mCanvas;
  ...

  @Override
  public void onDraw(Canvas canvas){

    mBitmap = Bitmap.createBitmap(canvas.getWidth(), canvas.getHeight(),
                                    Bitmap.Config.ARGB_8888); 
    mCanvas = new Canvas(bitmap);       
    ...

    // draw brown lines between two neighbour (X,Y) points 
    for (int i = 0; i < floatArray_coord_X.length - 1; i++) {
            mCanvas.drawLine(floatArray_coord_X[i],     floatArray_coord_Y[i],
                             floatArray_coord_X[i + 1], floatArray_coord_Y[i + 1],
                             mypaint0);
        }

    ...
    // draw black lines at calculated (X,Y) points
    for (int i = 0; i < floatArray_coord_X_calc.length - 1; i++) {
            mCanvas.drawLine(floatArray_coord_X_calc[i],     floatArray_coord_Y_calc[i],
                             floatArray_coord_X_calc[i + 1], floatArray_coord_Y_calc[i + 1],
                             mypaint1);
        }
    ...
    // draw blue lines at newly calculated (X,Y) points
    drawBlueLines(); // with extra calc
    ...     

    canvas.drawBitmap(bitmap, 0, 0, null);
}
公共类MyDraw扩展视图{
私有位图mBitmap;
私人帆布mCanvas;
...
@凌驾
公共空白onDraw(画布){
mBitmap=Bitmap.createBitmap(canvas.getWidth(),canvas.getHeight(),
位图.Config.ARGB_8888);
mCanvas=新画布(位图);
...
//在两个相邻(X,Y)点之间绘制棕色线
for(int i=0;i
}

我试图通过使用Handler/Runnable来实现这一点——现在我知道在onDraw中调用它是不好的(至少我的尝试是不好的)。。。
如何实现这一点,有什么建议吗?

每次调用
View.onDraw()
方法都应该绘制图表的下一行,这看起来就像您描述的动画。要实现帧间延迟,可以使用
View.postInvalidateDelayed()

private ArrayDeque mPoints=new ArrayDeque();
专用路径mPath;
私人油漆;
私人国际mBackgroundColor;
...
@凌驾
受保护的void onDraw(画布){
Point nextPoint=mPoints.pollFirst();
if(nextPoint!=null){
mPath.lineTo(nextPoint.x,nextPoint.y);
画布。drawColor(mBackgroundColor);
画布绘制路径(mPath,mPaint);
如果(mPoints.size()>0){
postInvalidateDelayed(时间单位为秒,单位为1);
}
}
}
公共虚空绘图图(列表点、int背景色、int前景色){
mPoints.addAll(点);
mBackgroundColor=背景色;
mPaint=新油漆();
mPaint.setColor(foregroundColor);
mPaint.设定行程宽度(5);
mPaint.setStyle(油漆、样式、笔划);
mPath=新路径();
百万帕移动到(0,0);
postInvalidateDelayed(时间单位为秒,单位为1);
}
从活动开始动画:

ChartView chart = (ChartView) findViewById(R.id.chart);
List<Point> points = new ArrayList<>();
points.add(new Point(0, 200));
points.add(new Point(200, 200));
points.add(new Point(200, 0));
points.add(new Point(0,0));
chart.drawChart(points, Color.BLACK, Color.RED);
ChartView chart=(ChartView)findviewbyd(R.id.chart);
列表点=新的ArrayList();
增加(新的点(0,200));
增加(新的点(200200));
增加(新的点(200,0));
添加(新的点(0,0));
图表。绘图图(点,颜色。黑色,颜色。红色);
ChartView chart = (ChartView) findViewById(R.id.chart);
List<Point> points = new ArrayList<>();
points.add(new Point(0, 200));
points.add(new Point(200, 200));
points.add(new Point(200, 0));
points.add(new Point(0,0));
chart.drawChart(points, Color.BLACK, Color.RED);