android button 图片不缩放,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并把形式参数去掉。

cf278cb481a179b064f9e06a13912f9a.pngafcbe15ef950fadc9e161c717eea13be.png

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值