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整理完喽

posted on 2013-04-26 11:52  菜鸟-青  阅读(182)  评论(0)    收藏  举报