Android 6種載入網路圖片的第三方詳解

Android_feng發表於2018-07-19

一. Glide載入

Glide.with(this).load("http://p0.qhimg.com/t015f3654b694ad2f8a.jpg").into(imageView);
複製程式碼

效果圖

Android  6種載入網路圖片的第三方詳解

 compile files('libs/glide-3.7.0.jar')
複製程式碼

二. Picasso

    Picasso.with(getApplicationContext()) //
                        .load("http://p0.qhimg.com/t015f3654b694ad2f8a.jpg") //載入地址
                        .placeholder(R.mipmap.ic_launcher)
                        //佔點陣圖
                        .error(R.mipmap.ic_launcher) //載入失敗的圖
                        .fit() //充滿
                        .tag(getApplicationContext()) //標記
                        .into(imageView);//載入到的ImageView
複製程式碼

在Build注入

//    首先在專案中引入picasso(以gradle為例)
//    compile 'com.squareup.picasso:picasso:2.5.2'
複製程式碼

三. ImageLoader

Android  6種載入網路圖片的第三方詳解
要使用ImageLoader必須先實現全域性的例項化,這樣可以避免每次使用都要重複程式碼 我們自定義一個MyApplication繼承自Application,程式碼如下

  • 然後需要在Manifest檔案中寫上程式碼:
 //就是這一行程式碼,要加在application標籤下
        android:name=".MyApplication"
複製程式碼

Build注入:

//ImageLoader
//    compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
複製程式碼
  • 然後再程式碼中使用就可以了
 String urls = "http://p0.qhimg.com/t015f3654b694ad2f8a.jpg";
            DisplayImageOptions options = new DisplayImageOptions.Builder()
                    .cacheInMemory(true)//在記憶體中快取
                    .cacheOnDisc(true)//儲存卡的快取,需要新增相應的儲存卡讀寫許可權
                    .showImageOnFail(R.mipmap.ic_launcher)//載入失敗的顯示的圖片
                    .showImageOnLoading(R.mipmap.ic_launcher)//載入過程中顯示的圖片
                    .build();
            ImageLoader.getInstance().displayImage(urls, imageView, options);//載入圖片
複製程式碼

四. Fresco

  • 這個框架可以用於載入網路上的gif圖片 使用這個框架需要匯入兩個包

Android  6種載入網路圖片的第三方詳解

  • 同時我們在佈局中引入這個框架中自帶的SimpleDraweeView控制元件

  • 注意這個使用的時候不要將它的寬高設定為包含內容,它不支援這個屬性,我們必須設定具體的寬高才可以

public class MainActivity extends AppCompatActivity implements View.OnClickListener {


    //注意導的哪一個包名,有恨多個,別混亂了
    //一共匯入了兩個包啊,千萬記住了啊,用來載入gif動圖的框架
    private Button button, button2;
    private SimpleDraweeView simpleDraweeView;
    //simpleDraweeView控制元件不支援包含內容的寬高設定,必須設定明確的大小

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //由於我們在佈局中使用了第三方框架的控制元件,所以我們必須在設定佈局之前進行第三方框架的initialize()方法
        Fresco.initialize(this);
        setContentView(R.layout.activity_main);

        init();
    }

    private void init() {
        button = (Button) findViewById(R.id.button);
        button.setOnClickListener(this);
        simpleDraweeView = (SimpleDraweeView) findViewById(R.id.simpleDraweeView);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.button:
                DraweeController animatedGifController = Fresco.newDraweeControllerBuilder()
                           //設定使其支援動畫
                        .setAutoPlayAnimations(true)
                        .setUri(Uri.parse("http://img4.duitang.com/uploads/item/201306/10/20130610100354_3WrWN.gif"))
                        .build();
                simpleDraweeView.setController(animatedGifController);
                break;
        }
    }
}
複製程式碼
  • 關於SimpleDraweeView 的相關屬性 fresco是自定義的屬性標籤
xmlns:fresco="http://schemas.android.com/apk/res-auto"
1
<com.facebook.drawee.view.SimpleDraweeView
  android:id="@+id/my_image_view"
  android:layout_width="20dp"
  android:layout_height="20dp"
  fresco:fadeDuration="300"     
  fresco:actualImageScaleType="focusCrop"
  fresco:placeholderImage="@color/wait_color"
  fresco:placeholderImageScaleType="fitCenter"
  fresco:failureImage="@drawable/error"
  fresco:failureImageScaleType="centerInside"
  fresco:retryImage="@drawable/retrying"
  fresco:retryImageScaleType="centerCrop"
  fresco:progressBarImage="@drawable/progress_bar"
  fresco:progressBarImageScaleType="centerInside"
  fresco:progressBarAutoRotateInterval="1000"
  fresco:backgroundImage="@color/blue"
  fresco:overlayImage="@drawable/watermark"
  fresco:pressedStateOverlayImage="@color/red"
  fresco:roundAsCircle="false"
  fresco:roundedCornerRadius="1dp"
  fresco:roundTopLeft="true"
  fresco:roundTopRight="false"
  fresco:roundBottomLeft="false"
  fresco:roundBottomRight="true"
  fresco:roundWithOverlayColor="@color/corner_color"
  fresco:roundingBorderWidth="2dp"
  fresco:roundingBorderColor="@color/border_color"
/>


fadeDuration        淡入淡出的時間
actualImageScaleType    圖片的填充方式
placeholderImage    預載入圖片
placeholderImageScaleType   預載入圖片填充方式
failureImage        載入失敗圖片
failureImageScaleType   失敗圖片填充方式
retryImage      重試圖片
retryImageScaleType 重試圖片填充方式
progressBarImage    載入進度圖片
progressBarImageScaleType   進度圖片填充方式
progressBarAutoRotateInterval 自動旋轉間隔
backgroundImage 背景圖片
overlayImage        覆蓋圖片
pressedStateOverlayImage    按下時覆蓋圖
roundAsCircle       是否為圓形圖
roundedCornerRadius 圓角弧度
roundTopLeft        左上角弧度
roundWithOverlayColor   圓角的覆蓋色
roundingBorderWidth 圓角的邊框寬度
roundingBorderColor 圓角邊框顏色
複製程式碼
  • 如果用此框架載入靜態圖片的話,直接使用此框架的空間setImageUri的方法就可以了

五. PhotoView

  • 關於這個框架的使用在這裡 https://github.com/chrisbanes/PhotoView
  Drawable bitmap = getResources().getDrawable(R.mipmap.ic_launcher);
                imageView.setImageDrawable(bitmap);
                PhotoViewAttacher mAttacher = new PhotoViewAttacher(imageView);
複製程式碼
  • 這裡需要注意
// If you later call mImageView.setImageDrawable/setImageBitmap/setImageResource/etc then you just need to call
mAttacher.update();
複製程式碼

** 六. Xutils **

Build注入:

  //  xutils
    compile 'org.xutils:xutils:3.3.38'
複製程式碼

在Application 進行註冊

public class App extends BaseApplication {
    @Override
    public void onCreate() {
        super.onCreate();

        //TODO 註冊Xutils
        x.Ext.init(this);

    }
}
複製程式碼

用法:

 //TODO xUTILS
        //xUtils繫結網路圖片
        //第一個引數是ImageView物件
        //第二個引數是URL字串地址
//        x.image().bind(rxdq_big_img, "http://p0.so.qhmsg.com/sdr/600_900_/t01d43698fbeca29695.jpg");
複製程式碼

歡迎下方留言評論 的幫助,可以打賞支援一下

微信

Android  6種載入網路圖片的第三方詳解
支付寶
Android  6種載入網路圖片的第三方詳解

相關文章