GridView加载网络图片

GridView是一种九宫格布局,创建Gridview的方式跟创建listview的差不多,GridView的子Item可以是文本,也可以是文本加图片,自行定义,只要在方法中添加就行。GridView加载本地图片可以直接用Drawable获取图片资源,但是如果想要加载网络图片的话,就得用异步任务,获取图片资源,然后再加载到GridView中。
首先先写一个类,声明Item里面的内容控件,这里我的Item中有3个TextView跟一个ImageView。

public ImageAndText(String imageUrl, String text,String text1,String text2) {
        this.imageUrl = imageUrl;
        this.text = text;
        this.text1 = text1;
        this.text2 = text2;
    }
    public String getImageUrl() {
        return imageUrl;
    }
    public String getText() {
        return text;
    }
    public String getText1() {
        return text1;
    }
    public String getText2() {
        return text2;
    } 

然后写一个adapter类,将控件写入到Adapter中,先创建一个List,再将控件放进去。

//创建adapter
  public ImageAndTextListAdapter(Activity activity, List<ImageAndText> imageAndTexts, GridView gridView1) {
        super(activity, 0, imageAndTexts);
        this.gridView = gridView1;
        asyncImageLoader = new AsyncImageLoader();
    }
//将对应的控件放入对应的资源文件
 Drawable cachedImage = asyncImageLoader.loadDrawable(imageUrl,Tag,new ImageCallback() {
            public void imageLoaded(Drawable imageDrawable, String imageUrl, String Tag) {
                ImageView imageViewByTag = (ImageView) gridView.findViewWithTag(Tag);
                if (imageViewByTag != null) {
                    imageViewByTag.setImageDrawable(imageDrawable);
                }
            }
        });
        if (cachedImage == null) {
            imageView.setImageResource(R.drawable.longding);
        }else{
            imageView.setImageDrawable(cachedImage);
        }
        // Set the text on the TextView
        TextView textView1 = viewCache.getTextView1();
        textView1.setText(imageAndText.getText1());
        TextView textView = viewCache.getTextView();
        textView.setText(imageAndText.getText());
        TextView textView2 = viewCache.getTextView2();
        textView2.setText(imageAndText.getText2());
        return rowView;
    } 

这里需要将xml中的Gridview重写一个类,然后引用这个类,重写的类继承Gridview。

public class Noscrollgridview extends GridView{
    public Noscrollgridview(Context context,AttributeSet attrs) {
super(context,attrs);
}
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
         int mExpandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
         super.onMeasure(widthMeasureSpec, mExpandSpec);
    }
}
然后创建一个异步操作,开启新线程加载网络图片。
 public Drawable loadDrawable(final String imageUrl,final String Tag, final ImageCallback imageCallback) {
             if (imageCache.containsKey(imageUrl)) { 
                 SoftReference<Drawable> softReference = imageCache.get(imageUrl);
                 Drawable drawable = softReference.get();
                 if (drawable != null) {
                     return drawable;
                 }
                 if(drawable == null){
                 }
             }
             final Handler handler = new Handler() {
                 public void handleMessage(Message message) {
                     imageCallback.imageLoaded((Drawable) message.obj, imageUrl,Tag);
                 }
             };
             new Thread() {
                 @Override
                 public void run() {
                     Drawable drawable = loadImageFromUrl(imageUrl);
                     imageCache.put(imageUrl, new SoftReference<Drawable>(drawable));
                     Message message = handler.obtainMessage(0, drawable);
                     handler.sendMessage(message);
                 }
             }.start();
             return null;
         }     
    public static Drawable loadImageFromUrl(String url) {
    /**
     * 加载网络图片
       */

        try {
            return Drawable.createFromStream(new URL(url).openStream(), "src");
        } catch (Exception e) {
            throw new RuntimeException();
        }
    public interface ImageCallback {
             public void imageLoaded(Drawable imageDrawable, String imageUrl,String Tag);           
         }
public Drawable loadDrawable1(String imageUrl, String tag2,
ImageCallback imageCallback) {
// TODO Auto-generated method stub
return null;
}

最后在activity中创建一个Gridview,方法跟创建Gridview方法一样,urls1为图片的网址。

private void initView1() {
gridview1 = (GridView) findViewById(R.id.gridview1);
// 实力化几个ImageAndText 对象
List<ImageAndText> listImageAndText1 = new ArrayList<ImageAndText>();
for (int i = 0; i < urls1.length; i++) {
ImageAndText iat = new ImageAndText(urls1[i], titlename1[i],
titlename2[i], titlename3[i]);
listImageAndText1.add(iat);
}
// Activity activity, List<ImageAndText> imageAndTexts, GridView
// gridView1
adapter1 = new ImageAndTextListAdapter(MainActivity.this,
listImageAndText1, gridview1);
gridview1.setAdapter(adapter1);
// 取消GridView默认点击背景图片
gridview1.setSelector(new ColorDrawable(Color.TRANSPARENT));
gridview1.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
Intent intent = new Intent(MainActivity.this, sss.class);
startActivity(intent);
}
});
} 

这里写图片描述

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值