自定義ImageView寬高相等
阿新 • • 發佈:2018-12-15
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);
}
}
那麼在什麼時候會用到這個呢,這裡舉兩個例子
- RecyclerView中GridLayoutManager佈局,一行顯示多張圖片時,寬度設定wrap_content,那麼高度再設定wrap_content時就需要寬高相等,比如淘寶中的評價拍照
- 頭像顯示,比如淘寶頭像點選放大效果