ListView Item侧滑菜单

本文介绍了如何在Android中实现ListView的Item侧滑菜单功能。通过重写ListView的onTouchEvent方法,自定义LinearLayout并处理触摸事件,实现滑动显示和隐藏菜单。详细讲解了各个关键步骤,包括事件传递和菜单的显示逻辑。最后提到了一些优化和学习资源。
摘要由CSDN通过智能技术生成

一 概述

当下从QQ主界面出现Item侧滑菜单出现之后,很多公司的项目都需要添加这种让人感觉炫酷的功能,但是,目前android API中根本没有提供这种实现,因此就要用自定义的方法来实现该功能。本篇文章实现的基本思路如下:
1.自定义ListView,获取当前滑动的View。
2.自定义LinearLayout充当Item根布局。
3.ListView中按下后,事件交由自定义LinearLayout处理。

二 效果

简单效果展示

三 具体实现

  1. 重写ListView 的onTouchEvent方法,代码如下:
@Override
    public boolean onTouchEvent(MotionEvent ev)
    {
        switch (ev.getAction())
        {
            case MotionEvent.ACTION_DOWN:
                int x = (int) ev.getX();
                int y = (int) ev.getY();
                int position = pointToPosition(x,y);
                if (position != INVALID_POSITION)
                {
                    mSwipeMenuLayout = (SwipeMenuLayout) getChildAt(position - getFirstVisiblePosition());
                }
                break;
        }
        if (mSwipeMenuLayout != null)
        {
            mSwipeMenuLayout.onTouchEvent(ev);
        }
        return super.onTouchEvent(ev);
    }
这些代码相对比较简单,没有什么复杂的逻辑,比较关键的是获取用户按下的点,  
用ListView的pointToPosition方法,传入获取的x,y坐标得到当下点击  
的Item的position,重点说一下 ListView的getChildAt(int index)方法,  
因为ListView与GridView的View复用机制,这个方法默认得到的是当前可见  
区域(列表可滚动)的子项!也就表示它的取值范围是在   
>= ListView.getFirstVisiblePosition() &&    
<= ListView.getLastVisiblePosition(); 因此在程序中获取当前  
点击Item View所复用的是哪个Item的View  就需要用   
position(当前通过xy坐标获取到的) -   
(减去) ListView.getFirstVisiblePosition()   
得到的即是复用的Item的position,感兴趣的话,自己可以尝试着看看。

2. 自定义LinearLayout重写其onTouchEvent方法:

/**
 * Created by admin on 2016/1/20.
 */
public class SwipeMenuLayout extends LinearLayout
{
   
    /**
     * 关闭
     */
    public static final int SLIDE_STATUS_OFF = 0;
    
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值