2017-11-23 8 views
0

私はいくつかのスライダ付きのアプリを持っています。目的は、接続しているLEDライトの色を変更することです。私はLEDの色の近似を与えるために放射状の勾配の色を変更する関数を持つUIを実装しています。Android:GradientDrawableちょうど黒を描く

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="rectangle" > 

<gradient 
    android:id="@+id/radGrad" 
    android:centerColor="#ecd473" 
    android:centerY="0%" 
    android:centerX="0%" 
    android:endColor="#000000" 
    android:gradientRadius="600" 
    android:innerRadiusRatio="2" 
    android:startColor="#f9f7a8" 
    android:type="radial" > 
</gradient> 
</shape> 

と私の活動のレイアウトで:

私はこのようなデフォルトの背景を定義することができ

これは、このようになります背景として表示されます。enter image description here

私がしようとしていますピクチャ内のスライダで選択された値で背景を上書きします。基本的に、左上隅に放射状のグラデーションを持つ同じ背景イメージをさまざまな色で作成したいが、私は立ち往生している。ここで

私のJavaコードがOnCreate関数(後に、である)

View backgroundView; 
GradientDrawable background; 
background = this.getWindow().getDecorView(); 

とコードの残りの部分私は、送信ボタンを選択:どんなに私はbackground.setColorsを養う何色

submitButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      color = new int[3]; 
      color[0]=0xecd473; //these values will eventually be changed by the slider 
      color[1]=0xf9f7a8; 
      color[2]=0xffffff; 
      background = new GradientDrawable(GradientDrawable.Orientation.BL_TR, color); 
      background.mutate(); 
      background.setGradientType(GradientDrawable.RADIAL_GRADIENT); 
      background.setGradientRadius(600); 
      background.setGradientCenter(0,0); 
      background.setShape(GradientDrawable.RECTANGLE); 
      background.setCornerRadius(50f); 
      background.setColors(color); 
      backgroundView.setBackground(background); 
      progressTextView.setText("Hue: " + hueValue + " Brightness: " + brightValue + " Saturation: " + satValue); 
     } 
    }); 

}  

を(色)をクリックすると背景が黒く表示されます。私は何か重要なことを見逃しているように感じ、他の例は助けになりませんでした。私はこれがはっきりしていることを望む

答えて

0

私はそれを理解しました。色の値はアルファ値が欠けていたので、透明であるか、関数がそれを取っていないと推測しています。それぞれの色の値にffを加えることによって、背景に焦点が当てられました。

0

まず、backdround.mutate()を使用する必要はありません。オブジェクトはすでに変更可能です。また、関数.setColor()にはargb値が必要です。ドキュメントではrgbも受け付けていると言われていますが、アルファなしでargb値を100%透明度に変換します。これは不可視でもあります。値を渡すときにアルファを追加する必要があります。だから、あなたのrgbの前に余分なFFが必要です。

関連する問題