利用DrawerLayout和触摸事件分发来实现抽屉侧滑业务

Android SlidingMenu侧滑菜单库深度解析与实践 侧滑菜单是移动应用常见的导航模式,通过手势滑动触发侧边栏显示。SlidingMenu作为Android经典开源库,采用自定义ViewGroup实现视图层叠与滑动变换,相比官方DrawerLayout具有更高的自定义灵活性。该库支持多方向滑动、边缘触发区域设置以及自定义插值器动画,特别适合需要复杂交互的电商类应用。在工程实践中,SlidingMenu与Fragment、ViewModel等现代组件的整合方案,以及内存泄漏预防等性能优化技巧尤为重要。虽然目前已停止维护,但在兼容旧版本Android系统和高定制化 阅读详情

效果展示
这里写图片描述

还是看代码实在,直接上菜了。
1.MainActivity的代码:


public class MainActivity extends AppCompatActivity implements    MyDraweLayout.GetPositionCallback {

        private List<ImageView> imageList;
        private ViewPager viewPager;
        private MyAdapter adapter;
        private MyDraweLayout myDraweLayout;
        private int currentPosition;

        @Override
        protected void onCreate (Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        viewPager = (ViewPager) findViewById(R.id.viewpager);
        myDraweLayout = (MyDraweLayout) findViewById(R.id.mydrawelayout);
        initdata();
        adapter = new MyAdapter(this, imageList);
         myDraweLayout.setCallback(this);
        viewPager.setAdapter(adapter);
            viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
                @Override
                public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

                }

                @Override
                public void onPageSelected(int position) {
                    currentPosition=position;
                }

                @Override
                public void onPageScrollStateChanged(int state) {

                }
            });

    }
    private void initdata() {
        imageList = new ArrayList<ImageView>();

        ImageView imageView = new ImageView(this);
        imageView.setImageResource(R.mipmap.ic_launcher);
        imageView.setScaleType(ImageView.ScaleType.FIT_XY);
        imageList.add(imageView);

        imageView = new ImageView(this);
        imageView.setImageResource(R.mipmap.ic_launcher);
        imageView.setScaleType(ImageView.ScaleType.FIT_XY);
        imageList.add(imageView);

        imageView = new ImageView(this);
        imageView.setImageResource(R.mipmap.ic_launcher);
        imageView.setScaleType(ImageView.ScaleType.FIT_XY);
        imageList.add(imageView);

        imageView = new ImageView(this);
        imageView.setImageResource(R.mipmap.ic_launcher);
        imageView.setScaleType(ImageView.ScaleType.FIT_XY);
        imageList.add(imageView);


    }


    @Override
    public int position() {
        return currentPosition;//TODO  通过接口回调把当前位置传到MyDraweLayout中
    }
}

2.MyDraweLayout类中的代码:

public class MyDraweLayout extends DrawerLayout {
    public MyDraweLayout(Context context) {
        super(context);
    }

    public MyDraweLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MyDraweLayout(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }
    //TODO 事件拦截
    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        //Todo 获得当前位置,进行判断
        if(callback.position()==0){
            return  super.onInterceptTouchEvent(ev);
        }else {
            return false;
        }
    }



    public  interface  GetPositionCallback{
        int position();
    }
  private GetPositionCallback callback;
   public void setCallback(GetPositionCallback callback){
       this.callback = callback;

    }
}

3.适配器的代码;

public class MyAdapter extends PagerAdapter {

    private final List<ImageView> imageList;
    private final Context contex;

    public MyAdapter(Context context, List<ImageView> imageList) {
    this.contex=context;
        this.imageList = imageList;
    }

    @Override
    public int getCount() {
        return imageList.size();
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view==object;
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        ImageView imageView = imageList.get(position);
        container.addView(imageView);
        return imageView;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        //super.destroyItem(container, position, object);这行代码记得删除,不然滑到Viewpager的时候会闪退哦
        container.removeView(imageList.get(position));
    }
}

