SlideAndDragListView的使用

来源:互联网 发布:算法时代pdf下载 编辑:程序博客网 时间:2024/06/05 15:12

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 0