Android:ListView 圆角(完善)
上篇中主要使用shape,corners,gradient实现了一个圆角效果,但是选中和放手的事件监听没有去做,使用shape等不如用图片。
一、首选准备5张*.9.png图片
R.drawable.corner_list_bg,
R.drawable.corner_list_top_pressed,
R.drawable.corner_list_bootom_pressed,
R.drawable.corner_list_single_pressed
R.drawable.corner_list_pressed,
二、器构造
根据前面的后4张图片我们来构造选中时的对应选择器:
<!-- corner_list_top_item.xml 头部-->
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="true" android:state_selected="true" android:drawable="@drawable/corner_list_top_pressed" />
<item android:state_enabled="true" android:state_pressed="true" android:drawable="@drawable/corner_list_top_pressed" />
</selector>
<!-- corner_list_bottom_item.xml 底部-->
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="true" android:state_selected="true" android:drawable="@drawable/corner_list_bottom_pressed" />
<item android:state_enabled="true" android:state_pressed="true" android:drawable="@drawable/corner_list_bottom_pressed" />
</selector>
<!-- corner_list_item.xml 中间-->
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="true" android:state_selected="true" android:drawable="@drawable/corner_list_pressed" />
<item android:state_enabled="true" android:state_pressed="true" android:drawable="@drawable/corner_list_pressed" />
</selector>
<!-- corner_list_single_item.xml 单一-->
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="true" android:state_selected="true" android:drawable="@drawable/corner_list_single_pressed" />
<item android:state_enabled="true" android:state_pressed="true" android:drawable="@drawable/corner_list_single_pressed" />
</selector>
三、重写Listview
public class CornerListView extends ListView { public CornerListView(Context context) { this(context, null); } public CornerListView(Context context, AttributeSet attrs) { super(context, attrs); //整个listview的圆角背景 this.setBackgroundResource(R.drawable.corner_list_bg); } @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.corner_list_single_item); } else { //第一项 setSelector(R.drawable.corner_list_top_item); } } else if (itemnum==(getAdapter().getCount()-1)){ //最后一项 setSelector(R.drawable.corner_list_bottom_item); } else { //中间项 setSelector(R.drawable.corner_list_item); } } break; case MotionEvent.ACTION_UP: break; } return super.onInterceptTouchEvent(ev); } }
四、布局xml准备,这里和之前(Listview圆角)一样,同时AndroidManifest.xml也是一样的,省略不写喽
五、Activity应用
public class ListviewConcerActivity extends Activity{ private CornerListView cornerListView = null; private List<Map<String,String>> listData = null; private SimpleAdapter adapter = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_setting); cornerListView = (CornerListView)findViewById(R.id.setting_list); setListData(); adapter = new SimpleAdapter(getApplicationContext(), listData, R.layout.main_setting_item , new String[]{"text"}, new int[]{R.id.setting_list_item_text}); cornerListView.setAdapter(adapter); } /** * 设置列表数据 */ private void setListData(){ listData = new ArrayList<Map<String,String>>(); Map<String,String> map = new HashMap<String, String>(); map.put("text", "图库更新"); listData.add(map); map = new HashMap<String, String>(); map.put("text", "收藏图片"); listData.add(map); map = new HashMap<String, String>(); map.put("text", "下载目录"); listData.add(map); map = new HashMap<String, String>(); map.put("text", "关于我们"); listData.add(map); } }
ok整理完喽
浙公网安备 33010602011771号