我想创建一个类似于 gmail 应用程序的进度条(中间进度条)来改变颜色。我可以通过保持和更新来自 sdk/platforms 的 progress_indeterminate_horizontal.xml 来做到这一点。我不想使用动画(多色图像)。我想使用 xml 来实现这一点(我想使用渐变)。任何帮助将不胜感激。
提前致谢
我想创建一个类似于 gmail 应用程序的进度条(中间进度条)来改变颜色。我可以通过保持和更新来自 sdk/platforms 的 progress_indeterminate_horizontal.xml 来做到这一点。我不想使用动画(多色图像)。我想使用 xml 来实现这一点(我想使用渐变)。任何帮助将不胜感激。
提前致谢
这是我的实现:绘制动画彩虹渐变。酷,如果我自己这么说的话。它不是基于 XML 的,但可以做成这样,而且它确实使用了渐变。也许它会给你一些想法。
设置:
pb = (ProgressBar) findViewById(R.id.progressbar_Horizontal);
GradientDrawable rainbow = new GradientDrawable(Orientation.LEFT_RIGHT,
new int[] {Color.RED, Color.MAGENTA, Color.BLUE, Color.CYAN, Color.GREEN, Color.YELLOW, Color.RED});
AnimationDrawable ad = getProgressBarAnimation();
pb.setBackgroundDrawable(ad);
和动画:
private AnimationDrawable getProgressBarAnimation(){
GradientDrawable rainbow1 = new GradientDrawable(Orientation.LEFT_RIGHT,
new int[] {Color.RED, Color.MAGENTA, Color.BLUE, Color.CYAN, Color.GREEN, Color.YELLOW});
GradientDrawable rainbow2 = new GradientDrawable(Orientation.LEFT_RIGHT,
new int[] { Color.YELLOW, Color.RED, Color.MAGENTA, Color.BLUE, Color.CYAN, Color.GREEN});
GradientDrawable rainbow3 = new GradientDrawable(Orientation.LEFT_RIGHT,
new int[] { Color.GREEN, Color.YELLOW, Color.RED, Color.MAGENTA, Color.BLUE, Color.CYAN });
GradientDrawable rainbow4 = new GradientDrawable(Orientation.LEFT_RIGHT,
new int[] { Color.CYAN, Color.GREEN, Color.YELLOW, Color.RED, Color.MAGENTA, Color.BLUE });
GradientDrawable rainbow5 = new GradientDrawable(Orientation.LEFT_RIGHT,
new int[] { Color.BLUE, Color.CYAN, Color.GREEN, Color.YELLOW, Color.RED, Color.MAGENTA });
GradientDrawable rainbow6 = new GradientDrawable(Orientation.LEFT_RIGHT,
new int[] {Color.MAGENTA, Color.BLUE, Color.CYAN, Color.GREEN, Color.YELLOW, Color.RED });
GradientDrawable[] gds = new GradientDrawable[] {rainbow1, rainbow2, rainbow3, rainbow4, rainbow5, rainbow6};
AnimationDrawable animation = new AnimationDrawable();
for (GradientDrawable gd : gds){
animation.addFrame(gd, 100);
}
animation.setOneShot(false);
return animation;
}
科特林
设置:
val ad = getProgressBarAnimation()
progressBar.background = ad
和动画:
fun getProgressBarAnimation(): AnimationDrawable {
val rainbow1 = GradientDrawable(GradientDrawable.Orientation.LEFT_RIGHT,
intArrayOf(Color.RED, Color.MAGENTA, Color.BLUE, Color.CYAN, Color.GREEN, Color.YELLOW))
val rainbow2 = GradientDrawable(GradientDrawable.Orientation.LEFT_RIGHT,
intArrayOf(Color.YELLOW, Color.RED, Color.MAGENTA, Color.BLUE, Color.CYAN, Color.GREEN))
val rainbow3 = GradientDrawable(GradientDrawable.Orientation.LEFT_RIGHT,
intArrayOf(Color.GREEN, Color.YELLOW, Color.RED, Color.MAGENTA, Color.BLUE, Color.CYAN))
val rainbow4 = GradientDrawable(GradientDrawable.Orientation.LEFT_RIGHT,
intArrayOf(Color.CYAN, Color.GREEN, Color.YELLOW, Color.RED, Color.MAGENTA, Color.BLUE))
val rainbow5 = GradientDrawable(GradientDrawable.Orientation.LEFT_RIGHT,
intArrayOf(Color.BLUE, Color.CYAN, Color.GREEN, Color.YELLOW, Color.RED, Color.MAGENTA))
val rainbow6 = GradientDrawable(GradientDrawable.Orientation.LEFT_RIGHT,
intArrayOf(Color.MAGENTA, Color.BLUE, Color.CYAN, Color.GREEN, Color.YELLOW, Color.RED))
val gds = arrayListOf(rainbow1, rainbow2, rainbow3, rainbow4, rainbow5, rainbow6)
val animation = AnimationDrawable()
for (gd in gds) {
animation.addFrame(gd, 100)
}
animation.isOneShot = false;
return animation;
}
这就是你要找的。在你的项目中添加这个库,你就可以使用它了。
然后你就可以把它当作一个普通的进程栏了。例子:
private SmoothProgressBar mProgressBar;
创建时:
mProgressBar = (SmoothProgressBar) findViewById(R.id.progressbar);
mProgressBar.progressiveStart();
暂停:
mProgressBar.progressiveStop();