博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
按照指定比例展示宽高的自定义控件实现
阅读量:5901 次
发布时间:2019-06-19

本文共 2183 字,大约阅读时间需要 7 分钟。

1.json

2.按照指定比例展示宽高的自定义控件实现

为了让图片按照完美比例进行展现, 不被压缩, 需要自定义控件,该控件可以根据预设的比例来确定宽高

* 按照比例展示宽高的自定义控件 *  * @author Kevin *  */public class RatioLayout extends FrameLayout {    private float ratio;    public RatioLayout(Context context, AttributeSet attrs, int defStyle) {        super(context, attrs, defStyle);    }    public RatioLayout(Context context, AttributeSet attrs) {        super(context, attrs);        // 加载自定义属性的值        TypedArray typedArray = context.obtainStyledAttributes(attrs,                R.styleable.RatioLayout);        // 根据属性id获取属性值, 方式: R.styleable.名称_属性        ratio = typedArray.getFloat(R.styleable.RatioLayout_ratio, 0);        // 回收TypedArray, 释放内存        typedArray.recycle();    }    public RatioLayout(Context context) {        super(context);    }    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        int widthMode = MeasureSpec.getMode(widthMeasureSpec);        int heightMode = MeasureSpec.getMode(heightMeasureSpec);        int widthSize = MeasureSpec.getSize(widthMeasureSpec);        int heightSize = MeasureSpec.getSize(heightMeasureSpec);        // MeasureSpec.EXACTLY 确定值, 比如把宽高值写死,或者match_parent        // MeasureSpec.AT_MOST 至多, 能撑多大就多大, 类似wrap_content        // MeasureSpec.UNSPECIFIED 未指定大小        if (widthMode == MeasureSpec.EXACTLY                && heightMode != MeasureSpec.EXACTLY && ratio != 0) {            // 1. 根据布局宽度推算图片宽度            int imageWidth = widthSize - getPaddingLeft() - getPaddingRight();            // 2. 根据图片宽度和宽高比,推算图片高度            int imageHeight = (int) (imageWidth / ratio);            // 3. 根据图片高度, 推算布局高度            heightSize = imageHeight + getPaddingTop() + getPaddingBottom();            // 4. 根据布局高度, 推算heightMeasureSpec            heightMeasureSpec = MeasureSpec.makeMeasureSpec(heightSize,                    MeasureSpec.EXACTLY);        }        super.onMeasure(widthMeasureSpec, heightMeasureSpec);    }}

自定义属性

values/attrs.xml

  

  

xml

  

 

转载于:https://www.cnblogs.com/ganchuanpu/p/6106922.html

你可能感兴趣的文章
【转载】无限级分类的简单实例
查看>>
关于WinPE安装操作系统
查看>>
LeetCode Median of Two Sorted Arrays
查看>>
oschina程序开发
查看>>
mysql创建每月执行一次的event
查看>>
kafka集群部署
查看>>
STM8串口初始化寄存器配置
查看>>
ReactNative常用组件汇总
查看>>
openfaas 安装(docker swarm 模式)
查看>>
nested exception is java.lang.NoClassDefFoundError: net/sf/cglib/proxy/CallbackFilter
查看>>
“正在注册字体”问题解决
查看>>
windows10 更新后要输入2次密码才能进入系统
查看>>
iOS开发-OpenGL ES入门教程1
查看>>
平衡二叉树(AVL树)
查看>>
面向对象思想(第一天)
查看>>
微信小程序 js逻辑
查看>>
linux 安装 sftp
查看>>
openStack queens
查看>>
C++中map用法详解《转》
查看>>
(转)EOSIO开发(四)- nodeos、keosd与cleos
查看>>