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并把形式参数去掉。