Android 实现左滑出现删除选项

本文介绍如何在Android中实现左滑出现删除选项的功能。通过自定义SwipeLayout,包含内容区域和操作区域,利用ViewDragHelper监听触摸事件来控制滑动效果。在实现过程中,需要注意对LinearLayout的重载,修正因外边距导致的滑动问题,并解决ListView中点击事件和滑动事件冲突的问题。
摘要由CSDN通过智能技术生成

滑动删除的部分主要包含两个部分, 一个是内容区域(用于放置正常显示的view),另一个是操作区域(用于放置删除按钮)。默认情况下,操作区域是不显示的,内容区域的大小是填充整个容 器,操作区域始终位于内容区域的右面。当开始滑动的时候,整个容器中的所有子view都像左滑动,如果操作区域此时是不可见的,设置为可见。

实现思路就是自定义一个layout SwipeLayout继承自FrameLayout。SwipeLayout包含两个子view,第一个子view是内容区域,第二个子view是操作 区域。滑动效果的控制,主要就是通过检测SwipeLayout的touch事件来实现,Android support库里其实已经提供了ViewDragHelper来进行监听touch事件。

1、首先需要对LinearLayout进行重载
具体分析看注解

package com.example.mac.agriculturemanagement;

import android.content.Context;
import android.support.annotation.Nullable;
import android.support.v4.view.ViewCompat;
import android.support.v4.widget.ViewDragHelper;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.LinearLayout;

/**
 * Created by mac on 2017/6/15.
 */

//条目滑动效果
public class SlideLayout extends LinearLayout {
   

    private ViewDragHelper mDragHelper;
    private View contentView;
    private View actionView;
    private int dragDistance;
    private final double AUTO_OPEN_SPEED_LIMIT = 800.0;
    private int draggedX;

    public SlideLayout(Context context) {
        super(context);
        init();
    }

    public SlideLayout(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public SlideLayout(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    //初始化
    public void init (){
        mDragHelper = ViewDragHelper.create(this, new DragHelperCallback());

    }

    @Override
    public boolean callOnClick() {
        return super.callOnClick();
    }
    /*当你触摸屏幕,移动的时候,就会回调这个方法。
    它会返回两个参数。第一个参数,就是你触摸的那个控件。
    第二个就是ID。
    返回值又代表什么呢?返回ture,就是代笔允许拖动这个控件。
    返回false就代表不允许拖动这个控件.。这里我只允许拖动主控件。*/

     //把容器的事件处理委托给ViewDragHelper对象

    @Override
    public boolean onInterceptTouchEvent(MotionEvent event) {
        if (mDragHelper.shouldInterceptTouchEvent(event)) {
            return true;
        }
        return super.onInterceptTouchEvent(event);
    }
    @Override
    public boolean onTouchEvent(MotionEvent eve
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值