ImageButton如何讓圖片按比例縮放不被拉伸


了解

在安卓的界面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並把形式參數去掉。

360軟件小助手截圖20140321034532360軟件小助手截圖20140321034550


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM