带有动画和圆角的不确定 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
如何创建具有动画效果且具有圆角的不确定进度条? 出于某种原因,如果您使用自己的动画列表作为动画,则无法定义形状。它永远是锋利的,前卫的,而不是圆润的。
这是我需要的:
一种解决方案是使用代码设置不确定的可绘制对象。
// 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