1. 程式人生 > >解決圖片自適應高度的問題

解決圖片自適應高度的問題

自適應的載入方法

 public static void loadImgBySize(Context context, ImageView imageView, String imgUrl, int w, int h) {
        Glide.with(context).load(imgUrl).override(w, h).placeholder(R.mipmap.placeholder)
                .error(R.mipmap.placeholder)
                .crossFade()//設定淡入淡出效果
                .priority(Priority.NORMAL) //下載的優先順序
                //all:快取源資源和轉換後的資源 none:不作任何磁碟快取
                //source:快取源資源   result:快取轉換後的資源
                .diskCacheStrategy(DiskCacheStrategy.ALL) //快取策略
                .into(imageView);
    }

用法: w等於螢幕寬  h等於Integer.MAX_VALUE ,這樣可以解決圖片自適應高度的問題,剛開始我也有點不理解

下面是解釋:

ImageView這個控制元件只配置
<ImageView
    android:id="@+id/wg_dynamic_list_item_bg"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
     />
預設按圖片比例縮放顯示的

上面控制元件因為設定了寬度是match_parent,高度是自適應

 

下圖是在載入圖片的時候設定 override 的寬高都一樣,都是螢幕的寬度大小,此時ImageView的大小是按override設定時的寬高顯示,但是圖片的實際寬高是 高比寬大, 即使設定了圖片的寬為螢幕的寬,也不會平鋪顯示,因為等比例縮放,因為ImageView的高 沒有滿足 圖片的高 進行等比例縮放,所以只能在ImageView的高  裡面縮放到滿足等比例縮放的原則

下圖是ImageView的高度是螢幕寬的一半的,ImageView的寬度依舊是螢幕寬

但是,如果設定了override 的 高度足夠大,此時就可以忽略高度的存在了,等比例完全可以由寬度決定了

這就證明了可以解決圖片自適應高度的問題了

 

Glide常用的幾個方法:

1.將圖片載入成Bitmap

   public static void loadImgBitmap(Context context,String imgUrl){
        Glide.with(context)
                .load(imgUrl)
                .asBitmap()//強制Glide返回一個Bitmap物件
                .placeholder(R.mipmap.placeholder)
                .error(R.mipmap.placeholder)
                .into(new SimpleTarget<Bitmap>() {
                    @Override
                    public void onResourceReady(Bitmap bitmap, GlideAnimation<? super Bitmap> glideAnimation) {
                        int width = bitmap.getWidth();
                        int height = bitmap.getHeight();
                        LogUtils.e("width___" + width);
                        LogUtils.e("height___" + height);
                    }
                });
    }

2.載入成圓形

  /**
     * 載入圓圖
     *
     * @param context
     * @param imageView
     * @param imgUrl
     */
    public static void loadCircleImage(final Context context, final ImageView imageView, String imgUrl, int resourceId) {
        Glide.with(context)
                .load(imgUrl != null ? imgUrl.trim() : imgUrl)
                .asBitmap()
                .centerCrop()
                .placeholder(resourceId)
                .error(resourceId)
                .diskCacheStrategy(DiskCacheStrategy.ALL) //快取策略
                .priority(Priority.NORMAL) //下載的優先順序
                .into(new BitmapImageViewTarget(imageView) {
                    @Override
                    protected void setResource(Bitmap resource) {
                        RoundedBitmapDrawable circularBitmapDrawable =
                                RoundedBitmapDrawableFactory.create(context.getResources(), resource);
                        circularBitmapDrawable.setCircular(true);
                        imageView.setImageDrawable(circularBitmapDrawable);
                    }
                });
    }

3.自定義角度顯示

/**
     * 載入自定義圓角
     *
     * @param context
     * @param imageView
     * @param imgUrl
     */
    public static void loadRoundImage(final Context context, final ImageView imageView, String imgUrl, final float cornerRadius, int resourceId) {
        Glide.with(context)
                .load(imgUrl != null ? imgUrl.trim() : imgUrl)
                .asBitmap()
                .centerCrop()
                .placeholder(resourceId)
                .error(resourceId)
                .diskCacheStrategy(DiskCacheStrategy.ALL) //快取策略
                .priority(Priority.NORMAL) //下載的優先順序
                .into(new BitmapImageViewTarget(imageView) {
                    @Override
                    protected void setResource(Bitmap resource) {
                        RoundedBitmapDrawable circularBitmapDrawable =
                                RoundedBitmapDrawableFactory.create(context.getResources(), resource);
                        circularBitmapDrawable.setCornerRadius(cornerRadius);
                        imageView.setImageDrawable(circularBitmapDrawable);
                    }
                });
    }