SlideAndDragListView的使用

http://download.csdn.net/detail/a_person_alone/9519537SlideAndDragListView支持ListView的Item的拖动排序、左右滑动事件,可自定义左右滑动显示文字、图标、位移,同时支持onItemClick、onItemLongClick等监听器,提供丰富的回调接口。在QQ5.0有类似功能

SlideAndDragListView的gitHub地址:https://github.com/yydcdut/SlideAndDragListView

因为这个开源项目是用Android Studio开发的,如果不会使用Android Studio 导入开源项目的话,可以看看我的这篇博客:http://blog.csdn.net/a_person_alone/article/details/51397783

导入所需要的开源项目以后,接下来就看看怎么使用了。

主要布局代码

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/white"
    android:orientation="vertical"
    >

    <com.yydcdut.sdlv.SlideAndDragListView
        android:id="@+id/lv_edit"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:divider="@android:color/black"
        android:listSelector="@drawable/list_selector"
        android:dividerHeight="0.5dip"
        android:paddingLeft="8dip"
        android:paddingRight="8dip">
    </com.yydcdut.sdlv.SlideAndDragListView>



</RelativeLayout>

上面的代码基本没有什么难度,就不多解释了,其他比较简单的xml文件我就在源码里面一起给出了

MainActivity代码,我基本也有了注释,应该也不难理解,理解源代码,应该把apk安装在手机里看看效果,再来看源代码。apk可以在源码的如下截图里面获取,两个都可以用。安装 到手机上可以检测效果。

这里写图片描述

package com.zengfeng.draglist;


import android.annotation.TargetApi;
import android.app.Activity;
import android.content.pm.ApplicationInfo;
import android.graphics.Color;


import android.os.Build;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;


import com.yydcdut.sdlv.DragListView;
import com.yydcdut.sdlv.Menu;
import com.yydcdut.sdlv.MenuItem;
import com.yydcdut.sdlv.SlideAndDragListView;

import java.util.List;

public class MainActivity extends Activity {

    //每一行的隐藏菜单
    private Menu nMenu;
    //每一行的填充数据源
    private List<ApplicationInfo> mListApp;
    //滑动和拖动控件
    private SlideAndDragListView<ApplicationInfo> mListView;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //初始化数据
        initData();
        //初始化list中的隐藏菜单项
        initMenu();


        //初始化控件
        mListView = (SlideAndDragListView<ApplicationInfo>) findViewById(R.id.lv_edit);
        //为mListView设置隐藏菜单
        mListView.setMenu(nMenu);
        //设置适配器
        mListView.setAdapter(mAdapter);

        /**
         * 设置监听器
         */

        //设置长按监听
        mListView.setOnListItemLongClickListener(new SlideAndDragListView.OnListItemLongClickListener() {
            @Override
            public void onListItemLongClick(View view, int position) {
                Toast.makeText(MainActivity.this, "长按list" + position, Toast.LENGTH_SHORT).show();
            }
        });

        //设置移动控件监听
        mListView.setOnDragListener(new DragListView.OnDragListener() {
            @Override
            //移动控件开始
            public void onDragViewStart(int position) {
                Toast.makeText(MainActivity.this, "移动控件开始" + position, Toast.LENGTH_SHORT).show();
            }

            @Override
            //移动控件进行中
            public void onDragViewMoving(int position) {
                Toast.makeText(MainActivity.this, "移动控件进行中" + position, Toast.LENGTH_SHORT).show();
            }

            @Override
            //移动控件移动停止
            public void onDragViewDown(int position) {
                Toast.makeText(MainActivity.this, "移动控件移动停止" + position, Toast.LENGTH_SHORT).show();
            }

            //这里还有一个参数
        }, mListApp);


        //点击监听
        mListView.setOnListItemClickListener(new SlideAndDragListView.OnListItemClickListener() {
            @Override
            public void onListItemClick(View v, int position) {
                Toast.makeText(MainActivity.this, "点击" + position, Toast.LENGTH_SHORT).show();
            }
        });




        //滑动监听
        mListView.setOnSlideListener(new SlideAndDragListView.OnSlideListener() {
            @Override
            //滑动打开监听
            public void onSlideOpen(View view, View parentView, int position, int direction) {
                Toast.makeText(MainActivity.this, "滑动打开监听" + position, Toast.LENGTH_SHORT).show();
            }


            @Override
            //滑动关闭监听
            public void onSlideClose(View view, View parentView, int position, int direction) {
                Toast.makeText(MainActivity.this, "滑动关闭监听" + position, Toast.LENGTH_SHORT).show();
            }
        });

        //隐藏菜单子项点击监听
        mListView.setOnMenuItemClickListener(new SlideAndDragListView.OnMenuItemClickListener() {
            @Override
            public int onMenuItemClick(View v, int itemPosition, int buttonPosition, int direction) {

                switch (direction){
                    //如果是打开左边的item
                    case MenuItem.DIRECTION_LEFT:
                        switch (buttonPosition){
                            case 0:
                                //无效果
                                return  Menu.ITEM_NOTHING;
                            case 1:
                                //滑动关闭listView的子项
                                return Menu.ITEM_SCROLL_BACK;

                        }
                        break;

                    //如果是打开右边的item
                    case MenuItem.DIRECTION_RIGHT:
                        switch (buttonPosition){
                            case 0:
                                //滑动关闭listView的子项
                                return  Menu.ITEM_SCROLL_BACK;
                            case 1:
                                //从底部到顶部删除listView的子项,选择这个会调用
                                // setOnItemDeleteListener的onItemDelete方法
                                return Menu.ITEM_DELETE_FROM_BOTTOM_TO_TOP;

                        }
                        break;
                }
                return Menu.ITEM_NOTHING;
            }
        });

