2013-04-10 4 views
7

私はいくつかのボタンに 'ダウン'スタイルを導入したいと思っています。私はスタイルと状態リストを作成しました。Android:ボタンをクリックするとアルファが設定されます。好ましくはxmlのみ

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:drawable="@drawable/inactive_button_background" android:state_enabled="false"/> 
    <item android:drawable="@drawable/active_button_background" android:state_enabled="true"/> 
    <item android:drawable="@drawable/pressed_button_background" android:state_pressed="true"></item> 
</selector> 

問題は、私は(私は変数の背景を持っているので、アルファチャンネルで販売した色を設定することが解決策ではないだろう)、ボタンがクリックされますときに、背景のちょうどアルファを変更することができるようにしたいということです。

そして、私は宣言的なXMLだけからやりたいと思っています(私のコードをレイアウトのものに変えたくありません)。

問題このアルファブレンディングをxmlドロワブルからボタンに適用する方法がわかりません。 私は確かに方法があると確信しています。

+0

アニメーションを使用するコードからの道があります。あなたがjavaからそれをしたいなら、私はそれをしました。私は答えとしてそれを置くことができます。 – Ankit

答えて

0

何かをコードに入力する必要があります。

XML

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Text" 
    android:onClick="dialogClicked" /> 

のJava

public void dialogClicked(final View view) 
{ 
    ... set the alpha programatically ... 
} 
+4

必ずしもそうではありません。私はそれをプログラムで設定できることを知っています。私は単色の背景(#AARRGGBB drawable経由で)を使用していて、それが機能するならば、XMLだけに設定することもできます。 Javaコードの行を記述することなく、多くの同様のものを実行することができます。 xmlからdrawableにアルファを設定する方法がないのはどうして私にとって謎なのですか? – George

+0

私はそれが可能だとは思わない...属性はアンドロイド:アルファですが、それはビューにのみ適用され、ドロアブルには適用されません。また、APIレベル11以降でしか利用できませんでした。 –

+0

XMLでこれを行うには、アンドロイド:フォアグラウンドのようないくつかの種類のパラメータが必要です。この場合、ビューの上に描画可能なドロアブルを指定できます。残念ながら、それは今存在しないので、AFAIKはXMLでこれを行う方法はありません。 – greg7gkb

-1

これはかなりそれを行います。まあ、それは私

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true"> 
    <shape> 
     <solid android:color="#5000ddff" /> 
    </shape> 
    </item> 
    <item android:drawable="@color/yourdefaultcolor"/> 
</selector> 
5

のために働いていた私は少しこの質問に答えるために遅れていますが、私はちょうどあなたがこの方法でonTouchを実装することにより、これを行うことができView.onTouchListner

を使用してアルファ値を変更することによって、これをしなかった

@Override 
public boolean onTouch(View v, MotionEvent event) { 

    switch (event.getAction()) 
    { 
     case MotionEvent.ACTION_DOWN: 
      v.setAlpha(0.5f); 
      break; 
     case MotionEvent.ACTION_UP: 
      v.setAlpha(1f); 
     default : 
     v.setAlpha(1f) 
    } 
    return false; 
} 

私はdrawableからアルファ値を変更できないと思いますので、このようにしなければなりません。

+0

アルファのリセットは、デフォルトのケースとして扱う必要があります。例えば、ACTIONがCANCELの場合、ボタンは半分不透明のままです。 – couceirof

+0

あなたは正しいです。私も同じ問題に直面していました。私は自分のコードでそれを変更しました。答えを更新しました –

3

これは、アニメーションをクリックし、「よりソフト」を探している場合は、マイケルの答えに何かを追加する完璧


yourView.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     switch (event.getAction()) { 
      case MotionEvent.ACTION_DOWN: { 
       v.setAlpha(0.5f); 
       break; 
      } 
      case MotionEvent.ACTION_UP: 
      case MotionEvent.ACTION_CANCEL: { 
       v.setAlpha(1f); 
       break; 
      } 
     } 
     return false; 
    } 
}); 
0

に動作します。同じ考えの嘘と

btn.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent motionEvent) { 
      switch (motionEvent.getAction()) 
      { 
       case MotionEvent.ACTION_DOWN: 
        v.animate().alpha(0.3f).setDuration(200).start(); 
        break; 
       case MotionEvent.ACTION_UP: 
        v.animate().alpha(1f).setDuration(200).start(); 
       default : 
        v.setAlpha(1f); 
      } 
      return false; 
     } 
    }); 
} 

が、アニメーション

0

と私は、しかし、私が使用してアルファの変更についてでした質問に応じた正しい答えを見ることができない、かなり古い質問のthatsを知っている:私はこれを追加しましたxml。
は、すでに質問に示されているセレクタを作成する必要があることを行うには、それがある:あなたが(そのbtn_background.png仮定)のみの通常状態の描画可能を持っているのであれば

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:drawable="@drawable/inactive_button_background" android:state_enabled="false"/> 
    <item android:drawable="@drawable/active_button_background" android:state_enabled="true"/> 
    <item android:drawable="@drawable/pressed_button_background" android:state_pressed="true"></item> 
</selector> 

、あなたはそれを50%のアルファが必要あなたがしなければならないことは、pressed_button_background.xmlという名前の対応するxml-drawableを作成することです(ドロウアブルフォルダ、no-dpiで!)。だから、これは以下のようにする必要があります。同じが無効の状態に適用され

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

を、唯一の違いは、私は推測し、この状態のため、30%または言うものは何でもデザイナー/望んでいる)のような可能性がアルファレベルです。したがって、短いバージョンは次のようになります(drawable ic_editのボタン用)。png):

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:state_enabled="true" 
     android:state_pressed="true"> 
     <bitmap 
      android:src="@drawable/ic_edit" 
      android:alpha=".5" /> 
    </item> 
    <item 
     android:state_enabled="false"> 
     <bitmap 
      android:src="@drawable/ic_edit" 
      android:alpha=".3" /> 
    </item> 
    <item 
     android:drawable="@drawable/ic_edit" /> 
</selector> 
関連する問題