使用动画和圆角不确定ProgressBar

时间:2015-05-27 16:47:05

标签: android android-view

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

这就是我需要的:

enter image description here

2 个答案:

答案 0 :(得分:1)

一种解决方案是使用代码设置不确定的drawable。

// 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>`

为moi工作。

答案 1 :(得分:0)

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

(为简洁起见,省略了一些部分)

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