我想在我的应用程序中有一个颜色选择器,看起来像这样
我试过逐像素填充位图,尝试使用画布和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;
}
}