android - 在运行时绘制 HSV 圆

标签 android android-layout

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

Something like this

我尝试过逐像素填充位图,尝试使用带有 drawArc() 方法的 Canvas 。这两种方式都不利于性能。

有什么想法吗?

最佳答案

它可能不准确(与颜色、饱和度等相关),但是 here is something开始看起来像你想要的......

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 - 在运行时绘制 HSV 圆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13266735/

相关文章:

Android LinearLayout 展开

android - EditText 显示状态栏,或导致上面的内容移动而不是调整大小

android - adjustResize 向上推 EditText 但不向上推 RecyclerView

android - 为什么BaseAdapter不需要括号?

android - 三星 S4 健康应用程序 API

android - 使用 Google Service API 获取最后已知位置

java - SQLite 获取数据

android - 在维度中分配包装内容

java - 如何在 Android 上以编程方式备份​​应用程序

java - 如何修复 ArrayAdapter 在 listView 滚动时改变位置?