Android:不删除先前绘制的连续绘制

Android:不删除先前绘制的连续绘制,android,kotlin,android-animation,Android,Kotlin,Android Animation,考虑要按顺序设置路径列表的动画 我有一个自定义视图,可以存储路径列表,我覆盖onDraw方法,以便选择要设置动画的路径。我使用名为currentPath的索引来实现这一点 var pathList = mutableListOf<Path>() var currentPath = 0 public override fun onDraw(canvas: Canvas) { if (!this.pathList.isEmpty()){ canv

考虑要按顺序设置路径列表的动画

我有一个自定义视图,可以存储路径列表,我覆盖onDraw方法,以便选择要设置动画的路径。我使用名为currentPath的索引来实现这一点

var pathList = mutableListOf<Path>()
var currentPath = 0

public override fun onDraw(canvas: Canvas) {
        if (!this.pathList.isEmpty()){
            canvas.drawPath(this.pathList[this.currentPath], brushOutput)
        }

    }
然后,为了按顺序设置路径列表的动画,我使用了一个具有以下内容的AnimatorSet

val animatorSet = AnimatorSet()
val listAnimator = mutableListOf<Animator>()

for (i in 0..len-1){
    val path_i = OnePath(paint, lengthList[i], binding.paintView, i)
    listAnimator.add(path_i.animator)
}
animatorSet.playSequentially(listAnimator)
animatorSet.setDuration(2000).start()
val animatorSet=animatorSet()
val listAnimator=mutableListOf()
对于(0..len-1中的i){
val path_i=OnePath(绘制,长度列表[i],binding.paintView,i)
listAnimator.add(路径\u i.animator)
}
animatorSet.Play顺序(listAnimator)
animatorSet.setDuration(2000).start()
但是,这样做的结果是,每个路径都按顺序设置动画,但只要绘制了一条路径,下一条路径设置动画时,它就会消失


我想要的是保持屏幕上已设置动画的每条路径。您将如何执行此操作?

您可以使用一对
位图
Canvas
PaintView
中缓存以前绘制的路径:

private Canvas extraCanvas;
private Bitmap extraBitmap;

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);
    if(extraBitmap != null && !extraBitmap.isRecycled()){
        extraBitmap.recycle();
    }
    extraBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
    extraCanvas = new Canvas(extraBitmap);
}

@Override
protected void onDraw(Canvas canvas) {
    if (!this.pathList.isEmpty()){
        extraCanvas.drawPath(pathList.get(currentPath), brushOutput);
    }

    // Draw the bitmap that has all the saved paths:
    canvas.drawBitmap(extraBitmap, 0f, 0f, null);
}

另请参见

上的codelab,您认为它也适用于动画吗?我已经看过这个可乐了,但还没有试过。事实上,我在屏幕上也有同样的界面。但是,从触摸输入为绘图设置动画和为这些相同的线条设置动画是两项不同的任务。@jmamath-我将它与您的AnimatorSet一起使用,并按顺序绘制了所有路径。没有一个被抹掉。好吧,让我试试。
private Canvas extraCanvas;
private Bitmap extraBitmap;

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);
    if(extraBitmap != null && !extraBitmap.isRecycled()){
        extraBitmap.recycle();
    }
    extraBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
    extraCanvas = new Canvas(extraBitmap);
}

@Override
protected void onDraw(Canvas canvas) {
    if (!this.pathList.isEmpty()){
        extraCanvas.drawPath(pathList.get(currentPath), brushOutput);
    }

    // Draw the bitmap that has all the saved paths:
    canvas.drawBitmap(extraBitmap, 0f, 0f, null);
}