SeekBarからカラーチューザーを作成しています。これまでのところ、onCreate()で描画可能な進行状況を次のように正常に置き換えました。
SeekBar colorChooser = (SeekBar) findViewById(R.id.seekBarColorChooser);
LinearGradient rainbow = new LinearGradient(0f, 0f, 100f, 0f,
new int[] { 0xFFFF0000, 0xFFFFFF00, 0xFF00FF00,
0xFF00FFFF, 0xFF0000FF,
0xFFFF00FF, 0xFFFF0000}, null, TileMode.CLAMP);
RoundRectShape roundedRect = new RoundRectShape(new float [] {10f, 10f, 10f, 10f, 10f, 10f, 10f, 10f} , null, null);
ShapeDrawable shape = new ShapeDrawable(roundedRect);
shape.getPaint().setShader(rainbow);
colorChooser.setProgressDrawable((Drawable) shape);
これは完璧に機能します!結果はまさに私が探しているものですが、私が懸念していることの1つは、LinearGradientのハードコードされた幅(100f)です。
このダイアログはまだ実現されていないため、SeekBarもDialogも幅がないようです。つまり、colorChooser.getWidth()は0を返します。
幅が小さすぎる場合、グラデーションは左側で圧縮されます。大きすぎると、グラデーションの一部のみが表示されます。線形グラデーションを正しく表示するように設定するための適切な幅の値を取得するにはどうすればよいですか?
ありがとうございました!