`
mickey_hou
  • 浏览: 247674 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Android GridView显示图片

 
阅读更多
package com.example.dynamicimage;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.methods.HttpGet;

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.http.AndroidHttpClient;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;

public class MainActivity extends Activity
{
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

setTitle("用图片填充GridView");
GridView gridview = (GridView) findViewById(R.id.gridview);
gridview.setAdapter(new ImageAdapter(this));

}

public class ImageAdapter extends BaseAdapter
{
private Context mContext;

// references to our images
// 地址自己去选择,可以尝试多个网站的,我试过百度的图片,不知为啥不可以?
private String[] myImageURL =
{
"http://pic3.nipic.com/20090520/2595280_225552071_2.jpg",
"http://pic9.nipic.com/20100831/4164977_115736793120_2.jpg",
"http://pic9.nipic.com/20100831/4164977_115736793120_3.jpg",
"http://pic9.nipic.com/20100831/4164977_115736793120_4.jpg",
"http://pic9.nipic.com/20100831/4164977_115736793120_5.jpg",
"http://pic9.nipic.com/20100831/4164977_115736793120_6.jpg"
};

public ImageAdapter(Context c)
{
mContext = c;
}

public int getCount()
{
return myImageURL.length;
}

public Object getItem(int position)
{
return myImageURL[position];
}

public long getItemId(int position)
{
return position;
}

public View getView(int position, View convertView, ViewGroup parent)
{
/*
* ImageView
*/
ImageView imageView = new ImageView(this.mContext);

try
{
// // 在网络条件好的情况下使用已注释的方法
// URL aryURI = new URL(myImageURL[position]);
// // 打开连接
// URLConnection conn = aryURI.openConnection();
// conn.connect();
// // 转变为 InputStream
// InputStream is = conn.getInputStream();
// // 将InputStream转变为Bitmap
// Bitmap bm = BitmapFactory.decodeStream(is);

// Bitmap bm = getBitMap(mContext, myImageURL[position]);
Bitmap bm = downloadBitmap(myImageURL[position]);
if (bm == null)
{
bm = BitmapFactory.decodeResource(mContext.getResources(),R.drawable.ic_launcher);
Log.i("BitmapPicture", "picture is null!!");
}
/* 关闭InputStream */
// is.close();
/* 添加图片 */
imageView.setImageBitmap(bm);
}
catch (Exception e)
{
e.printStackTrace();
}

// 填充ImageView
imageView.setLayoutParams(new GridView.LayoutParams(150, 133));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(4, 2, 2, 2);
return imageView;
}

/**
* 即使在网速不好的时候也能加载图片. 扩展:因为联网比较慢,为了用户的友好,可以使用线程Handle,进度条
*
* @param c
* @param url
* @return
*/
public synchronized Bitmap getBitMap(Context c, String url)
{
URL myFileUrl = null;
Bitmap bitmap = null;
try
{
myFileUrl = new URL(url);

// 打开网络连接
HttpURLConnection conn = (HttpURLConnection) myFileUrl.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream(); // 把得到的内容转换成流
int length = (int) conn.getContentLength(); // 获取文件的长度
if (length != -1)
{
byte[] imgData = new byte[length];
byte[] temp = new byte[512];
int readLen = 0;
int destPos = 0;
while ((readLen = is.read(temp)) > 0)
{
System.arraycopy(temp, 0, imgData, destPos, readLen);
destPos += readLen;
}

bitmap = BitmapFactory.decodeByteArray(imgData, 0,imgData.length);
}
}
catch (MalformedURLException e)
{
bitmap = BitmapFactory.decodeResource(c.getResources(),R.drawable.ic_launcher); // 当网络连接异常后,给个默认图片
return bitmap;
}
catch (IOException e)
{
bitmap = BitmapFactory.decodeResource(c.getResources(),R.drawable.ic_launcher);
return bitmap;
}

return bitmap;
}

public synchronized Bitmap downloadBitmap(String url)
{
    final AndroidHttpClient client = AndroidHttpClient.newInstance("Android");
    final HttpGet getRequest = new HttpGet(url);

    try
    {
        HttpResponse response = client.execute(getRequest);
        final int statusCode = response.getStatusLine().getStatusCode();
        if (statusCode != HttpStatus.SC_OK)
        {
            Log.w("ImageDownloader", "Error " + statusCode + " while retrieving bitmap from " + url);
            return null;
        }
       
        final HttpEntity entity = response.getEntity();
        if (entity != null)
        {
            InputStream inputStream = null;
            try
            {
                inputStream = entity.getContent();
                final Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
                return bitmap;
            } finally
            {
                if (inputStream != null)
                {
                    inputStream.close(); 
                }
                entity.consumeContent();
            }
        }
    }
    catch (Exception e)
    {
        // Could provide a more explicit error message for IOException or IllegalStateException
        getRequest.abort();
    }
    finally
    {
        if (client != null)
        {
            client.close();
        }
    }
    return null;
}
}
}
分享到:
评论

相关推荐

    Android中GridView以表格形式显示多张图片(仿桌面)

    在Android开发中,GridView是一种非常常用的控件,它允许我们以网格的形式展示数据,通常用于显示多张图片、图标或者列表项。这个话题是关于如何在Android应用中使用GridView来实现一个类似桌面的布局,展示多张图片...

    android 自定义gridView 按日期显示图片和视频 galleryDemo

    android 自定义gridView 按日期显示图片和视频 galleryDemo android 自定义gridView 按日期显示图片和视频 galleryDemo android 自定义gridView 按日期显示图片和视频 galleryDemo 免费下载 给个好评!

    Android GridView显示系统安装的应用程序

    在"Android GridView显示系统安装的应用程序"这个主题中,我们将探讨如何使用GridView来列出手机上已安装的所有应用程序。这篇博文(链接:https://lovezhou.iteye.com/blog/894078)提供了实现这一功能的详细步骤。...

    Android GridView完美横向滑动 ,并且可限制Gridview显示行数!

    4. **限制显示行数**:为了限制GridView显示的行数,你需要在适配器中计算总共有多少列,然后在`onMeasure()`中限制其宽度。例如,如果你希望最多显示3列,那么在计算总宽度时,使用`Math.min(totalCount / max...

    android GridView数据库开发案例

    在这样的应用中,GridView可以用来展示房源列表,每个单元格可能包含房源的图片、价格、面积等信息。用户点击某房源后,可能会跳转到房源详情页面,展示更全面的信息。 总结起来,"android GridView数据库开发案例...

    Android GridView 图片缩放

    在"Android GridView 图片缩放"这个主题中,我们将深入探讨如何在GridView中实现图片点击后放大显示的功能,这在创建类似相册的应用或者需要用户查看详细图像的场景下非常实用。 首先,我们需要理解GridView的基本...

    android gridview 加载大量图片。无OOM

    1. **使用低分辨率的缩略图**:加载原图前,先将其压缩为适合GridView显示的小尺寸版本。这样可以显著降低内存消耗。Android提供了Bitmap.createScaledBitmap()方法来创建缩略图。 2. **延迟加载(Lazy Loading)**...

    android 通过GridView控件获取本地图片并动态显示 程序源码

    文章是参考博客http://blog.csdn.net/eastmount/article/details/41808179完成,主要讲述通过GridView控件点击加号图片动态添加本地相册图片,点击图片可以删除已添加图片。同时界面比较美观。 免费资源,希望对大家...

    android GridView 添加图片

    在Android开发中,GridView是一种非常常见的布局控件,它允许我们以网格的形式展示数据,通常用于显示多张图片、图标或者其他元素。在这个场景下,"android GridView 添加图片"的主题涉及了如何在GridView中加载和...

    Android 分页缓存图片加载器,gridview显示

    在Android应用开发中,高效的图片加载对于用户体验至关重要,特别是在数据量大、页面滑动频繁的场景,如使用GridView展示图片。本项目针对这种情况,利用Android Studio进行开发,实现了分页缓存图片加载器,旨在...

    android Gridview 异步加载网络图片

    综上所述,"android Gridview 异步加载网络图片"是一个涉及Android UI设计、多线程编程、图片处理、缓存策略以及第三方库使用的综合主题。通过学习这个示例,开发者可以提升应用性能,提供更优质的用户体验。

    android gridview adapter 实例

    在这个"android gridview adapter 实例"中,我们将深入探讨如何使用Adapter来填充GridView,并实现每个GridView的item(单元格)显示不同的数据。 首先,理解Adapter在Android中的作用至关重要。Adapter是连接数据...

    android GridView搜索并显示SD卡上的图片

    例如,可以使用Glide或Picasso库来高效地加载和显示图片: ```java Glide.with(context) .load(path) // 图片路径 .override(dpWidth, dpHeight) // 设置尺寸 .centerCrop() // 居中裁剪 .into(imageView); ```...

    android gridview上图下字

    - **ImageView**: 用于显示图片。 - **TextView**: 用于显示文字。 - **RelativeLayout**: 使用相对定位来确保图片位于上方,文本位于下方。 ##### 2. 动态填充GridView 为了动态地向`GridView`中添加数据,可以...

    GridView显示大量图片

    在加载图片之前,通过`BitmapFactory.Options`的`inJustDecodeBounds`属性可以获取图片原始尺寸,进而计算出适合GridView显示的最佳尺寸。这样可以减少不必要的内存占用。 2. **缩放Bitmap** 使用`Bitmap....

    GridView中的Item放大缩小

    在Android开发中,GridView是一种常用的布局控件,它允许我们以网格的形式展示数据。当我们想要在GridView中实现每个Item(单元格)的放大缩小效果时,通常涉及到自定义Adapter、处理点击事件以及调整视图大小等多个...

    GridView加载大量图片卡的问题

    在Android开发中,GridView是一种常见的布局控件,用于展示大量数据,如图片、列表项等。然而,当GridView需要加载大量图片时,由于内存限制和性能问题,可能会出现明显的卡顿现象,严重影响用户体验。为了解决这个...

    android gridview 相关

    本资料主要聚焦于Android GridView的设计与应用,涵盖空数据处理、单排显示以及从JSON数据源加载内容等关键技巧。 1. GridView基本使用: GridView继承自AbsListView,通过Adapter来填充数据。首先,我们需要创建...

    Android GridView

    Android GridView是Android开发中常用的一种布局组件,它允许我们以网格的形式展示数据,常用于创建像照片库、菜单项选择等多列显示的界面。GridView继承自AbsListView,支持滚动和触摸交互,能根据数据集动态生成...

    android gridview 九宫格 动态添加信息

    总结来说,实现“android gridview 九宫格 动态添加信息”的关键在于:正确配置GridView的XML属性,创建自定义适配器以显示图像和文字,以及在运行时动态更新数据源并通知适配器。通过这种方式,我们可以创建出具有...

Global site tag (gtag.js) - Google Analytics