2016-11-07 5 views
-1

ダイナミックなパーセントタグでビューを作成して、ビューとコーナー(図のように)に異なる色を設定しようとしています。ダイナミックなマルチカラーとコーナーで背景を表示

enter image description here

のみ設定マルチカラーの場合は、ちょうどビューの幅のパーセントを計算して、それを終了する色を設定し、それを行うのは非常に簡単です。しかし、私はどのようにコーナーでそれを行うか分かりません。

アイデアはありますか?

ありがとうございます。

EDIT

私はShapeDrawableソリューションを使用し、結果は以下のようにあります。 色とパーセントタグのみを更新します。

私の質問は何ですか:なぜ分割線が斜めになっているのですか?

enter image description here

UPDATEがあり、結果を得るためにsucceswであるが、これは私が欲しいものではありません

..私は、私は以下のような明確な分割を得ることができると思います

enter image description here

enter image description here

+0

私はこのような解決策を見つけました:https://azzits.wordpress.com/2013/11/17/customseekbar/ しかし私はそれが私の望むものではありません... – AlanChien

答えて

0

私はあなたが期待したことを達成したと思います。残念ながら、このようなドロアブルは.xmlとして作成することはできませんが、コードで行うことができます。ここにテンプレートがあります:

ShapeDrawable.ShaderFactory sf = new ShapeDrawable.ShaderFactory() { 
    @Override 
    public Shader resize(int width, int height) { 
     LinearGradient lg = new LinearGradient(0, 0, width, 0, 
        new int[]{ 
          ContextCompat.getColor(getContext(), android.R.color.holo_green_light), 
          ContextCompat.getColor(getContext(), android.R.color.holo_green_light), 
          ContextCompat.getColor(getContext(), android.R.color.holo_orange_light), 
          ContextCompat.getColor(getContext(), android.R.color.holo_orange_light), 
          ContextCompat.getColor(getContext(), android.R.color.holo_red_light), 
          ContextCompat.getColor(getContext(), android.R.color.holo_red_light), 
          ContextCompat.getColor(getContext(), android.R.color.holo_purple), 
          ContextCompat.getColor(getContext(), android.R.color.holo_purple)}, 
        new float[]{0, 0.60f, 0.60f, 0.80f, 0.80f, 0.85f, 0.85f, 1}, Shader.TileMode.REPEAT); 
      return lg; 
    } 
}; 
PaintDrawable p = new PaintDrawable(); 
p.setShape(new RectShape()); 
p.setCornerRadius(40); 
p.setShaderFactory(sf); 

上記のカップルをご覧ください。 LinearGradientを作成するときは、色の配列とグラデーション内の位置を渡す必要があります。 very long緑を達成するには、緑の色を倍にして、位置00.96fを渡す必要があります。次に、orangeの色を1回追加します。​​とパープルの違いが非常に小さいはずですが(ただし、orangeの色でなければなりません)、caferulしてください。

そしてちょうど適切な半径を設定:

p.setCornerRadius(40); 

色と色の位置を動的に変更することができるように、この解決策はスケーラブルです。

+0

ニース、ほとんどそこに。このソリューションを調整して、割合の色や色の辞書を受け入れる場合は、スケーラビリティがあり、即座にOPに再利用できます。パラメータの種類を微調整してループを追加するだけで済みます。これまでのところ良い仕事。 –

+0

こんにちは、@ R.zagorski、私はあなたの答えに感謝しています。あなたの解決策を使って私の問題を解決しようとしました。しかし私の編集の質問の結果..あなたはアイデアがありますか? – AlanChien

+0

'LinearGradient'コンストラクタの4番目のパラメータは異なるはずです。答えを編集しました。 –

関連する問題