SlidingMenu

分析国外几款主流蜜罐产品看欺骗诱捕技术的应用脉络 网络安全的本质是攻防对抗,更本质的其实是人与人心智与技术的全面较量。 欺骗诱捕技术作为攻防对抗技术中比较特殊的技术,能够使防守方更多掌握对抗中的主动权,诱导攻击,迫使攻击者耗费精力的同时,留下丰富的攻击信息。究其本质,欺骗诱捕技术更深层次考验的不止是技术的能力,还有对于攻击者作为人的理解。 国外主流蜜罐产品分析 根据MarketsandMarkets《欺骗技术市场规模、份额和2021年全球市场预测》中提到的欺骗诱捕技术全球主要供应商及产品,我们分析了几款国外主流的蜜罐产品,希望更清晰看到欺骗诱捕技术应 阅读详情

SlidingMenu

先看一下图片
image
image
image

原理

SlidingMenu无非就是一个包含三个View的控件,左边View、中间View(默认时全屏)、右边View,默认的情况下中间View会把两边的View覆盖住,
在手指滑动的时候,会根据手指的滑动方向以及滑动距离去移动中间的那个View,从而能让两边View完全可见。
在定义该View的时候,首先会想到继承RelativeLayout,能简单的实现这种左、中、右三个View的布局。

  1. 继承RelativeLayout

    public class SlidingMenu extends RelativeLayout {
    
        public SlidingMenu(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init(context);
        }
    
        public SlidingMenu(Context context, AttributeSet attrs) {
            super(context, attrs);
            init(context);
        }
    
        public SlidingMenu(Context context) {
            super(context);
            init(context);
        }
    
        private void init(Context context) {
            mContext = context;
            mScroller = new Scroller(context);
            mWindowWidth = getWindowWidth(context);
        }
    }
  2. 具体的三个View需要暴露给外界调用,所以我们要提供一个setView()的方法。

    public void setView(View leftView, View rightView, View centerView,
            int leftViewWidth, int rightViewWidth) {
        //添加左边View
        RelativeLayout.LayoutParams leftParams = new LayoutParams(
                (int) convertDpToPixel(leftViewWidth, mContext),
                LayoutParams.MATCH_PARENT);
        leftParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
        addView(leftView, leftParams);
    
        //右边的View
        RelativeLayout.LayoutParams rightParams = new LayoutParams(
                (int) convertDpToPixel(rightViewWidth, mContext),
                LayoutParams.MATCH_PARENT);
        rightParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
        addView(rightView, rightParams);
    
        //添加中间的View
        RelativeLayout.LayoutParams centerParams = new LayoutParams(
                LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
        addView(centerView, centerParams);
    
        mLeftView = leftView;
        mRightView = rightView;
        mCenterView = centerView;
    }

    外界使用SlidingMenu类的时候需要首先调用该方法去设置相应的View,一旦调用该方法后,我们就将布局设置完了,下一步就是对touch事件进行处理,然后去移动中间的View。

  3. 处理Touch事件
    在手指按下的时候,我们去控制两边View的显示与隐藏

    public boolean onInterceptTouchEvent(MotionEvent ev) {
        int x = (int) ev.getRawX();
        int y = (int) ev.getRawY();
    
        int action = ev.getAction();
    
        switch (action) {
        case MotionEvent.ACTION_DOWN:
            mLastPostionX = x;
            mLastPostionY = y;
            //通过变量记录当前可以显示左边的View还是可以显示右边的View
            if (mCanLeftViewShow) {
                //如果当前,中间的View往右滑,那么这时候左边的View就要能显示了
                mLeftView.setVisibility(View.VISIBLE);
                mRightView.setVisibility(View.GONE);
            } else if (mCanRightViewShow) {
                mLeftView.setVisibility(View.GONE);
                mRightView.setVisibility(View.VISIBLE);
            }
    
            break;
        case MotionEvent.ACTION_MOVE:
    
            break;
        case MotionEvent.ACTION_UP:
    
            break;
    
        default:
            break;
        }
    
        return false;
    }

    在onTouch()中,我们去获取手指移动的距离

        public boolean onTouchEvent(MotionEvent event) {
        int x = (int) event.getRawX();
        int y = (int) event.getRawY();
    
        int action = event.getAction();
        switch (action) {
        case MotionEvent.ACTION_DOWN:
            mLastPostionX = x;
            mLastPostionY = y;
    
            if (!mScroller.isFinished()) {
                mScroller.abortAnimation();
            }
    
            break;
        case MotionEvent.ACTION_MOVE:
            int distance = x - mLastPostionX;
            int targetPositon = mCenterView.getScrollX() - distance;
            mLastPostionX = x;
    
            if (mCanLeftViewShow) {
                if (targetPositon > 0) {
                    targetPositon = 0;
                }
    
                if (targetPositon < -mLeftViewWidth) {
                    targetPositon = -mLeftViewWidth;
                }
            }
    
            if (mCanRightViewShow) {
                if (targetPositon < 0) {
                    targetPositon = 0;
                }
    
                if (targetPositon > mRightViewWidth) {
                    targetPositon = mRightViewWidth;
                }
            }
    
            mClicked = false;
            //让中间的View随着手指的移动而移动
            mCenterView.scrollTo(targetPositon, 0);
    
            break;
        case MotionEvent.ACTION_UP:
            //你手指移动后抬起的时候需要注意,如果现在左边的View已经超过一半可见了,这时候就算你抬起手指了,SlidingMenu也要滑动到右边让左边View完全可见。当然还有就是你滑动的飞快,然后突然抬起了手指,这时候就要进行速率的计算了,我们先不说速率
            int dx = 0;
            if (mCanLeftViewShow) {
                if (mCenterView.getScrollX() <= -mLeftViewWidth / 2) {
                    //已经超过左边View的一般了,应该让中间View继续移动,移动到左边View完全可见
                    dx = -mLeftViewWidth - mCenterView.getScrollX();
                } else {
                    // 滚回原来的位置
                    dx = -mCenterView.getScrollX();
                    resumeLeftViewClickState();
                }
    
            } else if (mCanRightViewShow) {
                if (mCenterView.getScrollX() >= mRightViewWidth / 2) {
                    dx = mRightViewWidth - mCenterView.getScrollX();
                } else {
                    dx = -mCenterView.getScrollX();
                    resumeRightViewClickState();
                }
            }
            //手指抬起后,要让中间View有过程的滑过去,所以要用到Scroller类
            smoothScrollTo(dx);
            break;
    
        default:
            break;
        }
    
        return true;
    }

    Scroller的实现

    private void smoothScrollTo(int distance) {
        mScroller.startScroll(mCenterView.getScrollX(), 0, distance, 0,
                sDuration);
        invalidate();
    }
    
    @Override
    public void computeScroll() {
        if (mScroller.computeScrollOffset()) {
            mCenterView.scrollTo(mScroller.getCurrX(), mScroller.getCurrY());
            postInvalidate();
        }
    }
  4. 到这里SlidingMenu的大体实现已经完成了
    剩下的就是对速率的计算,已经添加显示左边与显示右边的View的按钮。当左边View完全显示的时候,点击中间View可见部分时需要让中间View全屏。
    至于这些细节的东西就不再仔细说了,大家自己看源码吧。


  • 邮箱 :charon.chui@gmail.com
  • Good Luck!
深度剖析OpenHarmony AI Engine:开发板端侧大模型推理插件机制全链路拆解 / 加载动态库// 获取符号地址// 关闭动态库// 获取错误信息public:// 单例获取// 销毁实例// 加载插件// 卸载插件private:// 获取插件实例// 插件映射锁// 插件映射表public:Plugin();~Plugin();// 加载算法// 卸载算法// 获取算法实例// 设置算法实例private:// 算法接口指针// 动态库句柄// 算法ID// 版本信息// 配置信息字符串int len; 阅读详情

相关推荐

疾病负担研究(GBD)——如何使用joinpoint软件计算AAPC

疾病负担研究(GBD)——如何使用joinpoint软件计算AAPC

weixin_44240228的博客 1万+

Android SlidingMenu 使用详解

很多APP都有侧滑菜单的功能,部分APP左右都是侧滑菜单~SlidingMenu 这个开源项目可以很好帮助我们实现侧滑功能,如果对SlidingMenu 还不是很了解的童鞋,可以参考下本篇博客。将侧滑菜单引入项目的方式很多中,本博客先通过例子介绍各种引入方式,然后给大家展示个实例:主布局ViewPager,左右各一个侧滑菜单的用法,差不多已经能满足大部分应用的需求了。关于常用属性,在文章末尾介绍。

Hongyang 17万+

【ESP32-IDF笔记】20-配置以太网网络(W5500)

基于ESP32IDF和官方的ethernet驱动,配置W5500以太网驱动芯片,实现ESP32的有线网络

别看了,就这些信息 3475

SlidingMenu的使用

开源项目SlidingMenu和Fragment的结合使用。

迷茫的小菜鸟丶的专栏 1737

京东联盟h5st(3.1)加密参数逆向实战与反爬对抗策略

本文详细解析了京东联盟h5st(3.1)加密参数的逆向分析与实战破解过程。通过接口分析定位关键加密函数,拆解h5st结构并还原其基于SHA256和HMAC-SHA256的加密逻辑,最终使用Python集成JavaScript环境成功复现加密算法,并分享了应对反爬的频率限制、IP封禁及算法升级等对抗策略。

weixin_29246195的博客 1740

DDPM代码详细解读(2):Unet结构、正向和逆向过程、IS和FID测试、EMA优化

Diffusion Models专栏文章汇总:入门与实战 前言:大部分DDPM相关的论文代码都是基于《Denoising Diffusion Probabilistic Models》和《Diffusion Models Beat GANs on Image Synthesis》贡献代码基础上小改动的。官方的DDPM是tensorflow TPU版本,暂时没有GPU的版本。上一篇文章介绍了数据集加载,超参数的含义、关键参数的计算方法等,这一篇重点解读一下网络结构。 目录 EMA优化 训练目标.

沉迷单车的追风少年 1万+

SlidingMenu实现侧滑

        获取地址:https://github.com/jfeinstein10/SlidingMenu。获取之后应该在AS中导入该库。到Github上下载slidingmenu的压缩包https://github.com/jfeinstein10/SlidingMenu解压得到 SlidingMenu文件(这里修改了文件的名称 解压出来的原文件名为 SlidingMenu-master,...

Lucky_7777777的博客 1957

S7-1200中时钟功能设定和读写调用的具体方法

S7-1200中时钟功能设定和读写调用的具体方法

Robot_PLC_HMI_Automation 1万+

Android开源项目SlidingMenu

SlidingMenu简介:               SlidingMenu 是GitHub上的一个开源项目,用来实现SlidingMenu的菜单效果。          Sliding Menu的是一种比较新的设置界面或配置界面效果,在主界面左滑或者右滑出现设置界面,能方便的进行各种操作。              github地址:https://github.com/jfei

GitHubClub 872

提示词工程在机器翻译质量提升中的应用

Introduction to Prompt Engineering in Machine Translation Quality Improvement Keywords

AI天才研究院 1151

搞懂 ABAP 里的 Language Settings:登录语言、文本环境语言与 sy-langu 的真实含义

SAP系统中语言设置并非单一字段决定,而是由登录语言(logon language)和文本环境语言(text environment language)共同控制。登录语言在会话期间固定,而文本环境语言可通过SET LOCALE语句修改,影响文本处理、排序、异常显示等行为。开发中需区分两者:使用CL_ABAP_SYST方法获取登录语言,通过sy-langu或GET LOCALE获取当前文本环境语言。语言环境切换应谨慎处理并尽快恢复,避免影响会话中其他程序。在多语言场景下,正确处理语言设置对确保文本相关功能正常

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1307

SlidingMenu侧滑

#导入lib包 一、MainActivity——SlidingMenu (个人认为这样把SlidingMenu直接依附在Activity,使Activity上的代码量太多) public class S_Aitivity extends AppCompatActivity implements View.OnClickListener { private ImageView

xiao_xiao_qian的博客 190

机器学习实战26-一种基于LightGBM的股市涨跌预测系统与代码实现过程

在全球经济一体化的背景下,股市作为经济活动的晴雨表,其波动与预测对于投资者、金融机构乃至国家政策制定者而言至关重要。随着金融市场的日益复杂化与信息量的爆炸式增长,股市分析不再仅限于基本面和技术面的传统研究,而是迫切需要更加精准、高效及智能化的方法来捕捉市场动态,以辅助决策制定。模型评估是确保LightGBM股市预测系统准确性和稳定性不可或缺的一环。通过综合运用多种评估指标、科学的验证方法以及深入的性能分析,我们不仅能够全面理解模型的能力和限制,还能为持续优化模型、提升预测准确性奠定坚实基础。

微学AI的博客 2329

SlidingMenu的使用详解

前言- 最近自己在做一个Android的程序,需要用到一个侧滑的菜单,发现了SlidingMenu这个开源项目。简单实用,但是实战的时候遇到了许多小问题,今天来记录一下。 SlidingMenu的使用- SlidingMenu是一个GitHub上面的开源类库,不是一个完整的项目,需要将它引入自己的项目,但是我没有用这种方法,所以这里先挖一个坑 我偷了一下懒,用了一个例子...

252

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

android 蓝牙通讯demo

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

做SlidingMenu遇到的问题

今天做项目用到了SlidingMenu,正好有以前的DEMO,OK,copy,改,

gyzboy的专栏 559

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

SlidingMenu使用(一) 导入SlidingMenu

今天分享并记录下SlidingMenu的使用。SlidingMenu是github开源的一个经典的侧滑项目工具:Android Studio先看下效果,一直坚信,好的帖子应该先把效果贴出来,这样看的才有劲!ps:效果代码完全是反照网上大神demo写的,所以大家看到类似的也不要惊慌,这里就是具体实现一把ok,先来介绍在Android Studio 中如何导入SlidingMenu项目。1.github

IT_默 867

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

关于SlidingMenu的使用

SlidingMenu的使用1 在Activity中使用第一步 导入库文件 添加依赖库 第二步 new 一个slidingmenu 第三步 设置相应属性 第四步 设置slidingmenu显示的layout 并添加到activity上final SlidingMenu sm=new SlidingMenu(this); 第三步 sm.setMode(SlidingMenu.LEFT);//

shuiermengqi的专栏 499

SlidingMenu LeftAndRightActivity使用说明

在SlidingMenu的例子中有一个LeftAndRightA'ci'ti

zhao123h的专栏 1115

slidingmenu

1、把slidingmenu_library这个项目import到工作区当中去,然后将作为library导入到新建的项目当中去 2、常见的属性 menu.setMode(SlidingMenu.LEFT);//设置左滑菜单 menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);//设置滑动的屏幕范围,该设置为全屏区域都可

xingzemin0607的博客 296

Android SlidingMenu 使用

SlidingMenu侧滑菜单框架

c_cx_z的博客 330

Android侧滑菜单SlidingMenu集成与优化指南

侧滑菜单是移动应用常见的导航模式,通过手势交互在有限屏幕空间内扩展功能入口。其实现原理基于视图层叠和触摸事件分发,SlidingMenu作为经典开源库,采用视图动态偏移和透明度变化实现流畅的滑动效果。在Android开发中,这种设计模式显著提升了用户体验和操作效率,特别适合电商、社交类应用的主导航场景。以SlidingMenu为例,开发者需要处理Gradle依赖、Fragment兼容性等工程问题,同时通过CanvasTransformer实现自定义动画效果。虽然现代项目更多使用Navigation Draw

chulilang8944的博客 346

SlidingMenu使用简介

SlidingMenu 是GitHub上的一个开源项目,用来实现SlidingMenu的菜单效果(https://github.com/jfeinstein10/SlidingMenu)目前为止,它提供了侧滑菜单的最佳实现:定制灵活、各种阴影和渐变的滑动效果也很不错。而且目前看来这个项目关注的人很多,各种issue和pull request很频繁,能够保证这个开源库的质量,遇到问题也能有人帮忙答疑

持之以恒! 6756

SlidingMenu控件的使用

SlidingMenu是github上的一个滑动菜单的开源控件,很多应用都已经使用这个控件做为自己App的侧划菜单,如果不想自己重复的造轮子或者只是简单的侧滑的需求话,完全可以使用这个控件。那么下面就来说说这个控件的使用。下载该控件 从github上通过git clone命令下载这个控件。地址是https://github.com/jfeinstein10/SlidingMenu.git 导入到工

MotionGear的博客 618
上一篇: TextView跑马灯效果
下一篇: Widget简介
CharonChui
博客等级 码龄12年 66粉丝 134原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值