了解
在安卓的界面XML中,ImageButton有這樣一個屬性android:scaleType,他干嘛的?
ImageView的Scaletype決定了圖片在View上顯示時的樣子,如進行何種比例的縮放,及顯示圖片的整體還是部分。有八種類型即
1、center:圖片位於視圖中間,但不執行縮放。
2、centerCrop按統一比例縮放圖片(保持圖片的尺寸比例)便於圖片的兩維(寬度和高度)等於或者大於相應的視圖的維度
3、centerInside按統一比例縮放圖片(保持圖片的尺寸比例)便於圖片的兩維(寬度和高度)等於或者小於相應的視圖的維度
4、fitCenter縮放圖片使用center,在中間
5、fitEnd縮放圖片使用END,靠近尾部
6、fitStart縮放圖片使用START,靠近頭部
7、fitXY縮放圖片使用XY
8、matrix當繪制時使用圖片矩陣縮放
相應的java代碼為 imageButton.setScaleType(ImageView.ScaleType.FIT_CENTER);
在這里我們選擇fitCenter縮放圖片使用center
實施
我們想要實現的效果是一個按鈕點擊下去可以顯示點擊的效果,即另外一張圖片。結合onTouchListener就可以實現,不過有個地方要注意一下。
1: public class Example extends Activity {
2: ImageButton exm;
3:
4: public void onCreate(Bundle savedInstanceState) {
5: super.onCreate(savedInstanceState);
6: setContentView(R.exampleLayout);
7: exm = (ImageButton)findViewById(R.id.exmBtn);
8: initBtnListener(exm);
9: }
10:
11: private void initBtnListener(ImageButton btn){
12: btn.setOnTouchListener(new View.OnTouchListener(){
13: @Override
14: public boolean onTouch(View v, MotionEvent event) {
15: if(event.getAction() == MotionEvent.ACTION_DOWN){
16: //更改為按下時的背景圖片
17: exm.setImageResource(R.drawable.anwbtn1);
18: }else if(event.getAction() == MotionEvent.ACTION_UP){
19: //改為抬起時的圖片
20: exm.setImageResource(R.drawable.anwbtn0);
21: }
22: return false;
23: }
24: });
25: }
26:
27: };
在exampleLayout的XML中有一個id為exmBtn的ImageButton,並且設置屬性android:scaleType=“fitCenter”
上面中更改按鈕圖片的方法還有另外一種就是v.setBackgroundResource(int);但是這種方法達不到讓ImageButton自己管理圖片縮放的效果,所以應該直接讓ImageButton自己setImageResource。
注意上面的代碼中使用到了內部類,其實上面的用法參數btn確實是指向exm,但是不能用btn代替exm去更換按鈕圖片,原因是btn必須聲明為final才能在匿名內部類View.OnTouchListener()中使用。所以可以把btn參數直接替換成exm並把形式參數去掉。