        //删除Item监听
        mListView.setOnItemDeleteListener(new SlideAndDragListView.OnItemDeleteListener() {
            @Override
            public void onItemDelete(View view, int position) {
                Toast.makeText(MainActivity.this, "删除" + position, Toast.LENGTH_SHORT).show();
                mListApp.remove(position - mListView.getHeaderViewsCount());
                mAdapter.notifyDataSetChanged();

            }
        });


        //滚动监听
        mListView.setOnListScrollListener(new SlideAndDragListView.OnListScrollListener() {
            @Override
            //滑动状态改变监听
            public void onScrollStateChanged(AbsListView view, int scrollState) {

                switch (scrollState) {
                    case SlideAndDragListView.OnListScrollListener.SCROLL_STATE_IDLE:
                        break;
                    case SlideAndDragListView.OnListScrollListener.SCROLL_STATE_TOUCH_SCROLL:
                        break;
                    case SlideAndDragListView.OnListScrollListener.SCROLL_STATE_FLING:
                        break;
                }

            }

            @Override
            //当滚动的时候触发
            public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
               //会一直调用
                //Toast.makeText(MainActivity.this, "正在滚动" , Toast.LENGTH_SHORT).show();
            }
        });



    }

    //初始化数据方法
    public void initData() {
        //得到手机上App的相关信息
        mListApp = getPackageManager().getInstalledApplications(0);
    }

    //初始化list中的菜单项
    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    public void initMenu() {
        //第一个参数表示是否设置背景透明而拖,第二个参数表示是否可以滑过。
        nMenu = new Menu(true, true);

        //设置各种属性
        nMenu.addItem(new MenuItem.Builder().setWidth(150)//设置宽度
                //设置背景
                //.setBackground(getResources().getDrawable(R.drawable.index, getApplicationContext().getTheme()))
                .setText("无效果")
                .setTextColor(Color.GRAY)
                .setTextSize(14)
                .build());

        nMenu.addItem(new MenuItem.Builder().setWidth(150)//设置宽度
                //设置背景
                //.setBackground(getResources().getDrawable(R.drawable.index, getApplicationContext().getTheme()))
                .setText("关闭")
                .setTextColor(Color.BLACK)
                .setTextSize(14)
                .build());

        nMenu.addItem(new MenuItem.Builder().setWidth(200)//设置宽度
                //设置背景
                //.setBackground(getResources().getDrawable(R.drawable.index, getApplicationContext().getTheme()))
                .setText("关闭")
                .setDirection(MenuItem.DIRECTION_RIGHT)
                .setTextColor(Color.BLACK)
                .setTextSize(14)
                .build());

        nMenu.addItem(new MenuItem.Builder().setWidth(200)//设置宽度
                //设置背景
                //.setBackground(getResources().getDrawable(R.drawable.index, getApplicationContext().getTheme()))
                .setText("删除")
                .setTextColor(Color.BLUE)
                .setDirection(MenuItem.DIRECTION_RIGHT)
                        //.setIcon(getResources().getDrawable(R.mipmap.ic_launcher, getApplicationContext().getTheme()))
                .setTextSize(14)
                .build());

    }

    //适配器

    private BaseAdapter mAdapter = new BaseAdapter() {
        @Override
        public int getCount() {
            return mListApp.size();


        }

        @Override
        public Object getItem(int position) {
            return mListApp.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder vh;

            if(convertView==null){
                vh=new ViewHolder();
                //加载布局
                convertView= LayoutInflater.from(MainActivity.this).inflate(R.layout.item_custom_btn,null);
                //初始化控件
                vh.imgLogo=(ImageView)convertView.findViewById(R.id.img_item_edit);
                vh.txtName=(TextView)convertView.findViewById(R.id.txt_item_edit);
                vh.btnClick=(Button)convertView.findViewById(R.id.btn_item_click);

                //设置按钮点击监听
                vh.btnClick.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Object o=v.getTag();

                        if(o instanceof  Integer){
                            Toast.makeText(MainActivity.this,"点击按钮"+((Integer)o),Toast.LENGTH_LONG).show();
                        }
                    }
                });

                convertView.setTag(vh);
            }else{
                vh=(ViewHolder)convertView.getTag();
            }

            //得到每一行的app相关信息
            ApplicationInfo item=(ApplicationInfo)this.getItem(position);

            //设置控件
            vh.txtName.setText(item.loadLabel(getPackageManager()));
            vh.imgLogo.setImageDrawable(item.loadIcon(getPackageManager()));
            vh.btnClick.setText(position + "");
            vh.btnClick.setTag(position);
            return convertView;
        }
    };

    private class ViewHolder{

        public ImageView imgLogo;
        public TextView txtName;
        public Button btnClick;
    }

}

上述代码就讲解到这里,有什么问题可以留言

源代码地址:http://download.csdn.net/detail/a_person_alone/9519537

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值