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

如何在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.kler.cn/a/301047.html

相关文章:

  • C++---类型转换
  • 视频直播5G CPE解决方案:ZX7981PG/ZX7981PMWIFI6网络覆盖
  • qt之QFTP对文件夹(含嵌套文件夹和文件)、文件删除下载功能
  • C++ 并发专题 - 线程安全的单例模式
  • 英语中do(做没做)和can(有能力/资格做)的区分
  • 向量数据库FAISS之五:原理(LSH、PQ、HNSW、IVF)
  • 什么是CPU、GPU、NPU?(包懂+会)
  • 基于微信小程序的宿舍报修系统的设计与实现
  • linux 安装three.js
  • linux kernel 6.x 用户态地址空间探究
  • ICETEK-DM6437-AICOM—— DMA直接存储器访问设计
  • JD18年秋招笔试疯狂数列python解答
  • 使用Docker快速启动Nacos集群
  • RepLKNet架构详解
  • 在 Vue 2 中使用 Axios 发起 POST 和 GET 请求
  • C#学习 深入理解委托、匿名方法、Lamda表达式、Linq;
  • 【CTF Web】BUUCTF Upload-Labs-Linux Pass-13 Writeup(文件上传+PHP+文件包含漏洞+PNG图片马)
  • 点亮第一盏LED灯 2),stm32CubeMX在线导入F103C8T6芯片包
  • Three 渲染器(二)
  • 如何将Windows风格的剪切和粘贴添加到Mac访达中
  • springboot配置多数据源
  • MySQL record 03 part
  • 第67期 | GPTSecurity周报
  • 简单的 Fortran 程序示例
  • C语言蓝桥杯:语言基础
  • c/c++面试100道