package com.jasonchen.microlang.view; import android.content.Context; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.widget.ImageView; /** * jasonchen * 2015/04/10 */ @Deprecated public class PerformanceImageView extends ImageView { private boolean mMeasuredExactly = false; private boolean mBlockMeasurement = false; public PerformanceImageView(Context context) { super(context); } public PerformanceImageView(Context context, AttributeSet attrs) { super(context, attrs); } public PerformanceImageView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public void setImageDrawable(Drawable drawable) { mBlockMeasurement = true; super.setImageDrawable(drawable); mBlockMeasurement = false; } @Override public void requestLayout() { if (mBlockMeasurement && mMeasuredExactly) { // Ignore request } else { super.requestLayout(); } } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { mMeasuredExactly = isMeasuredExactly(widthMeasureSpec, heightMeasureSpec); super.onMeasure(widthMeasureSpec, heightMeasureSpec); } private boolean isMeasuredExactly(int widthMeasureSpec, int heightMeasureSpec) { int widthMeasureSpecMode = MeasureSpec.getMode(widthMeasureSpec); int heightMeasureSpecMode = MeasureSpec.getMode(heightMeasureSpec); return widthMeasureSpecMode == MeasureSpec.EXACTLY && heightMeasureSpecMode == MeasureSpec.EXACTLY; } }