Android可左右滑动的ListView开源框架SwipeMenuListView

来源:互联网 发布:金鼎网络微营销软件 编辑:程序博客网 时间:2024/05/22 06:49

Android开源框架SwipeMenuListView

开源框架SwipeMenuListView可以让ListView条目可滑动,并且在条目上面添加控件,并设置点击事件。

效果:
s1

上面是我从源码中把主要的八个类,复制到我的项目中,就可以长久使用这个开源框架。而且直接复制网上的源码还是有点问题的(比如Menu资源文件报错!)

如图:

s1

使用:

一.布局文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="${relativePackage}.${activityClass}" >     <!-- 提示一下:包名要跟程序实际包名一样-->    <com.example.swip.swipemenulistview.SwipeMenuListView        android:id="@+id/listView"        android:layout_width="match_parent"        android:layout_height="match_parent" /></RelativeLayout>

二.java代码:

1.实例化自定View

SwipeMenuListView mListView= (SwipeMenuListView) findViewById(R.id.listView);

2.创建适配器,其实是一个继承BaseAdapter的类

AppAdapter mAdapter = new AppAdapter();

3.給ListView添加适配器

 mListView.setAdapter(mAdapter);

4.创建SwipeMenuCreator对象,可以在里面设置滑动Itme后显示的视图控件,可以设置想要的个数。

具体代码看示例。。。

5.給SwipeMenuListView 添加SwipeMenuCreator对象

mListView.setMenuCreator(creator);

6.设置各种监听

//设置点击Item里面控件的监听 mListView.setOnMenuItemClickListener//设置点击Item条目的监听,长按Item条目的监听等等监听

其实SwipeMenuListView就是一个List View,不过这里多设置了几个方法,并添加了以恶小手势判断等等。

主方法类示例:

package com.example.swip;import android.app.Activity;import android.graphics.Color;import android.graphics.drawable.ColorDrawable;import android.os.Bundle;import android.util.TypedValue;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.ImageView;import android.widget.TextView;import android.widget.Toast;import com.example.swip.swipemenulistview.*;import java.util.ArrayList;import java.util.List;public class MyActivity extends Activity {    private List<String> list = new ArrayList<String>();    private AppAdapter mAdapter;    private SwipeMenuListView mListView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_list);        for (int i = 0; i < 100; i++) {            list.add("item" + i + "行");        }        mListView = (SwipeMenuListView) findViewById(R.id.listView);        mAdapter = new AppAdapter();        mListView.setAdapter(mAdapter);        // step 1. create a MenuCreator        SwipeMenuCreator creator = new SwipeMenuCreator() {            @Override            public void create(SwipeMenu menu) {                // create "open" item                SwipeMenuItem openItem = new SwipeMenuItem(                        getApplicationContext());                // set item background                openItem.setBackground(new ColorDrawable(Color.rgb(0xC9, 0xC9,                        0xCE)));                // set item width                openItem.setWidth(dp2px(90));                // set item title                openItem.setTitle("Open");                // set item title fontsize                openItem.setTitleSize(18);                // set item title font color                openItem.setTitleColor(Color.WHITE);                // add to menu                menu.addMenuItem(openItem);                // create "delete" item                SwipeMenuItem deleteItem = new SwipeMenuItem(                        getApplicationContext());                // set item background                deleteItem.setBackground(new ColorDrawable(Color.rgb(0xF9,                        0x3F, 0x25)));                // set item width                deleteItem.setWidth(dp2px(90));                // set a icon                deleteItem.setIcon(R.drawable.ic_delete);                // add to menu                menu.addMenuItem(deleteItem);            }        };        // set creator        mListView.setMenuCreator(creator);        // step 2. listener item click event        mListView.setOnMenuItemClickListener(new SwipeMenuListView.OnMenuItemClickListener() {            @Override            public boolean onMenuItemClick(int position, SwipeMenu menu, int index) {                String item = list.get(position);                switch (index) {                    case 0:                        // open                         Toast.makeText(MyActivity.this,"点击了open",Toast.LENGTH_LONG).show();                        break;                    case 1:                        // delete//                  delete(item);                        list.remove(position);                        mAdapter.notifyDataSetChanged();                        break;                }                return false;            }        });        // other setting//      listView.setCloseInterpolator(new BounceInterpolator());        // test item long click        mListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {            @Override            public boolean onItemLongClick(AdapterView<?> parent, View view,                                           int position, long id) {                Toast.makeText(getApplicationContext(), position + " long click", Toast.LENGTH_SHORT).show();                return false;            }        });        // test item  click        mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> parent, View view,                                           int position, long id) {                Toast.makeText(getApplicationContext(), position + " click", Toast.LENGTH_SHORT).show();            }        });    }    class AppAdapter extends BaseSwipListAdapter {        @Override        public int getCount() {            return list.size();        }        @Override        public String getItem(int position) {            return list.get(position);        }        @Override        public long getItemId(int position) {            return position;        }        @Override        public View getView(int position, View convertView, ViewGroup parent) {            if (convertView == null) {                convertView = View.inflate(getApplicationContext(),                        R.layout.item_list, null);                new ViewHolder(convertView);            }            ViewHolder holder = (ViewHolder) convertView.getTag();            String item = getItem(position);            holder.iv_icon.setImageResource(R.drawable.ic_launcher);            holder.tv_name.setText(item );            holder.iv_icon.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View v) {                    Toast.makeText(MyActivity.this, "点击了图标", Toast.LENGTH_SHORT).show();                }            });            holder.tv_name.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View v) {                    Toast.makeText(MyActivity.this, "点击了文字", Toast.LENGTH_SHORT).show();                }            });            return convertView;        }        class ViewHolder {            ImageView iv_icon;            TextView tv_name;            public ViewHolder(View view) {                iv_icon = (ImageView) view.findViewById(R.id.iv_icon);                tv_name = (TextView) view.findViewById(R.id.tv_name);                view.setTag(this);            }        }        @Override        public boolean getSwipEnableByPosition(int position) {        //设置条目是否可以滑动//            if (position % 2 == 0) {//                return false;//            }            return true;        }    }    private int dp2px(int dp) {        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp,                getResources().getDisplayMetrics());    }}

下面是我程序的源码:

http://download.csdn.net/detail/wenzhi20102321/9812332

随便也提供一下经过我简单修改后可运行的复杂源码(简单注释了Menu资源调用,否则不能运行程序):
http://download.csdn.net/detail/wenzhi20102321/9812331

注意:程序运行需要V4兼容包!

复杂源码效果:
s3

s4
其实一般应用简单效果就够了,所有的Item滑出的效果一样!复杂效果就是根据条目的内容或属性不同设置滑动后显示的数据不同,用得较少!

共勉:程序袁靠的是一种信念,说不清道不明!

1 1
原创粉丝点击