话不多少,先看图片效果
实现了Android自定义ListView,ListView中的图片从服务端获取
1、 activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ListView
android:id="@+id/listv_my"
android:layout_width="match_parent"
android:layout_height="fill_parent" >
</ListView>
</LinearLayout>
2、listview_item
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="60dip"
>
<ImageView
android:id="@+id/imageView2"
android:layout_width="55dp"
android:layout_height="55dp"
android:layout_alignParentBottom="true"
android:layout_alignParentTop="true"
android:src="@drawable/ic_news" />
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_toRightOf="@+id/imageView2" >
<ImageView
android:id="@+id/imageView3"
android:layout_width="26dp"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:src="@drawable/ic_navigation_next" />
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:layout_toLeftOf="@+id/imageView3"
android:orientation="vertical" >
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="3dp"
android:text="标题"
android:textSize="17dip" />
<TextView
android:id="@+id/time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:text="时间"
android:textColor="#99CCFF" />
<TextView
android:id="@+id/content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_marginBottom="10dp"
android:layout_marginLeft="1dp"
android:text="内容" />
</RelativeLayout>
</RelativeLayout>
</RelativeLayout>
3、MainActivity.java
package com.example.mylistview;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiscCache;
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import com.nostra13.universalimageloader.cache.memory.impl.UsingFreqLimitedMemoryCache;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
import com.nostra13.universalimageloader.core.download.BaseImageDownloader;
import com.nostra13.universalimageloader.utils.StorageUtils;
import android.app.Activity;
import android.graphics.Bitmap.CompressFormat;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;
/**
* 自定义ListView 详细请参照swust1-gis.wangsj.sdjtu.NewsActivity 和 学生端8_1 FindFragment.java
* @author giswangsj
*
*/
public class MainActivity extends Activity {
private ListView listView;
List<HashMap<String, Object>> data;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
InitImageLoader();//初始化ImageLoader
listView = (ListView) findViewById(R.id.listv_my);
data = new ArrayList<HashMap<String, Object>>();
HashMap<String, Object> item = new HashMap<String, Object>();
item.put("id", "1");
item.put("title", "Jack");
item.put("content", "泰坦尼克号");
item.put("time", "[" + "2015-6-9" + "]");
data.add(item);
HashMap<String, Object> item2 = new HashMap<String, Object>();
item2.put("id", "2");
item2.put("title", "奥黛丽赫本");
item2.put("content", "罗马假日");
item2.put("time", "[" + "2015-6-9" + "]");
data.add(item2);
// SimpleAdapter adapter = new SimpleAdapter(this, data,
// R.layout.listview_item, new String[] { "title","content", "time" },
// new int[] { R.id.title, R.id.content,R.id.time });
// listView.setAdapter(adapter);
listView.setAdapter(new MyAdapter(data));
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Toast.makeText(getApplicationContext(),
data.get(position).get("content").toString(), 1).show();
}
});
}
/**
* 自定义Adapter
*/
class MyAdapter extends BaseAdapter{
List<HashMap<String, Object>> data;
public MyAdapter(List<HashMap<String, Object>> data) {
this.data=data;
}
private class ViewHolder {
public TextView title;
public TextView content;
public TextView time;
public ImageView image;
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int position) {
return data.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
final ViewHolder holder;
if (convertView == null) {
view =getLayoutInflater().inflate(R.layout.listview_item, parent, false);
holder = new ViewHolder();
holder.title = (TextView) view.findViewById(R.id.title);
holder.content = (TextView) view.findViewById(R.id.content);
holder.time = (TextView) view.findViewById(R.id.time);
holder.image = (ImageView) view.findViewById(R.id.imageView2);
view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
}
holder.title.setText(data.get(position).get("title").toString());
holder.content.setText(data.get(position).get("content").toString());
holder.time.setText(data.get(position).get("time").toString());
String urlString = "http://192.168.1.100:8080/videonews/images/"+data.get(position).get("id")+".jpg";
ImageLoader.getInstance().displayImage(urlString, holder.image);
return view;
}
}
/**
* 配置ImageLoader
*/
private void InitImageLoader() {
File cacheDir = StorageUtils.getOwnCacheDirectory(
getApplicationContext(), "imageloader/Cache");
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
getApplicationContext())
.memoryCacheExtraOptions(480, 800)
// max width, max height,即保存的每个缓存文件的最大长宽
.discCacheExtraOptions(480, 800, CompressFormat.JPEG, 75, null)
// Can slow ImageLoader, use it carefully (Better don't use
// it)/设置缓存的详细信息,最好不要设置这个
.threadPoolSize(3)
// 线程池内加载的数量
.threadPriority(Thread.NORM_PRIORITY - 2)
.denyCacheImageMultipleSizesInMemory()
.memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024))
// You can pass your own memory cache
// implementation/你可以通过自己的内存缓存实现
.memoryCacheSize(2 * 1024 * 1024)
.discCacheSize(50 * 1024 * 1024)
.discCacheFileNameGenerator(new Md5FileNameGenerator())
// 将保存的时候的URI名称用MD5 加密
.tasksProcessingOrder(QueueProcessingType.LIFO)
.discCacheFileCount(100) // 缓存的文件数量
.discCache(new UnlimitedDiscCache(cacheDir))// 自定义缓存路径
.defaultDisplayImageOptions(DisplayImageOptions.createSimple())
.imageDownloader(
new BaseImageDownloader(getApplicationContext(), 5 * 1000, 30 * 1000)) // connectTimeout
// (5
// s),
// readTimeout
// (30
// s)超时时间
.writeDebugLogs() // Remove for release app
.build();// 开始构建
// Initialize ImageLoader with configuration.
ImageLoader.getInstance().init(config);// 全局初始化此配置
// ImageLoader.getInstance().displayImage("http://192.168.1.100:8080/videonews/images/image1.jpg",
// imageView);
}
}
源码下载地址:http://download.youkuaiyun.com/detail/bigboysunshine/8826557