web-dev-qa-db-ja.com

XMLを使用してドロアブルのアルファを設定する方法はありますか?

それ自体のように簡単。私はアルファボタンを作りたい、それはこのように選択されたドロウアブルを持つだろう:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">

    <!-- Play/Pause -->
    <item Android:state_selected="false" Android:drawable="@drawable/item" />
    <item Android:state_selected="true" Android:drawable="@drawable/item" />

</selector>

私はこのようなものを作りたいです:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">

    <!-- Play/Pause -->
    <item Android:alpha="125" Android:state_selected="false" Android:drawable="@drawable/item" />
    <item Android:alpha="255" Android:state_selected="true" Android:drawable="@drawable/item" />

</selector>

全てに感謝 。

47
A.Quiroga

それを行う方法はないと思います。属性Android:alphaがありますが、ドローアブルではなくビューに適用されます。 APIレベル11以降でのみ利用可能です。

9
Ted Hopp

OPからしばらく経ちましたが、個人的には、提案された回答よりもはるかに優れたソリューションを見つけました。 BitmapDrawable を作成すると、アルファを簡単に設定できます。

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:src="@drawable/your_drawble"
    Android:alpha="77">
</bitmap>

アルファは、0〜255の任意の値にできます。たとえば、HEXカラー値アルファの逆の並べ替えであることに注意してください。たとえば、70%アルファは、HEXではB3、BitmapDrawableでは77です。

52
Kasium

ドローアブルを使用して同じことを達成しました

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" >
    <solid Android:color="#5000ddff" />
</shape>

ここでは、不透明度レベルを設定するアルファ50を使用しました。役立つことを願っています

42
Prashant

私は同じものを探していました。これは4年以上前に投稿されていますが、これは問題をグーグル検索する際のトップポストなので、ここで返信します。

これは私の解決策です

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_pressed="false">
        <bitmap Android:alpha="@integer/not_pressed_alpha" Android:src="@drawable/item"/>
    </item>
    <item Android:state_pressed="true" Android:drawable="@drawable/item" />
</selector>
15
Fredrik Metcalf

OPと同じ問題を抱えている人のために、AppCompatでは、ターゲットコードで望んでいたように、 'alpha'パラメーターを設定できるようになりました。

    <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">

    <!-- Play/Pause -->
    <item Android:alpha="125" Android:state_selected="false" Android:drawable="@drawable/item" />
    <item Android:alpha="255" Android:state_selected="true" Android:drawable="@drawable/item" />

</selector>

詳細 こちら

12
kikettas

私の目標は、ボタンが異なるアルファで選択され、押された状態になるようにすることでしたが、同じ(png)リソースを使用し、できるだけ少ないファイルに影響を与えます。

私の解決策は、BitmapDrawableのアルファを変更することと似ていますが、セレクターからアルファを変更するため、1つのファイルのみが影響を受けます。

ビットマップの濃淡関数を使用します。濃淡は既存のピクセルを着色するため、白色を使用することに注意してください。たとえば、#80FFFFFF-元の色を維持するが、アルファを50%減らすために、これを使用してアイコンを押すとアイコンの色を変更することもできます。

これは私の描画可能なXMLファイルです。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_selected="true">
        <bitmap
            Android:src="@drawable/ic_camera"
            Android:tint="#80FFFFFF">
        </bitmap>
    </item>
    <item Android:state_pressed="true">
        <bitmap
            Android:src="@drawable/ic_camera"
            Android:tint="#80FFFFFF">
        </bitmap>
    </item>
    <item>
        <bitmap
            Android:src="@drawable/ic_camera">
        </bitmap>
    </item>
</selector>
3
Richard Sahlin

無効になっているときに斜めに打ち消す必要があるカスタムラジオボタンに次を使用しています。

4つのラジオボタンが有効になっている5つのラジオボタンの画像例

  <item Android:state_enabled="false">
    <layer-list>
      <item>
        <shape Android:shape="rectangle">
          <size
              Android:height="35dp"
              Android:width="35dp"/>
          <stroke
              Android:color="@color/someGrey"
              Android:width="1dp"/>
          <corners Android:radius="1dp"/>
        </shape>
      </item>
      <item>
        <rotate
            Android:fromDegrees="135"
            Android:pivotX="50%"
            Android:pivotY="50%"
            Android:toDegrees="135">
          <shape Android:shape="line">
            <stroke
                Android:color="@color/someGrey"
                Android:width="1dp"/>
          </shape>
        </rotate>
      </item>
    </layer-list>
  </item>
1
dnldttmr

この引数をパラメーターとして使用できる独自のドロウアブルを作成できると思います。私はそのようなことをしたことがない。

このリンクをチェックしてください:

StateListDrawableでdrawableのアルファ値を設定する方法?

それが不可能な場合は、いつでもコードで実行できます...

代わりにビットマップを使用したい場合に備えて、それについて私が見つけた2つのリンクがあります:

0

私はKasium sugestに同意します。そのため、一部のAndroidバージョンでは、Alphaへの仕様はパーセント単位です。

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:src="@drawable/your_drawble"
    Android:alpha="0.5">
</bitmap>
0
Fernando Silva