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());
}
}