Android SwipeMenuListView

简介: Android平台上的第三方开源项目SwipeMenuListView是一种可以在某一个view条目中响应用户左右侧滑(从左向右,或从右向左滑动),滑出操作菜单的UI控件。


Android平台上的第三方开源项目SwipeMenuListView是一种可以在某一个view条目中响应用户左右侧滑(从左向右,或从右向左滑动),滑出操作菜单的UI控件。类似这种控件达到的UI效果,在一些流行的APP中应用广泛,比如QQ的消息列表中的某一列表项,当用户手指触摸某一项,然后向左边滑,则滑出QQ的“置顶”,“删除”选项菜单,如图中的箭头指向的红圆圈所示:


现在基于SwipeMenuListView实现QQ的上述列表子项目侧滑(左滑、右滑)效果。SwipeMenuListView是在github上的第三方开源项目,该项目在github上的链接地址是:https://github.com/baoyongzhang/SwipeMenuListView 。使用之前,需要导入https://github.com/baoyongzhang/SwipeMenuListView该项目的库文件,下载后,将library/ src/main/java/com/ baoyz/ swipemenulistview目录下的所有源代码文件放入自己的项目代码包中即可使用,源代码文件和包结构如图所示:


然后就可以在自己的项目中使用SwipeMenuListView了,现举例写出一个演示代码。效果如下:


上述效果的全部源代码如下:

package zhangphil.swipemenulistview;

import com.baoyz.swipemenulistview.SwipeMenu;
import com.baoyz.swipemenulistview.SwipeMenuCreator;
import com.baoyz.swipemenulistview.SwipeMenuItem;
import com.baoyz.swipemenulistview.SwipeMenuListView;

import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.Toast;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;

public class MainActivity extends ActionBarActivity {
	
	private	Context context;

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

		SwipeMenuCreator creator = new SwipeMenuCreator() {

			@Override
			public void create(SwipeMenu menu) {
				
				SwipeMenuItem openItem = new SwipeMenuItem(context);
				openItem.setBackground(new ColorDrawable(Color.GREEN));
				openItem.setWidth(dp2px(90));
				openItem.setTitle("打开");
				openItem.setTitleSize(20);
				openItem.setTitleColor(Color.WHITE);
				menu.addMenuItem(openItem);				

				SwipeMenuItem deleteItem = new SwipeMenuItem(context);
				deleteItem.setBackground(new ColorDrawable(Color.LTGRAY));
				deleteItem.setWidth(dp2px(90));
				deleteItem.setIcon(android.R.drawable.ic_delete);
				menu.addMenuItem(deleteItem);
			}
		};
		
		SwipeMenuListView listView = (SwipeMenuListView) findViewById(R.id.listView);
		listView.setMenuCreator(creator);

		listView.setOnMenuItemClickListener(new SwipeMenuListView.OnMenuItemClickListener() {
			@Override
			public boolean onMenuItemClick(int position, SwipeMenu menu,int index) {
				//index的值就是在SwipeMenu依次添加SwipeMenuItem顺序值,类似数组的下标。
				//从0开始,依次是:0、1、2、3...
				switch (index) {
				case 0:
					Toast.makeText(context, "打开:"+position,Toast.LENGTH_SHORT).show();
					break;

				case 1:
					Toast.makeText(context, "删除:"+position,Toast.LENGTH_SHORT).show();
					break;
				}

				// false : 当用户触发其他地方的屏幕时候,自动收起菜单。
				// true : 不改变已经打开菜单的样式,保持原样不收起。
				return false;
			}
		});

		// 监测用户在ListView的SwipeMenu侧滑事件。
		listView.setOnSwipeListener(new SwipeMenuListView.OnSwipeListener() {

			@Override
			public void onSwipeStart(int pos) {
				Log.d("位置:" + pos, "开始侧滑...");
			}

			@Override
			public void onSwipeEnd(int pos) {
				Log.d("位置:" + pos, "侧滑结束.");
			}
		});

		//测试数据集。
		String[] data = new String[30];
		for (int i = 0; i < data.length; i++) {
			data[i] = "测试数据:" + i;
		}

		ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, data);
		listView.setAdapter(adapter);
	}

	public int dp2px(float dipValue) {
		final float scale = this.getResources().getDisplayMetrics().density;
		return (int) (dipValue * scale + 0.5f);
	}
}


