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

46 篇文章 0 订阅
18 篇文章 0 订阅

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滑出的效果一样!复杂效果就是根据条目的内容或属性不同设置滑动后显示的数据不同,用得较少!

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

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

峥嵘life

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值