4.xml布局:

<?xml version="1.0" encoding="utf-8"?>
<com.example.a43_drawelayoutandviewpager.MyDraweLayout
    android:id="@+id/mydrawelayout"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
>
<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <android.support.v4.view.ViewPager
        android:layout_width="match_parent"
        android:layout_height="250dp"
        android:id="@+id/viewpager"/>
    </RelativeLayout>
    <ImageView

       android:background="@mipmap/ic_launcher"
        android:layout_width="300dp"
        android:layout_gravity = "start"
        android:layout_height="match_parent"
        android:layout_below="@+id/viewpager"
     />
</com.example.a43_drawelayoutandviewpager.MyDraweLayout>
DrawerLayout(侧滑栏)详解,仿QQ消息列表(置顶、删除) QQ消息列表的侧滑栏菜单,以及置顶效果、删除效果有没有想过怎么做?来吧,仅需5分钟! 阅读详情

相关推荐

Android UI设计之抽屉导航效果实战

抽屉效果作为现代移动应用中广泛采用的导航模式,最早由Material Design设计语言提出并推广。它通过从屏幕边缘滑动展开的侧边栏,为用户提供全局导航、功能入口或用户信息展示等核心内容,极大地提升了界面空间利用率和操作便捷性。本章将深入解析抽屉效果的设计理念、用户体验价值及其在Android平台中的演进历程。我们将探讨为何抽屉导航成为主流选择,分析其相较于底部导航、标签栏等其他导航方式的优势与适用场景,并介绍其在不同屏幕尺寸设备上的适应性表现。

weixin_42576186的博客 1287

Android——DrawerLayout滑动范围的设置

最近做项目的时候需要用到DrawerLayout做侧边栏,当然自己也可以通过用ViewDragHelper来实现侧边栏优点是可高度定制化,但是比较繁琐。而DrawerLayout是系统封装好的控件,用起来简单。DrawerLayout本身内部也会通过ViewDragHelper 实现的。言归正传,系统自带的DrawLayout只能实现从屏幕边缘滑出菜单,现在需求是全屏幕任何位置都能滑出。有两种方法可

a591193965的博客 1万+

DrawerLayout+SwipeMenu高仿qq侧滑抽屉式菜单和侧滑删除功能

高仿QQ主界面中的左右侧滑抽屉式菜单和列表中侧滑删除功能 DrawerLayout组件用于实现侧滑抽屉式菜单 SwipeMenu组件用户实现侧滑删除功能

侧滑菜单控件DrawerLayout使用讲解

DrawerLayout是Android V4包下一个带有侧滑功能的布局控件,只需要按照DrawerLayout规定的布局格式进行布局,即可实现左右侧滑效果。 一、约定的布局   DrawerLayout的布局一般分为三个部分:第一部分为主界面内容布局,第二部分为左边侧滑界面布局,第三部分为右边侧滑界面布局。那么系统是怎么区分左边侧滑和右边侧滑的代码块的呢?请注意DrawerLayout布局中

yangyang的博客 1299

利用DrawerLayout和触摸事件分发实现抽屉侧滑效果

主要为大家详细介绍了利用DrawerLayout和触摸事件分发实现抽屉侧滑效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

Android Drawerlayout侧拉栏事件传递问题的解决方法

主要为大家详细介绍了Android Drawerlayout侧拉栏事件传递问题的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

android侧滑菜单的监听,Android侧滑菜单控件DrawerLayout使用详解

DrawerLayout是Android V4包下一个带有侧滑功能的布局控件,可以根据手势展开与隐藏侧边栏,也可以随着侧边栏的点击改变主界面区的内容。并且只需要按照DrawerLayout规定的布局格式进行布局,即可实现左右侧滑效果。一、约定的抽屉布局DrawerLayout的布局一般分为三个部分:第一部分为主界面内容布局,第二部分为左边侧滑界面布局,第三部分为右边侧滑界面布局。那么系统是怎么区分...

