1

ユーザーがカスタムカラーを選択できる描画アプリを作成しています。色を選択した後、customBtn は次のコードによってその色を選択した色に変更します。

     customBtn.setBackgroundColor(Color.argb(alphaSeekBar.getProgress(), redSeekBar.getProgress(), 
        greenSeekBar.getProgress(), blueSeekBar.getProgress()));

ただし、これにより、ボタンが四角になります。

角を丸くしたいのですが、押すとグレーになります。

すでに存在selector.xmlし、次のように示されていますが、どうすればすべてのものを一緒に組み込むことができますか

  1. 押されていないときはカスタムカラーが表示され、角が丸くなり、
  2. 押すと灰色になります(そして角丸を維持します)?

セレクタ:

<item android:state_pressed="true" >         
    <shape xmlns:android="http://schemas.android.com/apk/res/android"> 
        <stroke android:width="2dp" android:color="@color/black" />
        <solid android:color="@color/grey"/>
        <padding android:left="5dp" android:top="2dp" 
            android:right="5dp" android:bottom="2dp" /> 
        <corners android:radius="5dp" /> 
    </shape>    
</item>

<item>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"> 
        <stroke android:width="2dp" android:color="@color/black" />
        <solid android:color="@color/???-- how to amend---??"/>
        <padding android:left="5dp" android:top="2dp" 
            android:right="5dp" android:bottom="2dp" /> 
        <corners android:radius="5dp" /> 
    </shape>
</item>

編集: プログラムで角丸を設定するには、カスタマイズされた色は静的ではないため、ユーザーは要求に応じてカスタマイズされた色を変更できます

 customColorCode = Color.argb(alphaSeekBar.getProgress(), redSeekBar.getProgress(), 
         greenSeekBar.getProgress(), blueSeekBar.getProgress());         



 RoundRectShape rs = new RoundRectShape(new float[] { 10, 10, 10, 10, 10, 10, 10, 10}, null, null);
 ShapeDrawable sd = new ShapeDrawable(rs);
 customBtn.setBackgroundDrawable(sd);
 customBtn.setBackgroundColor(customColorCode);

プログラム上の問題:

カスタマイズされた色を選択する前のボタンは完全に丸い角を示しています。カスタマイズされた色を選択した後に設定すると、正方形の色に戻ります。おそらく、setBackgroundColor 行が最後のコードに配置されているためです。それでも私はそれを上に移動しようとしましたが、まだ四角い色です。これはどのように変更できますか?

ありがとう!

4

1 に答える 1

0

通常のボタンのような全範囲の状態 (フォーカス、無効、押された、アクティブなど) をサポートしていないため、デフォルトの状態と押された状態の唯一の違いは単色です。多分[PorterColorFilter][1]うまくいくでしょう。押された状態をそのままにして、デフォルトの状態を単に白にすることができると思います。次に、カスタム カラーを設定してボタンにカラー フィルタを適用します。いくつかのフィルター モードを試す必要があるかもしれませんが、白は置き換えられると思いますDST_ATOPが、黒の境界線は置き換えられません。また、おそらくジェスチャー検出器を使用しMotionEventて、ボタンが押されたときにカラー フィルターを削除することをお勧めします (押された状態がトリガーされることとも呼ばれます)。

手短に言えば、やりたいことに対して Android ボタンはうまく機能しないということです。それらは、可能なさまざまな状態での外観を定義する静的なドローアブルを必要とする傾向があります。

1 つのオプションは、色の選択を制限し、色ごとにドローアブルを作成し、ユーザーの選択に基づいてドローアブルを設定することです。ボタンがどのようなコンテキストで発生するかはわかりませんが、ユーザーに一貫性を持たせるために、通常のボタンのタッチ フィードバックの例に従うことをお勧めします。

注:setBackgroundColor誤解を招く可能性があります。ボタン ドローアブルをカラー ドローアブルに設定するだけで、角丸長方形のドローアブルが置き換えられます。それをすると長方形になるのはそのためです。

于 2013-02-02T20:17:55.157 に答える