3

私のSeekBar. 次のスニペットの 2 番目のステートメントで LinearGradient を作成しています。

// Creating the drawable:
ShapeDrawable shapeDrawable = new ShapeDrawable(new RectShape());
Shader linearGradientShader = new LinearGradient(0, 0, 300, 20, new int[] { Color.RED, Color.BLUE },
new float[] { 0, 1 }, Shader.TileMode.CLAMP);
shapeDrawable.getPaint().setShader(linearGradientShader);
shapeDrawable.setBounds(10, 10, 300, 30);

seekBar.setProgressDrawable(shapeDrawable);

ここでの問題は、仕様によると、6 番目のパラメーターが次のように定義されていることです。

null の場合があります。色配列内の対応する各色の相対位置 [0..1]。これが null の場合、色はグラデーション ラインに沿って均等に分散されます。

赤と青の両方の色を均等に分散させたいと考えました。つまり、形状の半分が赤みを帯び、半分が青みを帯びるようにします (次の画像のように)。

ここに画像の説明を入力

そこで、第 6 引数の値としてnullnew float[] {0, 0.5f}、を試してみました。new float[] {0, 1}それぞれ次の 3 つの結果が得られました。

  1. の場合null:ここに画像の説明を入力

  2. の場合new float[] {0, 0.5f}:ここに画像の説明を入力

  3. の場合new float[] {0, 1}:ここに画像の説明を入力

どこが間違っているのか教えてください。これを修正するにはどうすればよいですか?

4

1 に答える 1

2

使用する

ShapeDrawable#setShaderFactory(ShapeDrawable.ShaderFactory factory)

ファクトリには、Shader resize(int width, int height)描画可能な境界が変更されるたびに呼び出されるメソッドがあり、これは/パラメータLinearGradientに基づいてシェーダを返す必要がある場所ですwidthheight

ご覧のとおり、nullpositionsを渡すだけで、色が均等に分散されます

于 2016-03-14T08:03:40.483 に答える