package com.amlogic.tzr.charismatic_yichang.view; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.widget.ImageView; import com.amlogic.tzr.charismatic_yichang.Tool.ScreenUtil; /** * 自定义控件,用于显示宽度和ImageView相同,高度自适应的图片显示模式. * 除此之外,还添加了最大高度限制,若图片长度大于等于屏幕长度,则高度显示为屏幕的1/3 * Created by zhaokaiqiang on 15/4/20. */ public class ShowMaxImageView extends ImageView { private float mHeight = 0; public ShowMaxImageView(Context context) { super(context); } public ShowMaxImageView(Context context, AttributeSet attrs) { super(context, attrs); } public ShowMaxImageView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override public void setImageBitmap(Bitmap bm) { if (bm != null) { getHeight(bm); } super.setImageBitmap(bm); requestLayout(); } @Override public void setImageDrawable(Drawable drawable) { if (drawable != null) { getHeight(drawableToBitamp(drawable)); } super.setImageDrawable(drawable); requestLayout(); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { if (mHeight != 0) { int sizeWidth = MeasureSpec.getSize(widthMeasureSpec); int sizeHeight = MeasureSpec.getSize(heightMeasureSpec); int resultHeight = (int) Math.max(mHeight, sizeHeight); if (resultHeight >= ScreenUtil.getScreenHeight((Activity) getContext())) { resultHeight = ScreenUtil.getScreenHeight((Activity) getContext()) / 3; } setMeasuredDimension(sizeWidth, resultHeight); } else { super.onMeasure(widthMeasureSpec, heightMeasureSpec); } } private void getHeight(Bitmap bm) { float bitmapWidth = bm.getWidth(); float bitmapHeight = bm.getHeight(); if (bitmapWidth > 0 && bitmapHeight > 0) { float scaleWidth = getWidth() / bitmapWidth; mHeight = bitmapHeight * scaleWidth; } } private Bitmap drawableToBitamp(Drawable drawable) { if (drawable != null) { BitmapDrawable bd = (BitmapDrawable) drawable; return bd.getBitmap(); } else { return null; } } }