私はあなたが期待したことを達成したと思います。残念ながら、このようなドロアブルは.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
緑を達成するには、緑の色を倍にして、位置0
と0.96f
を渡す必要があります。次に、orange
の色を1回追加します。とパープルの違いが非常に小さいはずですが(ただし、orange
の色でなければなりません)、caferulしてください。
そしてちょうど適切な半径を設定:
p.setCornerRadius(40);
色と色の位置を動的に変更することができるように、この解決策はスケーラブルです。
私はこのような解決策を見つけました:https://azzits.wordpress.com/2013/11/17/customseekbar/ しかし私はそれが私の望むものではありません... – AlanChien