Android ImageButton自定義按鈕的按下效果的代碼實(shí)現(xiàn)方法分享
使用Button時(shí)為了讓用戶有“按下”的效果,有兩種實(shí)現(xiàn)方式:
1.在代碼里面。
imageButton.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN){
//更改為按下時(shí)的背景圖片
v.setBackgroundResource(R.drawable.pressed);
}else if(event.getAction() == MotionEvent.ACTION_UP){
//改為抬起時(shí)的圖片
v.setBackgroundResource(R.drawable.released);
}
return false;
}
});
2.用XML文件實(shí)現(xiàn)。
<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_pressed="false"
android:drawable="@drawable/button_add" />
<item
android:state_pressed="true"
android:drawable="@drawable/button_add_pressed" />
<item
android:state_focused="true"
android:drawable="@drawable/button_add_pressed" />
<item
android:drawable="@drawable/button_add" />
</selector>
這個(gè)文件放在drawable目錄下面。命名為button_add_x.xml
使用的時(shí)候
<ImageButton
android:id="@+id/ImageButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#00000000"
android:src="@drawable/button_add_x" >
</ImageButton>
我自己摸索摸索,發(fā)現(xiàn)這樣的實(shí)現(xiàn)過程雖然通用性好,但是很麻煩,一個(gè)按鈕實(shí)現(xiàn)效果需要多張圖片甚至再加一個(gè)布局…
那一個(gè)游戲要是有幾百個(gè)按鈕怎么辦呢?
于是:以下代碼被醞釀出來了:
/**
* 按下這個(gè)按鈕進(jìn)行的顏色過濾
*/
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 };
/**
* 按鈕恢復(fù)原狀的顏色過濾
*/
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 };
/**
* 按鈕焦點(diǎn)改變
*/
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;
}
};
/**
* 設(shè)置圖片按鈕獲取焦點(diǎn)改變狀態(tài)
* @param inImageButton
*/
public final static void setButtonFocusChanged(View inView)
{
inView.setOnTouchListener(buttonOnTouchListener);
inView.setOnFocusChangeListener(buttonOnFocusChangeListener);
}
使用時(shí),調(diào)用方法
public final static void setButtonFocusChanged(View inView)
即可。
【原理】
利用Drawable類的setColorFilter方法對(duì)圖片進(jìn)行顏色偏移過濾處理。
- android imageview圖片居中技巧應(yīng)用
- Android控件系列之ImageView使用方法
- Android開發(fā)ImageView圖片無法顯示解決過程
- android ImageView 的幾點(diǎn)經(jīng)驗(yàn)總結(jié)
- Android實(shí)現(xiàn)ImageView圖片雙擊放大及縮小
- Android控件之ImageView用法實(shí)例分析
- Android編程簡單實(shí)現(xiàn)ImageView點(diǎn)擊時(shí)背景圖修改的方法
- Android使用CircleImageView實(shí)現(xiàn)圓形頭像的方法
- Android開發(fā)筆記之:在ImageView上繪制圓環(huán)的實(shí)現(xiàn)方法
- Android中Image的簡單實(shí)例詳解
相關(guān)文章
Android實(shí)現(xiàn)帶有進(jìn)度條的按鈕效果
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)帶有進(jìn)度條的按鈕效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-05-05
Android基于OpenCV實(shí)現(xiàn)霍夫直線檢測
霍夫變換利用點(diǎn)與線之間的對(duì)偶性,將圖像空間中直線上離散的像素點(diǎn)通過參數(shù)方程映射為霍夫空間中的曲線,并將霍夫空間中多條曲線的交點(diǎn)作為直線方程的參數(shù)映射為圖像空間中的直線。給定直線的參數(shù)方程,可以利用霍夫變換來檢測圖像中的直線。本文簡單講解Android的實(shí)現(xiàn)2021-06-06
一文詳解Android無需權(quán)限調(diào)用系統(tǒng)相機(jī)拍照
這篇文章主要為大家介紹了Android無需權(quán)限調(diào)用系統(tǒng)相機(jī)拍照詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
Android垂直滾動(dòng)控件ScrollView使用方法詳解
這篇文章主要為大家詳細(xì)介紹了Android垂直滾動(dòng)控件ScrollView的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08
Android 動(dòng)態(tài)添加Fragment的實(shí)例代碼
這篇文章主要介紹了Android 動(dòng)態(tài)添加Fragment的實(shí)例代碼的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-08-08
AndroidStudio不自動(dòng)添加新創(chuàng)建的文件到VCS的解決辦法
這篇文章主要介紹了AndroidStudio不自動(dòng)添加新創(chuàng)建的文件到VCS的解決辦法的相關(guān)資料,需要的朋友可以參考下2017-03-03

