Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法使Color.HSVToColor在Android上工作_Android_Hsv - Fatal编程技术网

无法使Color.HSVToColor在Android上工作

无法使Color.HSVToColor在Android上工作,android,hsv,Android,Hsv,我从视图派生了一个类,并实现了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 ); } 我希望看到一个彩色的矩形,

我从
视图
派生了一个类,并实现了
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 );
}
我希望看到一个彩色的矩形,但屏幕保持白色,不知道我尝试的色调、值和饱和度值。变量
区域
是一个
RectF
。这很好,因为如果我将颜色设置为
color.RED
,它就会工作

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);

    }
}
}
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 );

我做错了什么?

你的画应该很好。一定是缺少了什么东西,或者是你画得不对的东西

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);

    }
}
}


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);
}
public static int-HSVToColor(int-alpha,float-hsv[]){
如果(hsv.长度<3){
抛出新的RuntimeException(“hsv需要3个组件”);
}
返回本地hsv颜色(alpha,hsv);
}
查看java.awt.Color获取将RGB转换为HSV并返回的java代码


谢谢,我一回到家就会检查。现在我正在用手机写信。如果我在不同的地方犯了错误,那会有多奇怪,因为如果我只更改
p.setColor
行或
Color.RED
。一定要用hsv而不是hsl检查。你可以从这里检查:你是对的,drawing代码很好。但是,由于某种原因,Eclipse Android UI bilder在使用
Color.HSVToColor
时绘制失败。不行!我在HSVToColor上浪费了几个小时,没有在表单设计器中工作!该死的Android!