listview实现圆角是一种需求,我的思路是,首先判断listview有多少条数据,如果只有一条,给listitem单独的圆角背景图片,如果有两条,给listitem设置上下圆角背景图片,如果大于2条,给第一个item设置上圆角背景图片,中间的所有item设置常规listitem图片,最后一项设置下圆角图片。下面是实现方法:
首先设置背景xml文件
onlylistone.xml (只有一个item)
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/onlyone" />
<item android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/onlyone_press" />
<item android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/onlyone_press" />
<item android:state_selected="true" android:state_pressed="true" android:drawable="@drawable/onlyone_press" />
</selector>
busnesshead.xml(第一个item背景)
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/busnesslisthead" />
<item android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/busnesslisthead_press" />
<item android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/busnesslisthead_press" />
<item android:state_selected="true" android:state_pressed="true" android:drawable="@drawable/busnesslisthead_press" />
</selector>
busnesscenter.xml(中间的item背景)
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/busnesslistcenter" />
<item android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/busnesslistcenter_press" />
<item android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/busnesslistcenter_press" />
<item android:state_selected="true" android:state_pressed="true" android:drawable="@drawable/busnesslistcenter_press" />
</selector>
busnessbottom.xml(最后一项item背景)
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/busnesslistbottom" />
<item android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/busnesslistbottom_press" />
<item android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/busnesslistbottom_press" />
<item android:state_selected="true" android:state_pressed="true" android:drawable="@drawable/busnesslistbottom_press" />
</selector>
java代码中的设置(代码片段,最重要的是setItemBackground()方法)
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder vHolder = null;
if(convertView == null)
{
convertView = View.inflate(context, R.layout.bussnesscard_listitem2,
null);
vHolder = new ViewHolder();
vHolder.relative_calllog_list = (RelativeLayout) convertView.findViewById(R.id.relative_calllog_list);
vHolder.txt_personNum = (TextView) convertView.findViewById(R.id.txt_phonenum);
vHolder.img_calltype = (ImageView) convertView.findViewById(R.id.img_calltype);
vHolder.txt_calldate = (TextView) convertView.findViewById(R.id.txt_date);
convertView.setTag(vHolder);
}else
{
vHolder = (ViewHolder) convertView.getTag();
}
vHolder.relative_calllog_list.setBackgroundResource(setItemBackground(position));
CallLogBean bean = (CallLogBean) getItem(position);
String phoneNum = bean.getNumber();
int type = bean.getType();
long calldate = Long.parseLong(bean.getDate());
StringBuilder nowDate = StringUtils.FormatStartTime(calldate);
vHolder.txt_personNum.setText(phoneNum);
vHolder.txt_calldate.setText(nowDate);
return convertView;
}
private int setItemBackground(int position) {
if (position == 0 && arrayList.size() == 1) {
//只有一个item
return R.drawable.onlylistone;
}
if (position == 0) {
//设置第一个item背景
return R.drawable.busnesshead;
}
if (position == arrayList.size() - 1) {
//设置最后一个item背景
return R.drawable.busnessbottom;
}
//中间所有item背景
return R.drawable.busnesscenter;
}
}