weixin_33147645的博客 1374

Xiaojie雷达之路---毫米波雷达基础知识---中频信号的相位

本篇文章主要介绍毫米波雷达的基础知识中的中频信号的相位 文章目录傅里叶变换的快速回顾中频信号的相位中频信号对物体微小位移的灵敏度如何2个chirps来对一个物体的速度进行测量测量一个振动的物体 傅里叶变换的快速回顾 傅里叶变换是将一个信号从时域中转换到频域中,在时域中的一个正弦信号将在频域中产生一个峰值,在大多数情况下,在频域中的一个信号是一个复数(每个值是一个振幅和相位的向量),表示为AejθAe^{j\theta}Aejθ 在频域中峰值的相位等于正弦函数的初始相位 中频信号的相位 上一篇文章中提到,

XiaoJie的博客 1万+

android添加侧滑菜单,Android侧滑菜单控件DrawerLayout使用详解

Android侧滑菜单控件DrawerLayout使用详解发布时间:2020-09-06 19:15:19来源:脚本之家阅读:155作者:yangyang_bokeDrawerLayout是Android V4包下一个带有侧滑功能的布局控件,可以根据手势展开与隐藏侧边栏,也可以随着侧边栏的点击改变主界面区的内容。并且只需要按照DrawerLayout规定的布局格式进行布局,即可实现左右侧滑效果。一...

weixin_39733948的博客 549

Rockchip rv1126平台在gstreamer1中添加OpenCv实现视频流负片的效果

rv1126 gstreamer opencv negetive effect

Aisy_D的专栏 1463

Tessent Atpg系列 第七章 Running ATPG Patterns -- 如何书写proc文件

本篇文章是记录Tessent scan ATPG系列 本文并非是对userguide的完全翻译,而是自己对userguide的理解,此外,有部分比较深入的内容可能需要后续实验验证。本系列并不对tessent scan做过多描述。 请勿随意转载: 优快云 博主: ciscomonkey一种是在使用tessent scan之后使用ATPG 另一种是使用第三方工具,如snps的DFTC之后使用tessent的ATPG。 这里我们仅仅介绍without tessent scan之后tessent ATPG:对于t

ciscomonkey的博客 7693

Android实现从右面滑出的抽屉效果(附带源码)

Android实现从右面滑出的抽屉效果(附带源码)

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 1105

八戒留档之宝塔部署edusoho

