我希望我的应用程序中有一个颜色选择器,看起来像这样:
我尝试了逐像素填充位图和使用带有
有什么想法吗?
![类似于此](https://istack.dev59.com/Bkqjg.webp)
drawArc()
方法的画布。这两种方法都对性能不利。有什么想法吗?
drawArc()
方法的画布。这两种方法都对性能不利。这可能不完全是你想要的(与颜色、饱和度等相关),但这里有个东西开始看起来像你想要的样子...
import android.graphics.*;
import android.graphics.drawable.Drawable;
public class HSV_Circle extends Drawable {
Paint p = new Paint();
@Override
public void draw(Canvas canvas) {
int width = canvas.getWidth();
int height = canvas.getHeight();
int min = Math.min(width,height);
RadialGradient radial_gradient = new RadialGradient(width/2, height/2, min/2, 0xFFFFFFFF,
0x00FFFFFF, android.graphics.Shader.TileMode.CLAMP);
int colors[] = new int[13];
float hsv[] = new float[3];
hsv[1]=1;
hsv[2]=1;
for (int i=0; i<12; i++) {
hsv[0] = (360 / 12) * i;
colors[i] = Color.HSVToColor(hsv);
}
colors[12] = colors[0];
SweepGradient sweep_gradient = new SweepGradient(width/2, height/2, colors, null);
ComposeShader shader = new ComposeShader(sweep_gradient, radial_gradient, PorterDuff.Mode.SRC_OVER);
p.setDither(true);
p.setShader(shader);
canvas.drawCircle(width/2, height/2, min/2, p);
}
@Override
public void setAlpha(int i) {
}
@Override
public void setColorFilter(ColorFilter colorFilter) {
}
@Override
public int getOpacity() {
return PixelFormat.OPAQUE;
}
}