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

色付きの長方形が表示されることを期待していますが、画面は白のままで、色相、値、彩度にどの値を試しても問題ありません。変数areaRectF. に色をつければうまくいくので大丈夫Color.REDです。

Android のドキュメントには次のように記載されていColor.HSVToColorます。

HSV コンポーネントを ARGB カラーに変換します。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);
}

RGB を HSV に変換したり、その逆に変換したりする Java コードについては、java.awt.Colorを確認してください。

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 に答える