第四篇:自定义带图片的ListView的实现(一)
2012-03-07 11:04
295 查看
肥鱼最近受朋友委托要写一个小说阅读器.
肥鱼觉得Ireader的书架特别漂亮.
可是,肥鱼没有美工,而且肥鱼的艺术细胞太少了.
肥鱼要做一个列表形式的.
大家看看肥鱼想实现的界面,后面接着上传源码.
![](http://hi.csdn.net/attachment/201203/7/0_13310886286P5i.gif)
界面很简单,左侧显示一张图片,右侧上下显示两行文字.
废话少说,接下来看一下一步步的实现.
第一步,我们先定义一个xml的布局文件,该布局文件的样式就是你希望能够在listview中显示的item的样式.也就是咱们界面中文字 图片的显示.
list.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/relativeLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true" />
<TextView
android:id="@+id/title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignTop="@id/image"
android:layout_toRightOf="@id/image"
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:id="@+id/info"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/title"
android:layout_below="@+id/title" />
</RelativeLayout>
这里使用了一RelativeLayout,这样较方便的就能够将控件的位置定义好.
接下来我们看一下Activity的实现.这里,肥鱼使用了一个ListActivity.
ListViewActivity.java
public class ListViewActivity extends ListActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SimpleAdapter adapter = new SimpleAdapter(this, getData(),
R.layout.list, new String[] { "title", "info", "image" },
new int[] { R.id.title, R.id.info, R.id.image });
setListAdapter(adapter);
}
// 该方法取得数据
private List<Map<String, Object>> getData() {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Map<String, Object> map;
map = new HashMap<String, Object>();
map.put("title", "测试标题一");
map.put("info", "这是一个测试标题(一)");
map.put("image", R.drawable.ic_launcher);
list.add(map);
map = new HashMap<String, Object>();
map.put("title", "测试标题二");
map.put("info", "这是一个测试标题(二)");
map.put("image", R.drawable.ic_launcher);
list.add(map);
map = new HashMap<String, Object>();
map.put("title", "测试标题三");
map.put("info", "这是一个测试标题(三)");
map.put("image", R.drawable.ic_launcher);
list.add(map);
return list;
}
}
启动模拟器,看一下运行效果.
肥鱼发现一个问题,就是用这样的方式来实现的List,图片只能加载项目里面自带的图片,来自SD卡或者网络的图片不能加载.看了下ListActivity的源码发现,bindView(int position, View view);这个方法造成的只能加载资源中的图片.
2012年3月7日11:17:03 纠正一个错误:
bindView(int position, View view)方法是Adapter中的而不是ListActivity中的.
肥鱼正在研究,研究好了跟大家分享.
项目源码下载: http://download.csdn.net/download/amheaven1121/4119259
肥鱼觉得Ireader的书架特别漂亮.
可是,肥鱼没有美工,而且肥鱼的艺术细胞太少了.
肥鱼要做一个列表形式的.
大家看看肥鱼想实现的界面,后面接着上传源码.
![](http://hi.csdn.net/attachment/201203/7/0_13310886286P5i.gif)
界面很简单,左侧显示一张图片,右侧上下显示两行文字.
废话少说,接下来看一下一步步的实现.
第一步,我们先定义一个xml的布局文件,该布局文件的样式就是你希望能够在listview中显示的item的样式.也就是咱们界面中文字 图片的显示.
list.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/relativeLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true" />
<TextView
android:id="@+id/title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignTop="@id/image"
android:layout_toRightOf="@id/image"
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:id="@+id/info"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/title"
android:layout_below="@+id/title" />
</RelativeLayout>
这里使用了一RelativeLayout,这样较方便的就能够将控件的位置定义好.
接下来我们看一下Activity的实现.这里,肥鱼使用了一个ListActivity.
ListViewActivity.java
public class ListViewActivity extends ListActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SimpleAdapter adapter = new SimpleAdapter(this, getData(),
R.layout.list, new String[] { "title", "info", "image" },
new int[] { R.id.title, R.id.info, R.id.image });
setListAdapter(adapter);
}
// 该方法取得数据
private List<Map<String, Object>> getData() {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Map<String, Object> map;
map = new HashMap<String, Object>();
map.put("title", "测试标题一");
map.put("info", "这是一个测试标题(一)");
map.put("image", R.drawable.ic_launcher);
list.add(map);
map = new HashMap<String, Object>();
map.put("title", "测试标题二");
map.put("info", "这是一个测试标题(二)");
map.put("image", R.drawable.ic_launcher);
list.add(map);
map = new HashMap<String, Object>();
map.put("title", "测试标题三");
map.put("info", "这是一个测试标题(三)");
map.put("image", R.drawable.ic_launcher);
list.add(map);
return list;
}
}
启动模拟器,看一下运行效果.
肥鱼发现一个问题,就是用这样的方式来实现的List,图片只能加载项目里面自带的图片,来自SD卡或者网络的图片不能加载.看了下ListActivity的源码发现,bindView(int position, View view);这个方法造成的只能加载资源中的图片.
2012年3月7日11:17:03 纠正一个错误:
bindView(int position, View view)方法是Adapter中的而不是ListActivity中的.
肥鱼正在研究,研究好了跟大家分享.
项目源码下载: http://download.csdn.net/download/amheaven1121/4119259
相关文章推荐
- ListView通过自定义的Adapter实现异步下载显示网络图片
- ListView通过自定义的Adapter实现异步下载显示网络图片
- ListView 中显示自定义单选列表,实现单选效果(左文字,右图片)
- android自定义BaseAdapter,实现从网络加载包含图片的listview
- ExpandableListView的完美实现,JSON数据源,右边自定义图片
- listView 与自定义checkBox 实现多选效果,并记录多选的结果(左文字,右图片)
- 自定义 ListView 实现图片的拉伸放大;松手图片还原
- 实现自定义view(2):仿Android QQ多屏幕显示ListView的效果
- android 自定义ScrollView实现背景图片伸缩(阻尼效果)
- android开发游记:自定义实现图片轮播器和启动页面滚动
- 自定义JSP标签实现语言国际化(类似struts text标签),并同时支持图片、JS文件国际化
- Android自定义View 实现图片编辑功能(包括普通涂鸦、画圆、画矩形、画箭头、写字)
- AndrowListView实现(自定义游戏列表)防止屏幕闪烁,设置分割线android中不推荐的方法,要考虑向下兼容,用了推荐的新方法,可能不兼容旧版本系统的手机
- Qt通过UDP传图片,实现自定义分包和组包
- ImageView里面的图片实现同时移动缩放旋转 photoView自定义
- Android实现ListView异步加载图片
- Android实现自定义轮播图片控件示例
- 自定义ArrayAdapter实现listview分割线的多种颜色
- android总结整理----(3)自定义ListView(自定义BaseAdapter实现)
- [自定义组件之四]利用Quartz2D实现圆形图片显示