Android ImageButton

public class ImageButton extends ImageView java.lang.Object ↳ android.view.View ↳ android.widget.ImageView ↳ android.widget.ImageButton 直接子類 ZoomButton

ImageButton是上面帶有圖片的Button,與Button只是相似,按鈕表面上的圖像的定義是在xml文件中經過android:src或者是在java代碼中經過imagebutton組件對象調用setImageResource(int a)方法來定義的。java

在xml中實現:android

<?xml version="1.0" encoding="utf-8"?>
<ImageButton 
	android:id="@+id/login_btn_id"
	android:layout_height="wrap_content"
	android:src="@drawable/button_2" //不是系統圖片
    或者	Android:src="@android:drawable/sym_call_incoming" //系統自帶的圖片
		  
android:layout_margin="5px"
/>

在代碼中實現:ide

//drawable下的圖片 

m_ImageButton.setImageDrawable(getResources().getDrawable(R.drawable.my_button)); 

//系統自帶的圖片 
 m_ImageButton.setImageDrawable(getResources().getDrawable(Android.R.drawable.sym_call_incoming));

ImageButton設置圖片方式,有如下三種:佈局


setImageBitmap(Bitmap bm) 
setImageDrawable(Drawable drawable) 
setImageResource(int resId)
設置透明背景能夠經過設置background完成

android:background="#00000000"便可spa

半透明 code

android:background="#7F000000"便可。orm

表示不一樣的按鈕狀態,你可以爲每個狀態定義一個相對應的圖片,一個很簡單的方式就是經過xml繪製「selectorxml

例如:對象

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@drawable/button_pressed" /> <!-- pressed 按下去--> <item android:state_focused="true" android:drawable="@drawable/button_focused" /> <!-- focused 焦點停留--> <item android:drawable="@drawable/button_normal" /> <!-- default正常默認 --> </selector>

元素的順序是很重要的,由於他們是按順序執行的,這就是爲何normal按鈕放在在最後了,由於在android:state_pressed and android:state_focused評估失效以後normal才被應用的。事件

state_enabled 是否有效
state_focused 是否聚焦
state_pressed 是否被按下
其中state_focused 和 state_pressed 可自由有以下4種組合

android:state_focused="true" android:state_pressed="true"
android:state_focused="true" android:state_pressed="false"
android:state_focused="false" android:state_pressed="true"
android:state_focused="false" android:state_pressed="false"

方法:

protected boolean onSetAlpha (int alpha);//設置透明度,參數alpha的取值範圍是0到255,若是視圖能夠得出制定的alphe就會返回一個true

imagebutton.setVisibility(View.GONE);//隱藏ImageButton1 imagebutton.setVisibility(View.VISIBLE);//顯示ImageButton2 imagebutton.setImageResource(R.drawable.icon2);//設置內容

ImageButton按下和釋放背景圖片改變事件:

