自定义控件:动态获取控件的高

/**
 * 根据指定的宽高比,动态设置imageview的高
 * @author cui
 *
 */
public class RatioImageView extends ImageView {
	public float ratio = 0f;
	public RatioImageView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
	}

	/**
	 * xml 中使用自定义属性的时候,走这个方法
	 * @param context
	 * @param attrs
	 */
	public RatioImageView(Context context, AttributeSet attrs) {
		super(context, attrs);
		ratio = attrs.getAttributeFloatValue("http://schemas.android.com/apk/res/com.tencent.apps", "ratio", 0f);
	}

	public RatioImageView(Context context) {
		super(context);
	}
	/**
	 * 要复用这个类ratio就必须动态设置
	 * 	方法一:setRatio(int ratio)
	 *  方法二:自定义属性attrx.xml
	 */
	public  void setRatio(int ratio){
		this.ratio = ratio;
	}
	
	/**
	 * MeasureSpec: 测量规则,由size和mode组成
	 * size : 表示当前控件具体的像素值
	 * mode : 测量的模式,共三种:
	 *      MeasureSpec.AT_MOST : 对应的是wrap_content;
	 *      MeasureSpec.EXACTLY : 对应的是match_parent,具体的dp值
	 *      MeasureSpec.UNSPECIFIED : 未定义的,一般多用于ListView对adapter的View测量中
	 *      
	 * widthMeasureSpec: 是父View通过size和mode计算好的测量规则
	 * heightMeasureSpec: 是父View通过size和mode计算好的测量规则
	 */
	/**
	 * 1 根据测量规则拿到宽
	 * 2 根据宽高比+宽  得到高
	 * 3 将高做成测量规则中
	 */
	@Override
	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
		int width = MeasureSpec.getSize(widthMeasureSpec);
		if (ratio != 0) {
			int height = (int) (width/ratio);
			heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);
		}
		super.onMeasure(widthMeasureSpec, heightMeasureSpec);
	}
	
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值