首先我们要准备好图片的数据,就是一些网站上图片的地址
拿到之后就可以直接来写了
package com.example.androidnet; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListView; public class ListViewShowPic extends Activity { ListView listView; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.show_listview); listView = (ListView) findViewById(R.id.lv_show_img); MyAdapter adapter = new MyAdapter(this); listView.setAdapter(adapter); Log.d("logd", "--UI--"); } class MyAdapter extends BaseAdapter { /** * 网上的图片url */ String[] picUrls = new String[] { "http://bmob-cdn-1178.b0.upaiyun.com/2016/05/10/3e1acdd6ecdf4dc2aa9abc45be2443db.jpg", "http://bmob-cdn-1178.b0.upaiyun.com/2016/05/10/cff4bd31c3934c8388cd5b47d3d34e29.jpg", "http://bmob-cdn-1178.b0.upaiyun.com/2016/05/10/4fd9f3557acd4fb28b28af7a89a2ff27.jpg", "http://bmob-cdn-1178.b0.upaiyun.com/2016/05/10/7ead2966291e45c4aef8a198f127bd4a.jpg", "http://bmob-cdn-1178.b0.upaiyun.com/2016/05/10/245c7655f4de4536a539a559c9434ce4.jpg", "http://bmob-cdn-1178.b0.upaiyun.com/2016/05/10/51b047314ca74259839c4e6e666e9c71.jpg", "http://bmob-cdn-1178.b0.upaiyun.com/2016/05/10/1a11e2a135bf4bc29fd60831c64f558c.jpg" }; /** * 名称对应url上的图片名称 */ String[] picNames = new String[] { "3e1acdd6ecdf4dc2aa9abc45be2443db.jpg", "cff4bd31c3934c8388cd5b47d3d34e29.jpg", "4fd9f3557acd4fb28b28af7a89a2ff27.jpg", "7ead2966291e45c4aef8a198f127bd4a.jpg", "245c7655f4de4536a539a559c9434ce4.jpg", "51b047314ca74259839c4e6e666e9c71.jpg", "1a11e2a135bf4bc29fd60831c64f558c.jpg" }; String path = Environment.getExternalStorageDirectory() + "/listviewImg/";// 文件目录 LayoutInflater layoutInflater; Context context; File fileDir; public MyAdapter(Context context) { this.context = context; layoutInflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); /** * 文件目录如果不存在,则创建 */ fileDir = new File(path); if (!fileDir.exists()) { fileDir.mkdirs(); } } @Override public int getCount() { return picUrls.length; } @Override public Object getItem(int position) { return picUrls[position]; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view = layoutInflater.inflate(R.layout.listview_img, null); ImageView imageView = (ImageView) view.findViewById(R.id.img); /** * 创建图片文件 */ File file = new File(fileDir, picNames[position]); if (!file.exists()) {// 如果本地图片不存在则从网上下载 downloadPic(picNames[position], picUrls[position]); } else {// 图片存在则填充到listview上 Bitmap bitmap = BitmapFactory .decodeFile(file.getAbsolutePath()); imageView.setImageBitmap(bitmap); } return view; } /** * 使用子线程下载图片 * * @param name * @param url */ private void downloadPic(final String name, final String picurl) { new Thread(new Runnable() { @Override public void run() { FileOutputStream fos = null; InputStream in = null; // 创建文件 File file = new File(fileDir, name); try { fos = new FileOutputStream(file); URL url = new URL(picurl); in = url.openStream(); int len = -1; byte[] b = new byte[1024]; while ((len = in.read(b)) != -1) { fos.write(b, 0, len); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (fos != null) { fos.close(); } if (in != null) { in.close(); } } catch (IOException e) { e.printStackTrace(); } } } }).start(); } } }
两个布局文件show_listview.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ListView android:id="@+id/lv_show_img" android:layout_width="match_parent" android:layout_height="match_parent"> </ListView> </LinearLayout>
listview_img.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical" > <ImageView android:id="@+id/img" android:layout_width="200dp" android:layout_height="200dp" android:src="@drawable/bgimg"/> </LinearLayout>
配置权限
<!-- 在SDCard中创建与删除文件权限 --> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <!-- 往SDCard写入数据权限 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.INTERNET" />
demo下载:http://download.csdn.net/detail/an_illusion/9516537