web-dev-qa-db-ja.com

Androidでビューの不透明度(アルファ)を​​設定する方法

次のようなボタンがあります。

<Button 
     Android:text="Submit" 
     Android:id="@+id/Button01" 
     Android:layout_width="fill_parent" 
     Android:layout_height="wrap_content">
</Button>

onCreate()イベントでは、Button01を次のように呼び出します。

setContentView(R.layout.main);

View Button01 = this.findViewById(R.id.Button01);
Button01.setOnClickListener(this);

アプリケーションには背景があります。この送信ボタンに不透明度を設定します。このビューの不透明度を設定する方法Java側で設定できるのか、それともmain.xmlファイルで設定できますか?

Java側で私はButton01.mutate().SetAlpha(100)を試みました、しかし、それは私にエラーを与えました。

193
ncakmak

私はあなたの質問を見つけましたが、TextViewに関して同様の問題を抱えています。私はTextViewを拡張してonSetAlphaをオーバーライドすることでそれを解決することができました。たぶんあなたはあなたのボタンで似たようなことを試すことができます:

import Android.content.Context;
import Android.util.AttributeSet;
import Android.widget.TextView;

public class AlphaTextView extends TextView {

  public AlphaTextView(Context context) {
    super(context);
  }

  public AlphaTextView(Context context, AttributeSet attrs) {
    super(context, attrs);
  }

  public AlphaTextView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
  }

  @Override
  public boolean onSetAlpha(int alpha) {
    setTextColor(getTextColors().withAlpha(alpha));
    setHintTextColor(getHintTextColors().withAlpha(alpha));
    setLinkTextColor(getLinkTextColors().withAlpha(alpha));
    return true;
  }
}
60
RoToRa

他のみんなのMUCHもっと複雑な答えに驚いています。

XML

Xmlのボタン(または他のビュー)の色の定義でアルファを簡単に定義できます。

Android:color="#66FF0000"    // Partially transparent red

上記の例では、色は部分的に透明な赤になります。

ビューの色を定義するとき、フォーマットは#RRGGBBまたは#AARRGGBBのいずれかになります。ここで、AAは16進アルファ値です。 FFは完全に不透明になり、00は完全に透明になります。

動的に

コードの不透明度を動的に変更する必要がある場合は、

myButton.getBackground().setAlpha(128);  // 50% transparent

INTの範囲は0(完全に透明)から255(完全に不透明)です。

551
Jake Wilson

私はあなたがすでに答えを見つけたかもしれないと思いますが、もしそうでなければ(そして他の開発者のために)、あなたはこのようにそれをすることができます:

btnMybutton.getBackground().setAlpha(45);

ここでは、不透明度を45に設定しました。基本的に、(完全に透明)からの間の任意の値に設定できます。 255(完全に不透明)

209
abhi

次のように、colors.xmlファイルにカスタム ARGBカラー を作成することをお勧めします。

<resources>
<color name="translucent_black">#80000000</color>
</resources>

ボタンの背景をその色に設定します。

Android:background="@Android:color/translucent_black"

ボタンの形で遊びたい場合は、プロパティを設定する Shape描画可能リソース を作成します。ボタンは次のようになります。

ファイル:res/drawable/rounded_corner_box.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:shape="rectangle">
    <gradient
        Android:startColor="#80000000"
        Android:endColor="#80FFFFFF"
        Android:angle="45"/>
    <padding Android:left="7dp"
        Android:top="7dp"
        Android:right="7dp"
        Android:bottom="7dp" />
    <corners Android:radius="8dp" />
</shape>

それをボタンの背景として使用します。

    Android:background="@drawable/rounded_corner_box"
67
Akos Cz

Androidのドキュメントによると、alphaは0から1の間の値です。そのため、設定するには次のようにします。

View v;
v.setAlpha(.5f);
46
cange1

上記からはるかに簡単です。デフォルトのアルファ属性はボタンにあります

Android:alpha="0.5"

範囲は、完全に透明の場合は0、完全な不透明の場合は1です。

38
Raja Jawahar
Android:background="@Android:color/transparent"

上記は私が知っていることです...私はカスタムボタンクラスを作成することが最善のアイデアだと思います

APIレベル11
最近私はこの Android:alpha xml属性に出会いました。これは0から1の間の値を取ります。対応するメソッドは です。/setAlpha(float)

19
Josnidhin

btnMybutton.getBackground().setAlpha(45);はいい考えですが、背景全体にアルファを適用するだけでビュー全体には適用しません。

ビューにアルファを適用したい場合は、代わりにbtnMybutton.setAlpha(0.30f);を使用してください。これはViewに不透明度を適用します。 0から1までの値を受け入れます。

Docは言います:

