首先在drawable下定义选择器shape_bg_listview.xml 实现圆角
Layout下新建 ListView布局 seting.xml
ListView的item布局文件
main_tab_setting_list_item.xml
Settings.java
public class Settings extends Fragment{
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
SetingOne();
SetingTwo();
super.onActivityCreated(savedInstanceState);
}
private void SetingOne()
{
CornerListView cornerListView = (CornerListView) getActivity().findViewById(R.id.setting_list);
ArrayList mList = setListDataOne();
// 获取MainListAdapter对象
MainListViewAdapter adapter = new MainListViewAdapter(getActivity().getApplicationContext(),mList);
// 将MainListAdapter对象传递给ListView视图
cornerListView.setAdapter(adapter);
}
private void SetingTwo()
{
CornerListView cornerListView2 = (CornerListView) getActivity().findViewById(R.id.setting_list2);
ArrayList mList = setListDataTwo();
MainListViewAdapter adapter = new MainListViewAdapter(getActivity().getApplicationContext(),mList);
cornerListView2.setAdapter(adapter);
}
/**
* 设置列表数据
*/
private ArrayList setListDataOne(){
ArrayList mList = new ArrayList();
Resources res = this.getResources();
ListItem item = new ListItem();
item.setImage(res.getDrawable(R.drawable.set1));
item.setTitle("图片");
mList.add(item);
item = new ListItem();
item.setImage(res.getDrawable(R.drawable.set2));
item.setTitle("计算器");
mList.add(item);
item = new ListItem();
item.setImage(res.getDrawable(R.drawable.set3));
item.setTitle("购物");
mList.add(item);
item = new ListItem();
item.setImage(res.getDrawable(R.drawable.set4));
item.setTitle("地图");
mList.add(item);
item = new ListItem();
item.setImage(res.getDrawable(R.drawable.set5));
item.setTitle("设置");
mList.add(item);
return mList;
}
private ArrayList setListDataTwo(){
ArrayList mList = new ArrayList();
Resources res = this.getResources();
ListItem item = new ListItem();
item.setImage(res.getDrawable(R.drawable.set6));
item.setTitle("超级模式");
mList.add(item);
item = new ListItem();
item.setImage(res.getDrawable(R.drawable.set7));
item.setTitle("招贤纳士");
mList.add(item);
return mList;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
//return super.onCreateView(inflater, container, savedInstanceState);
return inflater.inflate(R.layout.seting, container, false);
}
}
MainListViewAdapter.java
package com.lc.settings;
import java.util.ArrayList;
import com.lc.map.R;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class MainListViewAdapter extends BaseAdapter {
public Context congb;
public ArrayList mList;
public MainListViewAdapter(Context _congb,ArrayList _mList)
{
congb = _congb;
mList = _mList;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mList.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return mList.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ListItemView listItemView;
// 初始化item view
if (convertView == null) {
// 通过LayoutInflater将xml中定义的视图实例化到一个View中
convertView = LayoutInflater.from(congb).inflate(
R.layout.main_tab_setting_list_item, null);
// 实例化一个封装类ListItemView,并实例化它的两个域
listItemView = new ListItemView();
listItemView.imageView = (ImageView) convertView
.findViewById(R.id.iv_system_left);
listItemView.textView = (TextView) convertView
.findViewById(R.id.tv_system_title);
// 将ListItemView对象传递给convertView
convertView.setTag(listItemView);
} else {
// 从converView中获取ListItemView对象
listItemView = (ListItemView) convertView.getTag();
}
// 获取到mList中指定索引位置的资源
Drawable img = mList.get(position).getImage();
String title = mList.get(position).getTitle();
// 将资源传递给ListItemView的两个域对象
listItemView.imageView.setImageDrawable(img);
listItemView.textView.setText(title);
// 返回convertView对象
return convertView;
}
}
/**
* 封装两个视图组件的类
*/
class ListItemView {
ImageView imageView;
TextView textView;
}
/**
* 封装了两个资源的类
*/
class ListItem {
private Drawable image;
private String title;
public Drawable getImage() {
return image;
}
public void setImage(Drawable image) {
this.image = image;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
CornerListView.java
package com.lc.settings;
import com.lc.map.R;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.AdapterView;
import android.widget.ListView;
public class CornerListView extends ListView {
public CornerListView(Context context) {
super(context);
}
public CornerListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public CornerListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
int x = (int) ev.getX();
int y = (int) ev.getY();
int itemnum = pointToPosition(x, y);
if (itemnum == AdapterView.INVALID_POSITION)
break;
else {
if (itemnum == 0) {
if (itemnum == (getAdapter().getCount() - 1)) {
//只有一项
setSelector(R.drawable.app_list_corner_round);
} else {
//第一项
setSelector(R.drawable.app_list_corner_round_top);
}
} else if (itemnum == (getAdapter().getCount() - 1))
//最后一项
setSelector(R.drawable.app_list_corner_round_bottom);
else {
//中间项
setSelector(R.drawable.app_list_corner_round_center);
}
}
break;
case MotionEvent.ACTION_UP:
break;
}
return super.onInterceptTouchEvent(ev);
}
}
http://androidhub.diandian.com/post/2011-10-29/6345098
注意1:背景与listview的颜色应该对比强烈一点
2:listview与ScrollView的冲突问题
有时圆角并不是很好看,充满还好看一点,把圆角去掉把 android:layout_margin去掉,在看效果
原文地址:http://www.tnblog.net/aojiancc2/article/details/3135