Android中ImageButton自定義按鈕的按下效果的程式碼實現方法,附網上2種經典解決方法。
首先看看網上的2種方法:
【以下為引用網路,來源:http://www.eoeandroid.com/thread-7931-1-1.html】
使用Button時為了讓使用者有“按下”的效果,有兩種實現方式:
1.在程式碼裡面。
[java] view plaincopy
- 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;
- }
- });
2.用XML檔案實現。
[xhtml] view plaincopy
- <?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>
- <?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>
這個檔案放在drawable目錄下面。命名為button_add_x.xml
使用的時候
[xhtml] view plaincopy
- <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>
- <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>
【以上為引用網路,來源:http://www.eoeandroid.com/thread-7931-1-1.html】
【以下為原創,轉載請註明出處:http://blog.csdn.net/sytzz/archive/2010/06/16/5673662.aspx】
我自己摸索摸索,發現這樣的實現過程雖然通用性好,但是很麻煩,一個按鈕實現效果需要多張圖片甚至再加一個佈局…
那一個遊戲要是有幾百個按鈕怎麼辦呢?
於是:以下程式碼被醞釀出來了:
[java] view plaincopy
- /**
- * 按下這個按鈕進行的顏色過濾
- */
- 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 void setButtonFocusChanged(View inView)
即可。
【原理】
利用Drawable類的setColorFilter方法對圖片進行顏色偏移過濾處理。
相關文章
- Android 自定義實現switch開關按鈕Android
- 自定義View:自定義屬性(自定義按鈕實現)View
- LabVIEW的自定義按鈕View
- 網站上點選自定義按鈕發起QQ聊天的解決方案網站
- Android 自定義Switch開關按鈕的樣式Android
- Android UI控制元件系列:ImageButton(帶圖示的按鈕)AndroidUI控制元件
- ABAP ALV TOOLBAR 自定義按鈕的型別以及listmenu按鈕型別
- css 最經典的按鈕樣式CSS
- css自定義單選按鈕的樣式程式碼例項CSS
- Vue2-利用自定義指令實現按鈕許可權控制Vue
- Win10電腦中定位服務按鈕灰色無法開啟的2種解決方法Win10
- 單選按鈕美化效果程式碼
- 通過xml檔案實現自定義圓角按鈕,以及點選效果XML
- css實現圓角按鈕效果CSS
- css3程式碼實現的滑鼠懸浮按鈕效果程式碼例項CSSS3
- css3實現button按鈕美化效果程式碼例項CSSS3
- vue-video-player,通過自定義按鈕元件實現全屏切換效果VueIDE元件
- 使用jQuery實現的取消radio按鈕選中效果jQuery
- iOS 自定義鍵盤字母按鈕iOS
- Simple WPF: WPF 自定義按鈕外形
- fastadmin 工具欄新增自定義按鈕,實現彈窗並儲存資料效果AST
- unity 實現輪盤方式的按鈕滾動效果Unity
- jQuery實現的按鈕可用倒數計時效果jQuery
- Windows API視窗程式設計 - 自定義按鈕WindowsAPI程式設計
- 改變Android按鈕背景顏色的高效方法Android
- css3實現的美觀的提交按鈕效果CSSS3
- Win10電腦下重複按鍵盤經常按不出字元的解決方法Win10字元
- 成品直播原始碼,html頁面點選按鈕實現頁面跳轉的兩種方法原始碼HTML
- Android Fragment實現按鈕間的切換AndroidFragment
- 點選按鈕實現數字增加效果
- Android開發自定義View之滑動按鈕與自定義屬性AndroidView
- Android 自定義控制元件 按鈕滾動選擇Android控制元件
- 手機直播原始碼,Flutter 中的彈簧按鈕效果原始碼Flutter
- Qt QMessageBox::information 自定義按鈕QTORM
- 9 款經典華麗的 CSS3 分享按鈕CSSS3
- css中按鈕的四種狀態CSS
- css3實現的滑鼠懸浮按鈕動畫效果CSSS3動畫
- Windows API視窗程式設計 - 完善自定義按鈕WindowsAPI程式設計