1.安装好基础的服务 2.上传你下载的代码到www/wwwroot文件3、配置网站 4.编辑创建的网站修改nginx文件 NGINX配置如下 server { listen 80; server_name 你的域名; root /www/wwwroot/项目文件名称/web/; location / { try_files $uri /app_dev.php$is_args$args; } ...

wolf23151269的博客 2540

Android基础入门教程——2.4.15 DrawerLayout(官方侧滑菜单)的简单使用

Android基础入门教程——2.4.15 DrawerLayout(官方侧滑菜单)的简单使用标签(空格分隔): Android基础入门教程本节引言: 本节给大家带来基础UI控件部分的最后一个控件:DrawerLayout,官方给我们提供的一个侧滑菜单 控件,和上一节的ViewPager一样,3.0以后引入,低版本使用它,需要v4兼容包,说到侧滑,相信 很多人都用过github上的S

Coder-Pig的猪栏 4万+

最适合入门的100个深度学习项目

本专栏整理了《PyTorch深度学习项目实战100例》,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集。

优快云 精品推荐 12万+

Unity零基础到入门 ☀️| 小万字教程 对 Unity 中的 协程 ❤️全面解析+实战演练❤️

Unity,为了让Unity基础知识专栏更加完善,又肝了一篇协程来学习。 协程在Unity中还是很常用的,一起来看一下协程的基本概念和使用方法吧!

努力前行,总会成为自己心中的那道光 8万+

侧滑菜单drawerlayout的使用和一些小问题

要在项目中加入drawerlayout侧滑,首先要定义好xml布局: (注意:跟根布局要为DrawerLayout,第一个子布局要为主菜单(不是的话,会出现侧滑菜单控件无法点击,点击左菜单,关闭左菜单)左滑或者右滑菜单可以在根据 android:layout_gravity=""定义) xml version="1.0" encoding="utf-8"?> android.supp

A_Kid 3597

ubuntu下编译qtwebengine

ubuntu qtwebengine

tianyu的专栏 - Linux site:blog.youkuaiyun.com/wishfly 1463

侧滑菜单(抽屉效果)DrawerLayout实现原理

DrawerLayout的实现原理分析。

hesong的专栏 3146

YOLOv8 改进涨点 | 模块即插即用 直接可用

在目标检测任务中,注意力机制能够帮助模型聚焦于图像中的关键区域,显著提升检测精度。。创建模块代码注册模块修改任务解析tasks.py创建YAML配置文件模块核心优势适用场景计算开销SOCA捕获二阶统计信息,增强通道间相关性需要精细特征区分的场景中等SK自适应多尺度核选择多尺度目标检测中等偏高显式特征聚集-分配机制全局上下文建模中等A2-Net双线性注意力,高效全局交互复杂场景理解中等偏高CrissCross线性复杂度全局上下文高分辨率输入,长距离依赖较低。

u012133341的博客 2257

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

DrawerLayout 空白区域点击穿透问题

版权声明:本文来自 Crocutax 的博客 , 转载请注明出处 http://crocutax.com 最近的项目里需要使用到侧滑布局,SlidingMenu 、自定义侧滑布局、 DrawerLayout都可以实现,前两种都已经尝试过了,最近1年多时间做项目都是使用底部导航栏,没有用到侧滑布局,DrawerLayout也一直没有去尝试,正好借此机会用一下。mainlayout 和 drawerla

闰土CMS 3530

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

android 抽屉侧滑冲突,利用DrawerLayout和触摸事件分发实现抽屉侧滑效果

本文实例为大家分享了DrawerLayout和触摸事件分发实现抽屉侧滑效果的具体代码,供大家参考,具体内容如下效果展示还是看代码实在,直接上菜了。1.MainActivity的代码:public class MainActivity extends AppCompatActivity implements MyDraweLayout.GetPositionCallback {private Li...

weixin_35406812的博客 426

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

android 使用DrawerLayout实现侧滑菜单

背景:2013年google提出drawerlayout是开发者更方便的开发侧滑菜单,在没有drawerlayout之前很多开发者都使用github开源组件slidingmenu,个人觉得drawerlayout更加好用,在这为大家提供可参考的个人学习见解1.初步掌握drawerlayout 2.actionbar和drawerlayout联动 3.点击图标实现菜单的切换1.drawerlayo

a4384142的专栏 886

很好用的Android原生侧滑控件-DrawerLayout

在android的v4包中有一个控件 Drawerlayout,主要实现了左拉和右拉菜单,类似于之前的“抽屉”功能,此控件使用简单,效果很柔和,操作起来体验非常好,下面是我实现的一个简单效果的部分截图: 左拉: 右拉: 怎么样?是不是在平时开发的应用中很常见?OK,那么接下来我直接上代码:activity_sliding.xml:<?xml version="1.0" encoding="

尹人入胜的博客 2万+

Android第三方控件SwipeDelMenuLayout实现侧滑删除

效果图: 步骤1. 在项目根build.gradle文件中增加JitPack仓库依赖。 allprojects { repositories { ... maven { url &quot;https://jitpack.io&quot; } } } 步骤2. Add the dependency depend...

翟浩浩Android专栏 7404
上一篇: Activity七大生命周期详解
下一篇: Android消息传递之EventBus 3.0使用详解
Allen-华
博客等级 码龄11年 10粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值