zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    (转载)正向代理与反向代理的区别
    Java设计模式系列之装饰者模式
    工作中使用到的技术和工具分享
    Springboot+mybatis整合
    云计算入门和实践
    tesseract系列(1) -- tesseract用vs编译成库
    nodepad++ 让所有的加号收缩折叠展开的快捷键
    tesseract系列(4) -- tesseract训练问题总结
    tessereact的链接收藏
    菜鸟cmake使用
  • 原文地址:https://www.cnblogs.com/claruarius/p/fitCenter.html
Copyright © 2011-2022 走看看