Android 在运行时绘制HSV圆

Android 在运行时绘制HSV圆,android,android-layout,Android,Android Layout,我想在我的应用程序中有一个颜色选择器,看起来像这样 我尝试过逐像素填充位图,尝试过使用canvas和drawArc()方法。这两种方法都不利于性能 有什么想法吗?它可能不是它应该是什么(与颜色、饱和度等相关),但它开始看起来像你想要的 import android.graphics.*; import android.graphics.drawable.Drawable; public class HSV_Circle extends Drawable { Paint p = new

我想在我的应用程序中有一个颜色选择器,看起来像这样

我尝试过逐像素填充位图,尝试过使用canvas和
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;
    }
}
导入android.graphics.*;
导入android.graphics.drawable.drawable;
公共级HSV_圆形延伸可拉深{
油漆p=新油漆();
@凌驾
公共空白绘制(画布){
int width=canvas.getWidth();
int height=canvas.getHeight();
int min=数学最小值(宽度、高度);
径向梯度径向梯度=新的径向梯度(宽度/2,高度/2,最小值/2,0xFFFFFFFF,
0x00FFFFFF,android.graphics.Shader.TileMode.CLAMP);
整数颜色[]=新整数[13];
浮动hsv[]=新浮动[3];
hsv[1]=1;
hsv[2]=1;

对于(int i=0;iWhy色轮必须动态生成?为什么不直接将问题中显示的png显示出来?不必如此,我只是希望它能够动态生成,以100%确保坐标与颜色正确关联。对于许多android程序来说,这是一个非常有效的编程问题rs试图制作一个颜色选择器。我完全同意关闭它的版主。这根本不是一个狭隘的情况。你可以在网站上找到一个颜色选择器的代码示例,就像我说的,我不确定颜色与位置的匹配。我认为色调是可以的,但饱和度可能需要一些调整/思考…至少,它很快。。..:)请记住,这在硬件加速视图中不起作用。只会绘制径向渐变。必须使用
视图.setLayerType
方法禁用硬件加速。