1. 程式人生 > >自定義ImageView寬高相等

自定義ImageView寬高相等

ImageView顯示圖片的控制元件,應用中使用比較頻繁,當需要顯示的圖片寬高相等時除了固定寬高,還可以自定義ImageView,重寫onMeasure()方法,這個方法主要是可以測量控制元件的大小,實現寬高相等。直接上程式碼

public class WHImageView extends android.support.v7.widget.AppCompatImageView {

	public WHImageView(Context context, AttributeSet attrs) {
		super(context, attrs);
	}

	public WHImageView
(Context context) { super(context); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { // 設定View寬高的測量值 setMeasuredDimension(getDefaultSize(0, widthMeasureSpec), getDefaultSize(0, heightMeasureSpec)); // 只有setMeasuredDimension呼叫之後,才能使用getMeasuredWidth()和getMeasuredHeight()來獲取檢視測量出的寬高,以此之前呼叫這兩個方法得到的值都會是0
int childWidthSize = getMeasuredWidth(); // 高度和寬度一樣 heightMeasureSpec = widthMeasureSpec = MeasureSpec.makeMeasureSpec( childWidthSize, MeasureSpec.EXACTLY); super.onMeasure(widthMeasureSpec, heightMeasureSpec); } }

那麼在什麼時候會用到這個呢,這裡舉兩個例子

  1. RecyclerView中GridLayoutManager佈局,一行顯示多張圖片時,寬度設定wrap_content,那麼高度再設定wrap_content時就需要寬高相等,比如淘寶中的評價拍照
    在這裡插入圖片描述
  2. 頭像顯示,比如淘寶頭像點選放大效果
    在這裡插入圖片描述