MainActivity.java需要的布局文件activity_main.xml :

<LinearLayout 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"
    android:orientation="vertical" >

    <com.baoyz.swipemenulistview.SwipeMenuListView  
            android:id="@+id/listView"  
            android:layout_width="match_parent"  
            android:layout_height="match_parent" />  
    
</LinearLayout>


相关文章
|
Android开发 Java
Android--SwipeMenuListView的使用
版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/chaoyu168/article/details/79064198 一、实现效果: 二、分析 先看两个图:有一个大体的了解  这是框架中所有的类。
1135 0
|
Android开发 设计模式
Android源码解析--SwipeMenuListView仿QQ聊天左滑
版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/lyhhj/article/details/50612714 绪论: 好久没写博客了,最近比较懒,不想写博客,但是在看书,看一些Android进阶的书,这里小编也给大家推荐几本适合进阶的书,相信会对你有所帮助的。
1034 0
|
Android开发
Android中SwipeMenuListView的使用
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010046908/article/details/46988899 ...
846 0
|
20天前
|
Java Android开发
Android 开发获取通知栏权限时会出现两个应用图标
Android 开发获取通知栏权限时会出现两个应用图标
12 0
|
1月前
|
XML 缓存 Android开发
Android开发,使用kotlin学习多媒体功能(详细)
Android开发,使用kotlin学习多媒体功能(详细)
96 0
|
1月前
|
设计模式 人工智能 开发工具
安卓应用开发:构建未来移动体验
【2月更文挑战第17天】 随着智能手机的普及和移动互联网技术的不断进步,安卓应用开发已成为一个热门领域。本文将深入探讨安卓平台的应用开发流程、关键技术以及未来发展趋势。通过分析安卓系统的架构、开发工具和框架,本文旨在为开发者提供全面的技术指导,帮助他们构建高效、创新的移动应用,以满足不断变化的市场需求。
18 1
|
1月前
|
机器学习/深度学习 调度 Android开发
安卓应用开发:打造高效通知管理系统
【2月更文挑战第14天】 在移动操作系统中,通知管理是影响用户体验的关键因素之一。本文将探讨如何在安卓平台上构建一个高效的通知管理系统,包括服务、频道和通知的优化策略。我们将讨论最新的安卓开发工具和技术,以及如何通过这些工具提高通知的可见性和用户互动性,同时确保不会对用户造成干扰。
33 1
|
11天前
|
XML 开发工具 Android开发
构建高效的安卓应用:使用Jetpack Compose优化UI开发
【4月更文挑战第7天】 随着Android开发不断进化,开发者面临着提高应用性能与简化UI构建流程的双重挑战。本文将探讨如何使用Jetpack Compose这一现代UI工具包来优化安卓应用的开发流程,并提升用户界面的流畅性与一致性。通过介绍Jetpack Compose的核心概念、与传统方法的区别以及实际集成步骤,我们旨在提供一种高效且可靠的解决方案,以帮助开发者构建响应迅速且用户体验优良的安卓应用。
|
14天前
|
Java Android开发
Android开发之使用OpenGL实现翻书动画
本文讲述了如何使用OpenGL实现更平滑、逼真的电子书翻页动画,以解决传统贝塞尔曲线方法存在的卡顿和阴影问题。作者分享了一个改造后的外国代码示例,提供了从前往后和从后往前的翻页效果动图。文章附带了`GlTurnActivity`的Java代码片段,展示如何加载和显示书籍图片。完整工程代码可在作者的GitHub找到:https://github.com/aqi00/note/tree/master/ExmOpenGL。
16 1
Android开发之使用OpenGL实现翻书动画
|
14天前
|
Android开发 开发者
Android开发之OpenGL的画笔工具GL10
这篇文章简述了OpenGL通过GL10进行三维图形绘制,强调颜色取值范围为0.0到1.0,背景和画笔颜色设置方法;介绍了三维坐标系及与之相关的旋转、平移和缩放操作;最后探讨了坐标矩阵变换,包括设置绘图区域、调整镜头参数和改变观测方位。示例代码展示了如何使用这些方法创建简单的三维立方体。
12 1
Android开发之OpenGL的画笔工具GL10