具有渐变 alpha 颜色渐变、黑色细边框和平铺背景的自定义 SeekBar
CustomSeekBar with fading alpha color gradient, black thin border, and tiled background
目标
我正在尝试复制此对话框。
当前状态
但我只讲到这里(只显示相关部分):
缺少什么
一种在我的自定义 Seekbar "progress area" 周围添加黑色细边框的方法,并且平铺背景仅限于此 "progress area"。
我的代码
实际上,我的 CustomSeekBar
(extends AppCompatSeekBar
)可以很好地在代码中设置开始和结束颜色。这是函数:
public void setGradientColor(@ColorInt int leftColor, @ColorInt int rightcolor) {
grad = new GradientDrawable(GradientDrawable.Orientation.LEFT_RIGHT,
new int[] {leftColor, rightcolor});
setProgressDrawable(grad);
}
但是尝试设置背景图像最终看起来像我在 The current state
图像中的最后一个搜索栏(背景延伸到进度区域之外并填充所有视图区域):
aSeekBar.setBackground(context.getDrawable(R.drawable.checker));
aSeekBar.setGradientColor(Color.parseColor("#00000000"), Color.parseColor("#FF000000"));
我的 checker.xml
文件在 res/drawable
:
<?xml version="1.0" encoding="utf-8"?>
<bitmap
xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/checkerstile"
android:tileMode="repeat"
/>
对于问题的 "Border" 部分,您只需向 GradientDrawable 添加一个 Stroke 即可:
public void setGradientColor(@ColorInt int leftColor, @ColorInt int rightcolor) {
grad = new GradientDrawable(GradientDrawable.Orientation.LEFT_RIGHT,
new int[] {leftColor, rightcolor});
grad.setStroke(/* stroke width*/, /* int color*/);
setProgressDrawable(grad);
}
就这么简单,对不起,我不能帮忙做背景。
我找到了一个可行的解决方案:
int padding = aSeekBar.getPaddingStart();
InsetDrawable bgImg = new InsetDrawable(context.getDrawable(R.drawable.checker), padding);
aSeekBar.setBackground(bgImg);
将此与边框的 结合,您会得到以下结果:
目标
我正在尝试复制此对话框。
当前状态
但我只讲到这里(只显示相关部分):
缺少什么
一种在我的自定义 Seekbar "progress area" 周围添加黑色细边框的方法,并且平铺背景仅限于此 "progress area"。
我的代码
实际上,我的 CustomSeekBar
(extends AppCompatSeekBar
)可以很好地在代码中设置开始和结束颜色。这是函数:
public void setGradientColor(@ColorInt int leftColor, @ColorInt int rightcolor) {
grad = new GradientDrawable(GradientDrawable.Orientation.LEFT_RIGHT,
new int[] {leftColor, rightcolor});
setProgressDrawable(grad);
}
但是尝试设置背景图像最终看起来像我在 The current state
图像中的最后一个搜索栏(背景延伸到进度区域之外并填充所有视图区域):
aSeekBar.setBackground(context.getDrawable(R.drawable.checker));
aSeekBar.setGradientColor(Color.parseColor("#00000000"), Color.parseColor("#FF000000"));
我的 checker.xml
文件在 res/drawable
:
<?xml version="1.0" encoding="utf-8"?>
<bitmap
xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/checkerstile"
android:tileMode="repeat"
/>
对于问题的 "Border" 部分,您只需向 GradientDrawable 添加一个 Stroke 即可:
public void setGradientColor(@ColorInt int leftColor, @ColorInt int rightcolor) {
grad = new GradientDrawable(GradientDrawable.Orientation.LEFT_RIGHT,
new int[] {leftColor, rightcolor});
grad.setStroke(/* stroke width*/, /* int color*/);
setProgressDrawable(grad);
}
就这么简单,对不起,我不能帮忙做背景。
我找到了一个可行的解决方案:
int padding = aSeekBar.getPaddingStart();
InsetDrawable bgImg = new InsetDrawable(context.getDrawable(R.drawable.checker), padding);
aSeekBar.setBackground(bgImg);
将此与边框的