3

我派生了一个类View并实现了该onDraw方法,如下所示:

protected void onDraw( Canvas canvas )
{
    Paint p = new Paint();
    p.setColor( Color.HSVToColor( new float[]{ 1.f, 1.f, 1.f } ) );
    p.setStyle( Paint.Style.FILL );
    canvas.drawRect( area, p );
}

我期待看到一个颜色不同的矩形,但屏幕保持白色,不管我为色调、值和饱和度尝试了哪些值。变量area是一个RectF。没关系,因为如果我将颜色设置为Color.RED,它会起作用。

Android 文档说明Color.HSVToColor

将 HSV 组件转换为 ARGB 颜色。Alpha 设置为 0xFF。hsv[0] 是色调 [0 .. 360) hsv[1] 是饱和度 [0...1] hsv[2] 是值 [0...1] 如果 hsv 值超出范围,则它们被固定。

我尝试了很多色相/饱和度/数值组合,但屏幕始终保持空白。此外,我尝试了以下方法,结果相同:

float[] hsv = new float[ 3 ];
Color.colorToHSV( Color.RED, hsv );

Paint p = new Paint();
p.setColor( Color.HSVToColor( hsv ) );
p.setStyle( Paint.Style.FILL );
canvas.drawRect( area, p );

我究竟做错了什么?

4

2 回答 2

6

你的平局应该可以正常工作。除了平局之外,一定有一些东西丢失了,或者你做得不对。

mpaint.setColor( Color.HSVToColor( new float[]{ 1f, 1f, 1f } ) );   

以上应将颜色设置为红色。

我所做的与您在 onDraw() 中所做的类似,只是我更改了值并且它可以工作。

public class FingerPaintActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyView mv= new MyView(this);
setContentView(mv);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
class MyView extends View
{
    Context c;      
    private Paint mpaint;

public MyView(Context context) {
    super(context);
    c= context;
    mpaint= new Paint();
    //mpaint.setColor(Color.RED);
    mpaint.setColor( Color.HSVToColor( new float[]{ 0f, 0f, 0.5f } ) );
    mpaint.setStyle(Paint.Style.FILL);
 }

    @Override
    protected void onDraw(Canvas canvas) {
       canvas.drawRect(300, 100, 200, 300, mpaint);

    }
}
}

http://developer.android.com/reference/android/graphics/Color.html#HSVToColor%28int,%20float%5B%5D%29

在此处输入图像描述

于 2013-03-30T17:21:40.220 回答
4

Color.HSVToColor 调用本机帮助函数,因此它在 Eclipse 或 Android Studio 上的预览模式下都不起作用。

这是该功能的来源:

public static int HSVToColor(int alpha, float hsv[]) {
    if (hsv.length < 3) {
        throw new RuntimeException("3 components required for hsv");
    }
    return nativeHSVToColor(alpha, hsv);
}

查看java.awt.Color以获取将 RGB 转换为 HSV 并返回的 Java 代码。

http://grepcode.com/file_/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/awt/Color.java/?v=source

于 2014-05-27T06:53:25.270 回答