在android customview中设置Canvas.drawline动画

在android customview中设置Canvas.drawline动画,canvas,draw,paint,progress,animated,Canvas,Draw,Paint,Progress,Animated,我目前在一个旅游应用程序上工作,我有一条垂直线,代表你在旅行中取得的进展。 这是我的类的onDraw函数: @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if (paint != null) { canvas.drawLine(startingX, startingY, startingX, progress + startingY, paint);

我目前在一个旅游应用程序上工作,我有一条垂直线,代表你在旅行中取得的进展。 这是我的类的onDraw函数:

  @Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    if (paint != null) {
        canvas.drawLine(startingX, startingY, startingX, progress + startingY, paint);
        if (transitTrip) {

            if (ratio > progresses.get(0)) {
                canvas.drawBitmap(waypointPassedBig, startingX - bitmap.getWidth() / 2, (24 * Constants.density) + (0 * (totalProgress + 10 * Constants.density) / (progresses.size() - 1)), paint);
            } else {
                canvas.drawBitmap(waypointBig, startingX - bitmap.getWidth() / 2, (24 * Constants.density) + (0 * (totalProgress + 10 * Constants.density) / (progresses.size() - 1)), paint);
            }
            for (int i = 1; i < progresses.size(); i++) {
                if (ratio > progresses.get(i)) {
                    canvas.drawBitmap(waypointPassed, startingX - bitmap.getWidth() / 2, (24 * Constants.density) + (i * (totalProgress + 10 * Constants.density) / (progresses.size() - 1)), paint);
                } else {
                    canvas.drawBitmap(waypoint, startingX - bitmap.getWidth() / 2, (24 * Constants.density) + (i * (totalProgress + 10 * Constants.density) / (progresses.size() - 1)), paint);
                }
            }
            if (ratio > progresses.get(progresses.size()-1)) {
                canvas.drawBitmap(waypointPassedBig, startingX - bitmap.getWidth() / 2, (24 * Constants.density) + ((progresses.size()-1) * (totalProgress + 10 * Constants.density) / (progresses.size() - 1)), paint);
            } else {
                canvas.drawBitmap(waypointBig, startingX - bitmap.getWidth() / 2, (24 * Constants.density) + ((progresses.size()-1) * (totalProgress + 10 * Constants.density) / (progresses.size() - 1)), paint);
            }
        }
        canvas.drawBitmap(bitmap, startingX - bitmap.getWidth() / 2, progress + startingY - bitmap.getHeight() / 2, paint);
    }

}
@覆盖
受保护的void onDraw(画布){
super.onDraw(帆布);
如果(绘制!=null){
画布.抽绳(开始,开始,开始,开始,进度+开始,绘画);
if(transitTrip){
如果(比率>进度。获取(0)){
canvas.drawBitmap(waypointPassedBig,startingX-bitmap.getWidth()/2,(24*Constants.density)+(0*(totalProgress+10*Constants.density)/(Progress.size()-1)),绘制);
}否则{
canvas.drawBitmap(waypointBig,startingX-bitmap.getWidth()/2,(24*常数.密度)+(0*(totalProgress+10*常数.密度)/(Progress.size()-1)),绘制);
}
for(int i=1;i进度。获取(i)){
canvas.drawBitmap(通过的航路点,startingX-bitmap.getWidth()/2,(24*常数.密度)+(i*(totalProgress+10*常数.密度)/(Progress.size()-1)),绘制);
}否则{
canvas.drawBitmap(航路点,startingX-bitmap.getWidth()/2,(24*常数.密度)+(i*(totalProgress+10*常数.密度)/(Progress.size()-1)),绘制);
}
}
if(比率>progress.get(progress.size()-1)){
canvas.drawBitmap(waypointPassedBig,startingX-bitmap.getWidth()/2,(24*Constants.density)+(Progress.size()-1)*(totalProgress+10*Constants.density)/(Progress.size()-1)),绘制);
}否则{
canvas.drawBitmap(waypointBig,startingX-bitmap.getWidth()/2,(24*常数.密度)+(progress.size()-1)*(totalProgress+10*常数.密度)/(progress.size()-1)),绘制);
}
}
drawBitmap(位图,startingX-bitmap.getWidth()/2,progress+startingY-bitmap.getHeight()/2,paint);
}
}
如你所见,我先画线,然后画航路点,最后画我的位置。 “进度”表示从0%到100%的行程进度。 现在,如果进度为50%,它将直接绘制视图一半的线。现在,我需要这个动画线,而不仅仅是简单地出现。 我怎样才能有效地做到这一点? 我尝试设置一个路径列表,而不是“drawline”,在for中(我遍历了该线的所有点,并为每个点创建一条从起点到该点的线)。之后,我尝试设置一个增量,每个onDraw只从起点到路径的点进行绘制,由增量表示,但像这样它什么也不绘制