0

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を返します。

幅が小さすぎる場合、グラデーションは左側で圧縮されます。大きすぎると、グラデーションの一部のみが表示されます。線形グラデーションを正しく表示するように設定するための適切な幅の値を取得するにはどうすればよいですか?

ありがとうございました!

4

2 に答える 2

1

交換

LinearGradient rainbow = new LinearGradient(0f, 0f, 100f, 0f,
        new int[] { 0xFFFF0000, 0xFFFFFF00, 0xFF00FF00, 
                                0xFF00FFFF, 0xFF0000FF,
                                0xFFFF00FF, 0xFFFF0000}, null, TileMode.CLAMP); 

LinearGradient rainbow = new LinearGradient(0f, 0f, 500f, 0f,
        new int[] { 0xFFFF0000, 0xFFFFFF00, 0xFF00FF00, 
                                0xFF00FFFF, 0xFF0000FF,
                                0xFFFF00FF, 0xFFFF0000}, null, TileMode.CLAMP); 
于 2012-05-09T07:15:59.303 に答える
1

リソースにディメンションを追加できます。もちろん、画面ごとに異なる値を設定できます。たとえば、特定のdpiが定義されていない場合は、適切にスケーリングされます。

于 2011-12-22T15:36:32.083 に答える