ビューの不透明度を設定します。これは0から1の値です。0はビューが完全に透明であることを意味し、1はビューは完全に不透明であることを意味します。このビューがonSetAlpha(int)をオーバーライドしてtrueを返す場合、このビューは不透明度自体を適用します。それ以外の場合、このメソッドを呼び出すことはsetLayerType(int、Android.graphics.Paint)を呼び出してハードウェアレイヤを設定することと同じです。 alphaを半透明の値(0 <alpha <1)に設定すると、パフォーマンスに影響が出る可能性があります。一般的に、フェージングアニメーションの場合のように、alphaプロパティを控えめに一時的に使用するのが最善です。

14
Hesam

Holoテーマのデフォルトボタンはやや透明な画像で構成されているので、私はICS/JBでこの問題に遭遇しました。背景として、これは特に顕著です。

ジンジャーブレッドvs. ICS +:

GingerbreadICS

各解像度の描画可能な状態と画像をすべてコピーして透明な画像をベタ塗りするのは面倒なので、私はもっと厄介な解決策を選びました。白い背景のホルダーにボタンをくるむことです。これはまさにそれを行う粗雑なXML drawable(ButtonHolder)です。

あなたのXMLファイル

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
              style="@style/Content">
  <RelativeLayout style="@style/ButtonHolder">
      <Button Android:id="@+id/myButton"
              style="@style/Button"
              Android:text="@string/proceed"/>
    </RelativeLayout>
</LinearLayout>

ButtonHolder.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
  <item>
    <shape Android:shape="rectangle">
      <solid Android:color="@color/white"/>
    </shape>
  </item>

</layer-list>

styles.xml

.
.
.      
  <style name="ButtonHolder">
    <item name="Android:layout_height">wrap_content</item>
    <item name="Android:layout_width">wrap_content</item>
    <item name="Android:background">@drawable/buttonholder</item>
  </style>

  <style name="Button" parent="@Android:style/Widget.Button">
    <item name="Android:layout_height">wrap_content</item>
    <item name="Android:layout_width">wrap_content</item>
    <item name="Android:textStyle">bold</item>
  </style>
.
.
.

ただし、Holoボタンの画像には押されたスペースを考慮して余白が含まれているため、白い枠線が表示されます。

Too much whiteToo much white pressed

そこで解決策は、白の背景に余白(4dpは私のために働いた)と丸みを帯びた角(2dp)を与えて白を完全に隠しながらボタンをしっかりさせることです。

ButtonHolder.xml

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

  <item>
    <shape Android:shape="rectangle">
      <solid Android:color="@Android:color/transparent"/>
    </shape>
  </item>

  <item Android:top="4dp" Android:bottom="4dp" Android:left="4dp" Android:right="4dp">
    <shape Android:shape="rectangle">
      <solid Android:color="@color/white"/>
      <corners Android:radius="2dp" />
    </shape>
  </item>

</layer-list>

最終結果は次のようになります。

No whiteNo white pressed

ネイティブのボタンの画像サイズはICSやJBのものとは異なるため(例えば、Gingerbreadボタンの背後にあるこの正確なスタイルでは、サイズがわずかになります)。ボタンの下にある白)。

8
annie

ビューの場合は、次の方法で不透明度を設定できます。

view_name.setAlpha(float_value);

プロパティview.setAlpha(int)は、11以降のAPIバージョンでは非推奨です。今後、.setAlpha(0.5f)のようなプロパティが使用されます。

6
Palash Dange

TextViewカラーのAPI <11の場合、次のようにしました。

int textViewColor = textView.getTextColors().getDefaultColor(); 
textView.setTextColor(Color.argb(128, Color.red(textViewColor), Color.green(textViewColor), Color.blue(textViewColor))); //50% transparent

少し面倒ですが、ちょっと、それはうまくいきます:-)

5
EZDsIt

私はこれがすでにたくさんの答えを持っていることを知っています、しかし私はボタンのためにそれがあなた自身の.xmlセレクタを作成してそれを言われたボタンの背景に設定することが最も簡単であることがわかりました。このようにして、押されたときや有効になったときなどにも状態を変更できます。これが私が使っているものの簡単な断片です。いずれかの色に透明度を追加したい場合は、先頭の16進値(#XXcccccc)を追加します。 (XX ==「色のアルファ」)

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_pressed="true" >
        <shape>
            <solid
                Android:color="#70c656" />
            <stroke
                Android:width="1dp"
                Android:color="#53933f" />
            <corners
                Android:radius="4dp" />
            <padding
                Android:left="10dp"
                Android:top="10dp"
                Android:right="10dp"
                Android:bottom="10dp" />
        </shape>
    </item>
    <item>
        <shape>
            <gradient
                Android:startColor="#70c656"
                Android:endColor="#53933f"
                Android:angle="270" />
            <stroke
                Android:width="1dp"
                Android:color="#53933f" />
            <corners
                Android:radius="4dp" />
            <padding
                Android:left="10dp"
                Android:top="10dp"
                Android:right="10dp"
                Android:bottom="10dp" />
        </shape>
    </item>
</selector>
2