Android 增加clipPath大小会导致滞后

Android 增加clipPath大小会导致滞后,android,android-canvas,live-wallpaper,Android,Android Canvas,Live Wallpaper,我正在增加循环中clipPath的大小。在循环中还有另一个循环,它创建了更多的剪贴画,我用这些剪贴画来降低alpha,这样我就得到了一个过渡效果。但随着clipPath尺寸的增加,过渡变得缓慢和滞后 是这样的 int size = 5; Paint p1 = new Paint(); Path path = new Path(); for (int i = 0; i < 20; i++) { path.addCircle(centerX, centerY, size, Path.D

我正在增加循环中clipPath的大小。在循环中还有另一个循环,它创建了更多的剪贴画,我用这些剪贴画来降低alpha,这样我就得到了一个过渡效果。但随着clipPath尺寸的增加,过渡变得缓慢和滞后

是这样的

int size = 5;
Paint p1 = new Paint();
Path path = new Path();
for (int i = 0; i < 20; i++) {
    path.addCircle(centerX, centerY, size, Path.Direction.CCW);
    canvas.clipPath(path);
    canvas.drawBitmap(bmp2, 0, 0, null);
    path.reset();
    int incr = size;
    while (p1.getAlpha() != 0) {
        incr -= 1;
        p1.setAlpha(p1.getAlpha() - 5);
        path.addCircle(centerX, centerY, incr, Path.Direction.CCW);
        canvas.clipPath(path, Op.UNION);
        canvas.drawBitmap(bmp2, 0, 0, p1);
        path.reset();
    }
    size += 10;
}
int size=5;
油漆p1=新油漆();
路径路径=新路径();
对于(int i=0;i<20;i++){
添加圆(centerX,centerY,size,path.Direction.CCW);
canvas.clipPath(路径);
drawBitmap(bmp2,0,0,null);
path.reset();
int incr=大小;
而(p1.getAlpha()!=0){
增量=1;
p1.setAlpha(p1.getAlpha()-5);
添加圆(centerX,centerY,incr,path.Direction.CCW);
canvas.clipPath(路径,Op.UNION);
drawBitmap(bmp2,0,0,p1);
path.reset();
}
尺寸+=10;
}
期望结果

我知道这是一种不好的方法,但这是我所能想到的。

其中的一些提示可能适用:

以下列表描述了不受支持的已知操作 硬件加速:

Canvas.clipPath()

[……]

不要在绘制方法中创建渲染对象

一个常见的错误是每次调用渲染方法时都创建新的绘制或新路径。这将强制垃圾收集器 更频繁地运行,并绕过中的缓存和优化 硬件管道

此外,我在某个地方读到/听说,无论何时修改路径,都会生成一个掩码并重新加载到GPU(?),因此不应该经常修改它们。因此,是的,代码可能运行得不快

您可能对以下视频感兴趣:


编辑:我不知道实际的替代方法,但如果除了使用路径之外没有其他方法,您可以保留它们的数组,而无需修改它们。但是,如果动画有许多帧,这可能意味着大量的内存。

那么,您能告诉我如何避免对路径的更改来实现效果吗。我在帖子上加了一张照片。