1. 程式人生 > >Android Glide載入圖片自動適應寬度

Android Glide載入圖片自動適應寬度

因為android的imgeview的scaletype都沒有可以在不改變原圖片比例的情況下自適應寬度的種類。所以用glide載入圖片的時候想要自適應寬度需要自己做點處理。

主要的思路就是在獲取到圖片之後,獲得圖片的寬dw和高dh,然後根據imageview的寬度vw計算出來imageview的高度vh,再載入圖片到imageview中,就可以保持原來圖片的比例了。

glide是在listener()方法中傳入一個RequestListener來設定當圖片資源準備好了以後自定義的操作的。程式碼如下:

    /**
     * 自適應寬度載入圖片。保持圖片的長寬比例不變,通過修改imageView的高度來完全顯示圖片。
     */
public static void loadIntoUseFitWidth(Context context, final String imageUrl, int errorImageId, final ImageView imageView) { Glide.with(context) .load(imageUrl) .diskCacheStrategy(DiskCacheStrategy.SOURCE) .listener(new RequestListener<String, GlideDrawable>() { @Override
public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) { return false; } @Override public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean
isFromMemoryCache, boolean isFirstResource) { if (imageView == null) { return false; } if (imageView.getScaleType() != ImageView.ScaleType.FIT_XY) { imageView.setScaleType(ImageView.ScaleType.FIT_XY); } ViewGroup.LayoutParams params = imageView.getLayoutParams(); int vw = imageView.getWidth() - imageView.getPaddingLeft() - imageView.getPaddingRight(); float scale = (float) vw / (float) resource.getIntrinsicWidth(); int vh = Math.round(resource.getIntrinsicHeight() * scale); params.height = vh + imageView.getPaddingTop() + imageView.getPaddingBottom(); imageView.setLayoutParams(params); return false; } }) .placeholder(errorImageId) .error(errorImageId) .into(imageView); }

使用的話就直接呼叫

loadIntoUseFitWidth(mContext, url, R.drawable.blank, holder.imageView);