1,实现效果

  • 按比例显示的ImageView  

 

 

2,实现逻辑

【1】去看服务端给你的图片比例是多少,

  • 宽度/高度   计算宽高比。

  • 高:宽 = 1:2.43    

【1】创建构造方法

public class RatioImageView extends ImageView {}

【2】布局中使用

  

【3】创建自定义属性

  • Values  创attrs.xml文件

<?xml version="1.0" encoding="utf-8"?>                
  • 控件布局中使用

<?xml version="1.0" encoding="utf-8"?>               

 

int widthSize = MeasureSpec.getSize(widthMeasureSpec);
  •  

//参数1命名空间,参数2自定义属性的属性名,参数3默认值

ratio = attrs.getAttributeFloatValue(NAMESPACE, "ratio", 0.0f);
  • 在onMeasure获取宽度,他一定是一个具体的值,match_parent+5dp是父布局的match_parent,父布局的match_parent 

 

  • 宽度除除以比例等到高度的精确值

int heightSize = (int)(widthSize/ratio+0.5f);
  • 生成具体的32位数高度值进行测量

    

 heightMeasureSpec = MeasureSpec.makeMeasureSpec(heightSize,MeasureSpec.EXACTLY);

 

【3】全部代码

/*** Created by HASEE on 2019/4/6.* 让此控件的宽高和服务器端返回图片的宽高比例一致* 高:宽 = 1:2.43*/public class RatioImageView extends ImageView {    private static final String TAG = "RatioImageView";    public static String NAMESPACE = "http://schemas.android.com/apk/res-auto";    //从自定义属性中获取到的属性值    private final float ratio;    public RatioImageView(Context context, AttributeSet attrs) {        super(context, attrs);        ratio = attrs.getAttributeFloatValue(NAMESPACE, "ratio", 0.0f);        Log.i(TAG,"======================ratio = "+ratio);    }    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        //widthMeasureSpec  32位2机制数字    2位   30位        //00 01 10 11  4种        //30位         指定宽度大小        //MeasureSpec.AT_MOST       至多        //MeasureSpec.EXACTLY       精确值        //MeasureSpec.UNSPECIFIED   ListView        //1.获取自定义控件的宽度具体值        int widthSize = MeasureSpec.getSize(widthMeasureSpec);        //2.获取高度值精确值        int heightSize = (int)(widthSize/ratio+0.5f);        //3.用精确模式搭配精确值,生成高度的32位数        heightMeasureSpec = MeasureSpec.makeMeasureSpec(heightSize,MeasureSpec.EXACTLY);        super.onMeasure(widthMeasureSpec, heightMeasureSpec);    }}

 

更多相关文章

  1. android scrollview嵌套scrollview,gridview,listview的方法和深
  2. EditText软键盘弹出相关问题
  3. Android(安卓)System Property框架
  4. Android的动画简单学习
  5. Android(安卓)滚动字幕实现
  6. Android(安卓)design support library---CollapsingAvatarToolba
  7. DataBinding使用指南(四):BindingAdapter
  8. Android:控件布局(表格布局)TableLayout
  9. Android(安卓)ToolBar使用

随机推荐

  1. android开发相关资源
  2. Android(安卓)玩机之路(刷第三方recovery
  3. android display之VSync和线程处理关系
  4. ViewPager两大弊端优化方案
  5. android新特性,CoordinatorLayout,TabLayo
  6. 【转】android有效解决加载大图片内存溢
  7. android网络请求框架Volley(二)
  8. 关于Android中Service的onDestory()调用
  9. Android实现TCP客户端接收数据的方法
  10. CaysnPrinter打印示例 - Sample1 For And