Android 使用多种颜色的扫掠渐变在自定义视图中绘制圆弧
Android drawing an arc in custom view using sweep gradient with multiple colors
我正在尝试绘制一个自定义视图,它有一个 Arc,它将填充 4 种颜色的渐变,我选择 SweepGradient 来适合这个,当我尝试它时它适用于两种颜色,即使添加更多颜色我无法获得其他两种颜色。我尝试了不同的职位组合,但似乎没有任何效果。
int colorRes[] = {R.color.yellow, R.color.green,R.color.oragne, R.color.red};
float stops[] = {0,0.3f,0.6f,1};
int colors[] = new int[colorRes.length];
for(int i=0;i<colorRes.length;i++){
colors[i]= context.getResources().getColor(colorRes[i]);
}
Shader gradient = new SweepGradient (wdith/2,height/2, colors, stops));
lighted.setShader(gradient);
canvas.drawArc(rectf, 130, 280, false, lightRed);
我有类似的问题。我这边发生这种情况的原因是 - 宽度和高度为 0。
所以实际上这样做 -
new SweepGradient (wdith/2,height/2, colors, stops));
我明白了 -
new SweepGradient (0,0, colors, stops));
所以为了确保宽度和高度不为 0,我这样做了 -
@Override
public void onDraw(Canvas canvas) {
if (mShader == null) {
float cX = getWidth() / 2F;
float cY = getHeight() / 2F;
mShader = new SweepGradient(cX, cY, getRingColors(), null);
}
testPaint1.setShader(mShader);
canvas.drawCircle(getWidth() / 2, getHeight() / 2, getResources().getDimensionPixelSize(R.dimen.status_ring_dimen), testPaint1);
}
private int[] getRingColors() {
return new int[]{
getResources().getColor(R.color.md_blue_500),
getResources().getColor(R.color.md_red_400),
getResources().getColor(R.color.md_green_500),
getResources().getColor(R.color.md_blue_500)
// the first and last color should be the same to get a smooth transition of colors
};
}
对我来说,实际问题是因为 Android Studio 中的一个错误尚未修复。
请查看报告的问题here
SweepGradient 在布局预览中的渲染在 Android Studio 中失败,而 在真实设备中它工作正常。
我意识到在真实设备上测试自定义视图总是好的。
我正在尝试绘制一个自定义视图,它有一个 Arc,它将填充 4 种颜色的渐变,我选择 SweepGradient 来适合这个,当我尝试它时它适用于两种颜色,即使添加更多颜色我无法获得其他两种颜色。我尝试了不同的职位组合,但似乎没有任何效果。
int colorRes[] = {R.color.yellow, R.color.green,R.color.oragne, R.color.red};
float stops[] = {0,0.3f,0.6f,1};
int colors[] = new int[colorRes.length];
for(int i=0;i<colorRes.length;i++){
colors[i]= context.getResources().getColor(colorRes[i]);
}
Shader gradient = new SweepGradient (wdith/2,height/2, colors, stops));
lighted.setShader(gradient);
canvas.drawArc(rectf, 130, 280, false, lightRed);
我有类似的问题。我这边发生这种情况的原因是 - 宽度和高度为 0。
所以实际上这样做 -
new SweepGradient (wdith/2,height/2, colors, stops));
我明白了 -
new SweepGradient (0,0, colors, stops));
所以为了确保宽度和高度不为 0,我这样做了 -
@Override
public void onDraw(Canvas canvas) {
if (mShader == null) {
float cX = getWidth() / 2F;
float cY = getHeight() / 2F;
mShader = new SweepGradient(cX, cY, getRingColors(), null);
}
testPaint1.setShader(mShader);
canvas.drawCircle(getWidth() / 2, getHeight() / 2, getResources().getDimensionPixelSize(R.dimen.status_ring_dimen), testPaint1);
}
private int[] getRingColors() {
return new int[]{
getResources().getColor(R.color.md_blue_500),
getResources().getColor(R.color.md_red_400),
getResources().getColor(R.color.md_green_500),
getResources().getColor(R.color.md_blue_500)
// the first and last color should be the same to get a smooth transition of colors
};
}
对我来说,实际问题是因为 Android Studio 中的一个错误尚未修复。
请查看报告的问题here
SweepGradient 在布局预览中的渲染在 Android Studio 中失败,而 在真实设备中它工作正常。
我意识到在真实设备上测试自定义视图总是好的。