imageButton.setOnTouchListener(new OnTouchListener(){ @Override public boolean onTouch(View v, MotionEvent event) { if(event.getAction() == MotionEvent.ACTION_DOWN){ //更改成按下時的背景圖片 v.setBackgroundResource(R.drawable.pressed); }else if(event.getAction() == MotionEvent.ACTION_UP){ //改成擡起時的圖片 v.setBackgroundResource(R.drawable.released); } return false; } }); imageButton.setOnTouchListener(new OnTouchListener(){ @Override public boolean onTouch(View v, MotionEvent event) { if(event.getAction() == MotionEvent.ACTION_DOWN){ //更改成按下時的背景圖片 v.setBackgroundResource(R.drawable.pressed); }else if(event.getAction() == MotionEvent.ACTION_UP){ //改成擡起時的圖片 v.setBackgroundResource(R.drawable.released); } return false; } }); 

設置背景色:

m_ll.setBackgroundColor(Color.rgb(127,127,127)); m_ll.setBackgroundColor(Color.TRANSPARENT); 

三:以上方式比較簡單,可是須要不少的圖片和佈局文件,若是項目中的圖片按鈕比較多,那就很浪費資源。下面的方式使用矩陣顏色濾鏡。

顏色過濾矩陣是一個4x5的矩陣, 四行分別是 紅色通道值,綠色通道值,藍色通道值和alpha通道值。五列分別是 對應通道的紅色值,綠色值,藍色值,alpha值和偏移量。

RGBAlpha的終值計算方法以下:

Red通道終值 = a[0] * srcR + a[1] * srcG + a[2] * srcB + a[3] * srcA + a[4]

Green通道終值 = a[5] * srcR + a[6] * srcG + a[7] * srcB + a[8] * srcA + a[9]

Blue通道終值 = a[10] * srcR + a[11] * srcG + a[12] * srcB + a[13] * srcA + a[14]

Alpha通道終值 = a[15] * srcR + a[16] * srcG + a[17] * srcB + a[18] * srcA + a[19]

備註:

srcR爲原圖Red通道值,srcG爲原圖Green通道值,srcB爲原圖Blue通道值,srcA爲原圖Alpha通道值。

每一個通道的源值和終值都在0255的範圍內。即便計算結果大於255或小於0,值都將被限制在0255的範圍內。

實現代碼以下:

採用Drawable的顏色過濾:

/** * 按下這個按鈕進行的顏色過濾 */ public final static float[] BT_SELECTED=new float[] { 2, 0, 0, 0, 2, 0, 2, 0, 0, 2, 0, 0, 2, 0, 2, 0, 0, 0, 1, 0 }; /** * 按鈕恢復原狀的顏色過濾 */ public final static float[] BT_NOT_SELECTED=new float[] { 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0 }; /** * 按鈕焦點改變 */ public final static OnFocusChangeListener buttonOnFocusChangeListener=new OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if (hasFocus) { v.getBackground().setColorFilter(new ColorMatrixColorFilter(BT_SELECTED)); v.setBackgroundDrawable(v.getBackground()); } else { v.getBackground().setColorFilter(new ColorMatrixColorFilter(BT_NOT_SELECTED)); v.setBackgroundDrawable(v.getBackground()); } } }; /** * 按鈕觸碰按下效果 */ public final static OnTouchListener buttonOnTouchListener=new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if(event.getAction() == MotionEvent.ACTION_DOWN){ v.getBackground().setColorFilter(new ColorMatrixColorFilter(BT_SELECTED)); v.setBackgroundDrawable(v.getBackground()); } else if(event.getAction() == MotionEvent.ACTION_UP){ v.getBackground().setColorFilter(new ColorMatrixColorFilter(BT_NOT_SELECTED)); v.setBackgroundDrawable(v.getBackground()); } return false; } }; /** * 設置圖片按鈕獲取焦點改變狀態 * @param inImageButton */ public final static void setButtonFocusChanged(View inView) { inView.setOnTouchListener(buttonOnTouchListener); inView.setOnFocusChangeListener(buttonOnFocusChangeListener); } /** * 按下這個按鈕進行的顏色過濾 */ public final static float[] BT_SELECTED=new float[] { 2, 0, 0, 0, 2, 0, 2, 0, 0, 2, 0, 0, 2, 0, 2, 0, 0, 0, 1, 0 }; /** * 按鈕恢復原狀的顏色過濾 */ public final static float[] BT_NOT_SELECTED=new float[] { 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0 }; /** * 按鈕焦點改變 */ public final static OnFocusChangeListener buttonOnFocusChangeListener=new OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if (hasFocus) { v.getBackground().setColorFilter(new ColorMatrixColorFilter(BT_SELECTED)); v.setBackgroundDrawable(v.getBackground()); } else { v.getBackground().setColorFilter(new ColorMatrixColorFilter(BT_NOT_SELECTED)); v.setBackgroundDrawable(v.getBackground()); } } }; /** * 按鈕觸碰按下效果 */ public final static OnTouchListener buttonOnTouchListener=new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if(event.getAction() == MotionEvent.ACTION_DOWN){ v.getBackground().setColorFilter(new ColorMatrixColorFilter(BT_SELECTED)); v.setBackgroundDrawable(v.getBackground()); } else if(event.getAction() == MotionEvent.ACTION_UP){ v.getBackground().setColorFilter(new ColorMatrixColorFilter(BT_NOT_SELECTED)); v.setBackgroundDrawable(v.getBackground()); } return false; } }; /** * 設置圖片按鈕獲取焦點改變狀態 * @param inImageButton */ public final static void setButtonFocusChanged(View inView) { inView.setOnTouchListener(buttonOnTouchListener); inView.setOnFocusChangeListener(buttonOnFocusChangeListener); } 
相關文章
相關標籤/搜索