天天看點

ImageButton 點選回報

在Android中有一個ImageButton的View,跟Button按鈕的差別是可以在Imagebutton上加載一個圖檔。

從ImageButton這個字面意思上來看,它是一個圖檔按鈕,那麼我們就可以使用它做一個我們想要的圖檔按鈕了,但是我們在實際使用的過程當中,就會發現該按鈕的使用并沒有想像中的那麼簡單,需要再增加一些代碼或再配置XML才能實作圖檔按鈕按下的效果,個人感覺有點麻煩,不知道google為什麼這麼做?

下面是個圖檔按鈕正常狀态的效果:

ImageButton 點選回報

下面是圖檔按鈕按下的效果圖檔:

ImageButton 點選回報

我們來看一下如何實作上面的效果。

實作圖檔按鈕按下的效果有兩種方式可以實作:一是增加代碼,二配置XML。

一、在Java中為圖檔按鈕增加觸摸監聽的函數來實作圖檔切換,代碼如下:

ImageButton btn = (ImageButton)findViewById(R.id.imageButton1);          
btn.setOnTouchListener(new View.OnTouchListener(){            
    public boolean onTouch(View v, MotionEvent event) {               
            if(event.getAction() == MotionEvent.ACTION_DOWN){       
               //重新設定按下時的背景圖檔  
               ((ImageButton)v).setImageDrawable(getResources().getDrawable(R.drawable.android_btn_pressed));                              
            }else if(event.getAction() == MotionEvent.ACTION_UP){       
                //再修改為擡起時的正常圖檔  
                ((ImageButton)v).setImageDrawable(getResources().getDrawable(R.drawable.android_btn));     
            }  
            return false;       
    }       
});
           

代碼比較簡單,就是當圖檔按下時,修改按鈕的背景圖檔,當擡起時再修改為正常的圖檔顯示。

二、通過給按鈕配置XML檔案來實作圖檔按鈕的背景切換效果,方法如下:

1) 在Layout下增加一個image_btn_press.xml檔案,内容如下

<?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/android_btn" />  
     <item android:state_focused="true" android:drawable="@drawable/android_btn" />  
     <item android:state_pressed="true" android:drawable="@drawable/android_btn_pressed" />   
</selector>    
           

在這個檔案中可以設定按鈕圖檔的正常時的圖檔、具有焦點時的圖檔和按下時的圖檔。在本例中将按鈕的正常圖檔和焦點圖檔設定成同樣的效果了。

或者你也可以将state_focused的整個屬性行删除。

另外,該XML配置檔案不一定要存放在layout的目錄下,您也可以存放在drawable的目錄下。

2) 在main.xml中設定圖檔按鈕的屬性,裝上面的xml檔案增加到圖檔按鈕中,内容如下:

<ImageButton  
    android:id="@+id/imageButton2"  
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"  
    android:background="@layout/image_btn_press" />  <ImageButton  
    android:id="@+id/imageButton2"  
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"  
    android:background="@layout/image_btn_press" />  
           

在ImageButtonk中指定background的屬性值:@layout/image_btn_press,其中image_btn_press就是上面為該圖檔铵鈕建立的XML配置檔案,檔案名不要寫錯了。同時,你也可以将image_btn_press.xml檔案放到drawable的目錄下,此時,就要将它的屬性值修改為:@drawable/image_btn_press即可,也就是說指定它的XML檔案的正确路經就行了。

另外,需要特别注意的是:在ImageButton中,如果使用XML配置檔案來設定圖檔的效果的話,就不要再指定它的android:src=""屬性值了,否則圖檔的按下效果就出不來了。

這兩種方法各有各的好處,在實際運用過種當種可以根據自己的需要進行選擇。

附上面執行個體的源代碼下載下傳:http://download.csdn.net/detail/ztp800201/4106649

該源代碼分别使用了兩種的方法實作了圖檔按鈕的效果。其中上面的圖檔按鈕是用代碼實作的,下面的圖檔是用XML實作的。

轉自:Android - ImageButton單擊切換按鈕圖檔效果的實作