(簡單好用)GridView顯示網絡圖片(使用glide實現)

GridView加載本地圖片很easy,加載網絡圖片咋各種問題呢?什麼主線程訪問網絡異常啦等等。
那是沒有結合網絡框架的使用,比如Glide
1moudle的gardle先依賴glide

implementation 'com.github.bumptech.glide:glide:4.9.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'

2不忘記聯網,讀寫權限

<uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- 權限聲明 -->

3
主類

package com.blzt.test.mygridview;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

import com.blzt.test.R;

import java.util.ArrayList;
import java.util.HashMap;

public class GlideGridViewActivity extends Activity {
    private GridView mCircleBabyGridView;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_glide_grid_view);
        mCircleBabyGridView = (GridView) findViewById(R.id.circle_baby_grid_view);
        //下面對GridView進行加載
//下面的list是保存我們的圖片組URL的
        ArrayList<HashMap<String,String>> list=new ArrayList<>();
        for(int i=0;i<100;i++)
        {
//單個的Map保存我們的URL
            HashMap<String,String> map=new HashMap<>();
            map.put("ItemImage","http://192.168.2.161:8080/huashangservice/skuimg/3.png");
            list.add(map);
        }


        //下面是SimpleAdapter的構建過程(參數依次是:1:上下文,2:數據源,3:子項佈局,4:我們的子項佈局的鍵值對的鍵 5:子項佈局中鍵值對的值)
        SimpleAdapter adapter = new SimpleAdapter(GlideGridViewActivity.this,list,R.layout.circle_grid_view,new String[]{"ItemImage"},new int[]{R.id.ItemImage});
//判斷是否爲我們要處理的對象,在這裏adapter自動爲子項賦值
        adapter.setViewBinder(new SimpleAdapter.ViewBinder(){
            public boolean setViewValue(View view, Object data,
                                        String textRepresentation) {
                if(view instanceof ImageView){
                    ImageView iv = (ImageView)view;

//                    Glide.with(GlideGridViewActivity.this)
//                            .load("http://192.168.2.161:8080/huashangservice/skuimg/2.png")
//                            .into(iv);


                    GlideUtil.GlideWithPlaceHolder(GlideGridViewActivity.this, data.toString()).into(iv);
//給子項佈局加個點擊事件
                    iv.setOnClickListener(new View.OnClickListener(){
                        @Override
                        public void onClick(View v){
                            Toast.makeText(GlideGridViewActivity.this, "image"+1, Toast.LENGTH_SHORT).show();
                        }
                    });
                    return true;
                }else
                    return false;
            }
        });
        mCircleBabyGridView.setAdapter(adapter);


    }
}

activity_glide_grid_view.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".mygridview.GlideGridViewActivity">
    <!--朋友圈發佈的照片-->
    <GridView
        android:id="@+id/circle_baby_grid_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:numColumns="3"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="10dp"
        android:layout_marginRight="10dp"
        android:background="@color/white" />

</LinearLayout>

circle_grid_view.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <ImageView
        android:id="@+id/ItemImage"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_gravity="center"/>
</LinearLayout>

GlideUtil.java

public class GlideUtil {
    public static RequestBuilder<Drawable> GlideWithPlaceHolder(Context context, Object object) {
        return Glide.with(context).load(object).apply(new RequestOptions().placeholder(R.drawable.camera).dontAnimate());
    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章