zoukankan      html  css  js  c++  java
  • QQ好友列表向左滑动出现置顶、删除--第三方开源--SwipeMenuListView

    SwipeMenuListView是在github上的第三方开源项目,该项目在github上的链接地址是:https://github.com/baoyongzhang/SwipeMenuListView 。

    下载后直接将项目包复制粘贴到需要的项目当中:

    测试代码:

    item.xml:

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent" >
     5 
     6     <ImageView
     7         android:id="@+id/imageView"
     8         android:layout_width="60dp"
     9         android:layout_height="60dp"
    10         android:src="@drawable/ic_launcher" />
    11 
    12     <TextView
    13         android:id="@+id/textView"
    14         android:layout_width="wrap_content"
    15         android:layout_height="wrap_content"
    16         android:layout_alignBottom="@+id/imageView"
    17         android:layout_alignParentRight="true"
    18         android:layout_alignParentTop="true"
    19         android:layout_toRightOf="@+id/imageView"
    20         android:gravity="center"
    21         android:textSize="20sp" />
    22 
    23 </RelativeLayout>
    item.xml

    activity_main.xml:

     1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     2     xmlns:tools="http://schemas.android.com/tools"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent" >
     5 
     6     <com.baoyz.swipemenulistview.SwipeMenuListView
     7         android:id="@+id/listView"
     8         android:layout_width="match_parent"
     9         android:layout_height="match_parent" />
    10 
    11 </LinearLayout>

    MainActivity.java:

      1 package com.zzw.testswipemenulistview;
      2 
      3 import java.util.ArrayList;
      4 
      5 import com.baoyz.swipemenulistview.SwipeMenu;
      6 import com.baoyz.swipemenulistview.SwipeMenuCreator;
      7 import com.baoyz.swipemenulistview.SwipeMenuItem;
      8 import com.baoyz.swipemenulistview.SwipeMenuListView;
      9 import com.baoyz.swipemenulistview.SwipeMenuListView.OnMenuItemClickListener;
     10 import com.baoyz.swipemenulistview.SwipeMenuListView.OnSwipeListener;
     11 
     12 import android.app.Activity;
     13 import android.content.Context;
     14 import android.graphics.Color;
     15 import android.graphics.drawable.ColorDrawable;
     16 import android.os.AsyncTask;
     17 import android.os.Bundle;
     18 import android.os.Handler;
     19 import android.os.Message;
     20 import android.util.Log;
     21 import android.view.LayoutInflater;
     22 import android.view.View;
     23 import android.view.ViewGroup;
     24 import android.widget.ArrayAdapter;
     25 import android.widget.TextView;
     26 import android.widget.Toast;
     27 
     28 public class MainActivity extends Activity {
     29 
     30     private ArrayList<String> datas;
     31     private ArrayAdapter adapter;
     32     private SwipeMenuListView listView;
     33     private Handler handler;
     34 
     35     @Override
     36     protected void onCreate(Bundle savedInstanceState) {
     37         super.onCreate(savedInstanceState);
     38         setContentView(R.layout.activity_main);
     39 
     40         handler = new Handler() {
     41             @Override
     42             public void handleMessage(Message msg) {
     43                 if (msg.what == 0) {
     44 
     45                     int position = (Integer) msg.obj;
     46                     String str = datas.get(position);
     47                     datas.remove(position);
     48                     datas.add(0, str);
     49                     adapter.notifyDataSetChanged();
     50                     Toast.makeText(getApplicationContext(), "置顶成功", 0).show();
     51 
     52                 } else if (msg.what == 1) {
     53 
     54                     Toast.makeText(getApplicationContext(), "打开", 0).show();
     55 
     56                 } else if (msg.what == 2) {
     57 
     58                     int position = (Integer) msg.obj;
     59                     datas.remove(position);
     60                     adapter.notifyDataSetChanged();
     61                     Toast.makeText(getApplicationContext(), "成功删除", 0).show();
     62 
     63                 }
     64             }
     65         };
     66 
     67         // 添加测试数据
     68         datas = new ArrayList<String>();
     69         for (int i = 0; i <= 50; i++) {
     70             datas.add("测试数据-->" + i);
     71         }
     72 
     73         adapter = new MyAdapter(this, -1);
     74 
     75         SwipeMenuCreator creator = new SwipeMenuCreator() {
     76 
     77             @Override
     78             public void create(SwipeMenu menu) {
     79                 // 设置置顶的菜单按钮,设置了图标和标题
     80                 SwipeMenuItem top = new SwipeMenuItem(getApplicationContext());
     81                 top.setBackground(new ColorDrawable(Color.LTGRAY));
     82                 top.setWidth(dp2px(90));
     83                 top.setTitle("置顶");
     84                 top.setTitleSize(20);
     85                 top.setIcon(R.drawable.ic_top);
     86                 top.setTitleColor(Color.RED);
     87                 menu.addMenuItem(top);
     88 
     89                 // 设置进入的菜单按钮,只设置了标题
     90                 SwipeMenuItem openItem = new SwipeMenuItem(getApplicationContext());
     91                 openItem.setBackground(new ColorDrawable(Color.GREEN));
     92                 openItem.setWidth(dp2px(90));
     93                 openItem.setTitle("打开");
     94                 openItem.setTitleSize(20);
     95                 openItem.setTitleColor(Color.WHITE);
     96                 menu.addMenuItem(openItem);
     97 
     98                 // 设置删除的菜单按钮,只设置了图标
     99                 SwipeMenuItem deleteItem = new SwipeMenuItem(getApplicationContext());
    100                 deleteItem.setWidth(dp2px(90));
    101                 deleteItem.setBackground(new ColorDrawable(Color.RED));
    102                 deleteItem.setIcon(R.drawable.ic_delete);
    103                 menu.addMenuItem(deleteItem);
    104             }
    105         };
    106 
    107         listView = (SwipeMenuListView) findViewById(R.id.listView);
    108         listView.setMenuCreator(creator);
    109 
    110         // 设置点击不同菜单时触法的事件
    111         listView.setOnMenuItemClickListener(new OnMenuItemClickListener() {
    112 
    113             @Override
    114             public boolean onMenuItemClick(int position, SwipeMenu menu, int index) {
    115                 // index的值就是在SwipeMenu依次添加SwipeMenuItem顺序值,类似数组的下标。
    116                 // 从0开始,依次是:0、1、2、3...
    117                 switch (index) {
    118                 case 0:
    119                     //使菜单平滑的关闭
    120                     listView.smoothCloseMenu();
    121 
    122                     Message msg0 = handler.obtainMessage();
    123                     msg0.what = 0;
    124                     msg0.obj = position;
    125                     //过1秒后发送,为了体现出菜单平滑关闭的效果
    126                     handler.sendMessageDelayed(msg0,1000);
    127                     String str = datas.get(position);
    128 
    129                     break;
    130                 case 1:
    131                     
    132                     Message msg1 = handler.obtainMessage();
    133                     msg1.what = 1;
    134                     msg1.obj = position;
    135                     handler.sendMessage(msg1);
    136 
    137                     break;
    138                 case 2:
    139                     listView.smoothCloseMenu();
    140                     
    141                     Message msg2 = handler.obtainMessage();
    142                     msg2.what = 2;
    143                     msg2.obj = position;
    144                     handler.sendMessageDelayed(msg2, 1000);
    145 
    146                     break;
    147                 }
    148                 // false : 当用户触发其他地方的屏幕时候,自动收起菜单。
    149                 // true : 不改变已经打开菜单的样式,保持原样不收起。
    150                 return false;
    151             }
    152         });
    153 
    154         // 监测用户在ListView的SwipeMenu侧滑事件。
    155         listView.setOnSwipeListener(new OnSwipeListener() {
    156 
    157             @Override
    158             public void onSwipeStart(int position) {
    159                 Log.d("位置:--" + position, "开始发生侧滑");
    160             }
    161 
    162             @Override
    163             public void onSwipeEnd(int position) {
    164                 Log.d("位置:--" + position, "开始发生侧滑");
    165             }
    166         });
    167 
    168         listView.setAdapter(adapter);
    169     }
    170 
    171     private class MyAdapter extends ArrayAdapter {
    172 
    173         LayoutInflater inflater;
    174 
    175         public MyAdapter(Context context, int resource) {
    176             super(context, resource);
    177             inflater = LayoutInflater.from(context);
    178         }
    179 
    180         @Override
    181         public int getCount() {
    182             return datas.size();
    183         }
    184 
    185         @Override
    186         public View getView(int position, View convertView, ViewGroup parent) {
    187             if (convertView == null) {
    188                 convertView = inflater.inflate(R.layout.item, null);
    189             }
    190 
    191             TextView textView = (TextView) convertView.findViewById(R.id.textView);
    192             textView.setText(datas.get(position));
    193 
    194             return convertView;
    195         }
    196 
    197     }
    198 
    199     public int dp2px(float dipValue) {
    200         final float scale = this.getResources().getDisplayMetrics().density;
    201         return (int) (dipValue * scale + 0.5f);
    202     }
    203 }
  • 相关阅读:
    Codevs 2296 仪仗队 2008年省队选拔赛山东
    Codevs 1535 封锁阳光大学
    Codevs 1069 关押罪犯 2010年NOIP全国联赛提高组
    Codevs 1218 疫情控制 2012年NOIP全国联赛提高组
    Codevs 1684 垃圾陷阱
    洛谷 P1108 低价购买
    Vijos P1325桐桐的糖果计划
    Codevs 3289 花匠 2013年NOIP全国联赛提高组
    Codevs 2611 观光旅游(floyed最小环)
    C语言基础之彩色版C语言(内含linux)
  • 原文地址:https://www.cnblogs.com/zzw1994/p/4995421.html
Copyright © 2011-2022 走看看