アプリにカラーピッカーをこのように表示したい
ビットマップをピクセルごとに塗りつぶし、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;
}
}