当前位置: 首页 > news >正文

如何在Android 12 aosp系统源码中添加三指下滑截图功能

如何在Android 12 aosp系统源码中添加三指下滑截图功能

系统中截图api非常简单:

private static ScreenshotHelper sScreenshotHelper;sScreenshotHelper = new ScreenshotHelper(mContext);//调用
sScreenshotHelper.takeScreenshot(WindowManager.TAKE_SCREENSHOT_FULLSCREEN, true, true, mScreenShotHandler, null);

如果在系统中添加三指下滑监听了:

首先找到:

我们这里基于Android12 源码

首先找到:SystemGesturesPointerEventListener类,这里面有监听系统滑动手势的地方:

找到下面代码添加手势判断:

    private int detectSwipe(int i, long time, float x, float y) {final float fromX = mDownX[i];final float fromY = mDownY[i];final long elapsed = time - mDownTime[i];if (DEBUG) Slog.d(TAG, "pointer " + mDownPointerId[i]+ " moved (" + fromX + "->" + x + "," + fromY + "->" + y + ") in " + elapsed);//添加三指下滑判断float xDistance = Math.abs(x - fromX);float yDistance = Math.abs(y - fromY);if (fromY >= mSwipeStartThreshold * 2&& yDistance > xDistance&& y > fromY + mSwipeDistanceThreshold&& elapsed < SWIPE_TIMEOUT_MS) {return SWIPE_FROM_CENTER_TO_DOWN;}if (fromY <= mSwipeStartThreshold&& y > fromY + mSwipeDistanceThreshold&& elapsed < SWIPE_TIMEOUT_MS) {return SWIPE_FROM_TOP;}if (fromY >= screenHeight - mSwipeStartThreshold&& y < fromY - mSwipeDistanceThreshold&& elapsed < SWIPE_TIMEOUT_MS) {return SWIPE_FROM_BOTTOM;}if (fromX >= screenWidth - mSwipeStartThreshold&& x < fromX - mSwipeDistanceThreshold&& elapsed < SWIPE_TIMEOUT_MS) {return SWIPE_FROM_RIGHT;}if (fromX <= mSwipeStartThreshold&& x > fromX + mSwipeDistanceThreshold&& elapsed < SWIPE_TIMEOUT_MS) {return SWIPE_FROM_LEFT;}return SWIPE_NONE;}

再找到这个方法:

public void onPointerEvent(MotionEvent event)

在里面添加代码:

            case MotionEvent.ACTION_MOVE:if (mSwipeFireable) {final int swipe = detectSwipe(event);mSwipeFireable = swipe == SWIPE_NONE;if (swipe == SWIPE_FROM_TOP) {if (DEBUG) Slog.d(TAG, "Firing onSwipeFromTop");mCallbacks.onSwipeFromTop();} else if (swipe == SWIPE_FROM_BOTTOM) {if (DEBUG) Slog.d(TAG, "Firing onSwipeFromBottom");mCallbacks.onSwipeFromBottom();} else if (swipe == SWIPE_FROM_RIGHT) {if (DEBUG) Slog.d(TAG, "Firing onSwipeFromRight");mCallbacks.onSwipeFromRight();} else if (swipe == SWIPE_FROM_LEFT) {if (DEBUG) Slog.d(TAG, "Firing onSwipeFromLeft");mCallbacks.onSwipeFromLeft();} else if (swipe == SWIPE_FROM_CENTER_TO_DOWN) {if (DEBUG) Slog.d(TAG, "Firing onSwipeFromCenterToDown:" + event.getPointerCount());//判断三指开始截图if (event.getPointerCount() == 3) {sScreenshotHelper.takeScreenshot(WindowManager.TAKE_SCREENSHOT_FULLSCREEN, true, true, mScreenShotHandler, null);}}}break;

那么三指截图就完成了!!!!

是不是很干,没有水分,有用记得点赞收藏。

补充:

private static final int SWIPE_FROM_CENTER_TO_DOWN = 5;
http://www.lryc.cn/news/435451.html

相关文章:

  • 使用SQL语句查询MySQL数据表
  • 【AI绘画、换脸、写作、办公】从零开始:使用AIStarter启动器发布AI应用
  • eeprom使用 cubemx STM32F407ZGT6【IIC驱动AT24C02】
  • STL-stack/queue/deque(容器适配器)
  • NVDLA专题15:Runtime environment-核心模式驱动
  • 计算机毕业设计选题推荐-班级管理系统-教务管理系统-Java/Python项目实战
  • 推荐一款开源、高效、灵活的Redis桌面管理工具:Tiny RDM!支持调试与分析功能!
  • Java项目: 基于SpringBoot+mybatis+maven新闻推荐系统(含源码+数据库+毕业论文)
  • 《Python读取 Excel 数据》
  • Druid连接池
  • Python3网络爬虫开发实战(14)资讯类页面智能解析
  • 社交媒体的未来:Facebook如何通过AI技术引领潮流
  • Java 面试题:从源码理解 ThreadLocal 如何解决内存泄漏 ConcurrentHashMap 如何保证并发安全 --xunznux
  • 使用人力劳务灵工安全高效的发薪工具
  • 使用W外链创建微信短链接的方法
  • 【人工智能学习笔记】4_4 深度学习基础之生成对抗网络
  • 基于MinerU的PDF解析API
  • 猫头虎分享:看完百度内部讲话,整理出李彦宏关于大模型的10个判断
  • vue3透传、注入
  • 数模原理精解【9】
  • Java中的linkedList类及与ArrayList的异同
  • 【精选】文件摆渡系统:跨网文件传输的安全与效率之选
  • tkinter 电子时钟 实现时间日期 可实现透明 无标题栏
  • 【hot100-java】【除自身以外数组的乘积】
  • 【Python机器学习】循环神经网络(RNN)——审察模型内部情况
  • 智能语音交互:人工智能如何改变我们的沟通方式?
  • vue3中动态引入本地图片的两种方法
  • Linux网络——socket编程与UDP实现服务器与客户机通信
  • 大型语言模型中推理链的演绎验证
  • openharmony 应用支持常驻和自启动