自定义控件:按百分比展示ImageView

相信大家都遇到过ImageView的适配问题,尽管ImageView有多种拉伸方式、fitXY、CenterCrop …… 但仍然无法满足需求。

如下面这张效果图,不同分辨率的手机上,无论使用何种拉伸方式都可能会出现变形,这个图不是纯色的,所以图案变形就不好看了。

       自定义控件:按百分比展示ImageView_第1张图片

对于分辨率适配,通用的一个处理方法就是 按百分比拉伸, 高宽比不变,那么图案不会变形,在一定的范围拉伸/收缩,肉眼看不出模糊,

       上代码,


一、自定义的 按比例展示的ImageView:PercentImageView

package com.thduan.demo;

import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.widget.ImageView;

import com.iflytek.xmmusic.activitys.R;
import com.kdxf.kalaok.utils.ScreenAdapterUtil;

/**
 * 宽高按 比例展示的 图片
 * @author thduan
 * 2015-7-2 20:17:31
 */
public class PercentImageView extends ImageView{
	private float widthPer;
	private float hwPer;
	
	public PercentImageView(Context context, AttributeSet attrs) {
		this(context, attrs, 0);
	}
	
	public PercentImageView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		init(attrs);
	}
	
	private void init(AttributeSet attrs) {
		TypedArray ta = getContext().obtainStyledAttributes(attrs, R.styleable.RoomPhotoStyle);
		widthPer = ta.getFloat(R.styleable.RoomPhotoStyle_widthPer, 0);
		hwPer = ta.getFloat(R.styleable.RoomPhotoStyle_hwPer, 0);
		ta.recycle();
	}

    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    	setMeasuredDimension(getDefaultSize(0, widthMeasureSpec), getDefaultSize(0, heightMeasureSpec));
        
        int widthSize = ScreenAdapterUtil.per2px(widthPer);
    	int heightSize = (int) (widthSize * hwPer);
        
    	widthMeasureSpec = MeasureSpec.makeMeasureSpec(widthSize, MeasureSpec.EXACTLY);
    	heightMeasureSpec = MeasureSpec.makeMeasureSpec(heightSize, MeasureSpec.EXACTLY);
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }
}

二、自定义两个属性

   

        
        
        
        
    

三、布局中使用

自定义控件:按百分比展示ImageView_第2张图片


大功告成啦,通过计算高宽比例,可以方便的适配各种机型分辨率, 如果大家有好的适配方法,可以分享出来哦O(∩_∩)O~


你可能感兴趣的:(android应用开发)