带有动画和圆角的不确定 ProgressBar

Indeterminate ProgressBar with animation and rounded corners

如何创建具有动画效果且具有圆角的不确定进度条? 出于某种原因,如果您使用自己的动画列表作为动画,则无法定义形状。它永远是锋利的,前卫的,而不是圆润的。

这是我需要的:

一种解决方案是使用代码设置不确定的可绘制对象。

// ProgressBar when parsing indeterminate drawable from XML sets rounded corners.   progressBar.setIndeterminateDrawable(context.getResources().getDrawable(R.drawable.progressbar));

然后使用进度条

<?xml version="1.0" encoding="UTF-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false">
 <item android:drawable="@drawable/progress_2b" android:duration="100" />
 <item android:drawable="@drawable/progress_1b" android:duration="100" />
</animation-list>

从上面的android:drawable可以看出,有2张图片。 progress_1b 和 progress_2b.

它们看起来像这样。

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/progress_1"
    android:tileMode="repeat" >
</bitmap>`

我的作品。

最后我遵循了编码方法。基本上为每一帧生成一个平铺和裁剪的可绘制对象。我相信原来的进度条做了类似的事情。

(部分省略)

final ShapeDrawable shape = new ShapeDrawable(new RoundRectShape(6 /*px*/, null, null));
final AnimationDrawable background = (AnimationDrawable) getResources().getDrawable(R.drawable.progress_bar_indeterminate_animation_list);
final int N = background.getNumberOfFrames();
AnimationDrawable newBg = new AnimationDrawable();
newBg.setOneShot(background.isOneShot());

for (int i = 0; i < N; i++) {
    final Bitmap tileBitmap = ((BitmapDrawable) background.getFrame(i)).getBitmap();

    final BitmapShader bitmapShader = new BitmapShader(tileBitmap, Shader.TileMode.REPEAT, Shader.TileMode.REPEAT);
    shape.getPaint().setShader(bitmapShader);

    final Drawable result = new ClipDrawable(shape, Gravity.LEFT, ClipDrawable.HORIZONTAL);
    result.setLevel(10000);
    newBg.addFrame(result, background.getDuration(i));
}
newBg.setLevel(10000);
progressBar.setIndeterminateDrawable(newBg);

progress_bar_indeterminate_animation_list 是:

<animation-list android:oneshot="false">
    <item android:drawable="@drawable/install_progressbar_indeterminate1" android:duration="200" />
    <item android:drawable="@drawable/install_progressbar_indeterminate2" android:duration="200" />
    <item android:drawable="@drawable/install_progressbar_indeterminate3" android:duration="200" />
</animation-list>

完整代码在这里:http://mikinw.blogspot.co.uk/2015/05/indeterminate-progressbar-with-rounded.html