无障碍模式下,如何实现悬浮窗的手势控制

阅读时长 12 分钟读完

前言

现在随着人们对于无障碍模式越来越重视,开发者们需要考虑怎样去实现在这种模式下的交互。今天,我们将介绍一种实现在无障碍模式下的悬浮窗的手势控制的方法,确保所有用户都可以方便的操作你的应用。

实现方法

添加权限

首先在您的项目的 manifest 中添加一个权限:

它将允许我们创建一个悬浮窗,这是必须的。

创建一个 Service

创建一个 Service,并在其中创建一个 View 作为悬浮窗。我们可以在 View 中定义一些手势操作,例如,我们可以监听 OnTouchListener 上的单指拖动,双指缩放和双指旋转手势。示例代码如下:

-- -------------------- ---- -------
----- ------------------- - --------- -

    ------- -------- --- ------------- ----
    ------- --- ---------------- ---------------- - ----
    ------- --- ----------- - --
    ------- --- --------------- - --
    ------- --- ---------- - --
    ------- --- ---------- - --
    ------- --- -------- - -
    ------- --- -------- - -
    ------- --- -------- - -----

    -------- --- -------------- -------- ------- -
        ------ --------
    -

    -------- --- ---------- -
        ----------------
        ------------ - ------------------------------------------------------------------ -----
        --------------- - --------------------- --------------------
        --- ------------------ - ---------------------------
                ----------------------------------------
                ----------------------------------------
                -- ---------------------- -- ----------------------
                    ---------------------------------------------------
                ----
                    --------------------------------------
                ----------------------------------------------
                ------------------------
        --- ------------- - -------------------------------- -- -------------
        ----------------------------------- -------------------
        ----------------
    -

    ------- --- ---------------- -
        ----------------------------------------- - -- ----- --
            ------------------------------------
        -
        ----------------------------------------- - -- ----- --
            ------------------------------------
        -
        ------------------------------- - -- ----- --
            --- ------- - -----
            ---- -------------------- -
                ----------------------- -- -
                    ---------- - ----------
                    ---------- - ----------
                    ------- - ----
                    -------- - -----
                -
                ----------------------- -- -
                    --- ----- - ----------- - -------------------
                    --- ----- - ----------- - -------------------

                    -- --------- -- ---------------------- - -- -- ---------------------- - --- -
                        --- --------- - -------------------------- -- ---------------------------
                        ----------- - -------- - -----
                        ----------- - -------- - -----
                        -------------------------- -- --------------------------- - ---------
                        -------- - ----
                    -
                -
                --------------------- -- -
                    -- ----------- -
                        ------------------------------------
                    - ---- -
                        -------- - -------------------------- -- -----------------------------
                        -------- - -------------------------- -- -----------------------------
                        -------- - -----
                    -
                    ------- - ----
                -
            -
            -------
        -
    -

    ------- ----- ----- ----------------- - ----------------------------------------- -
        -------- --- ----------------------- -------------- ------- -
            ---------------------------------- ------- ----- --------------------------
            ------ -----------------------------
        -

        -------- --- -------------- -------------- ------- -
            ---------------------------------- ------- ----- --------------------------
            ------ --------------------
        -

        -------- --- ----------------- ----------------------- ------- -
            ----------- -- --------------------- -- ----
            ------------------- - -----------
            ------------------- - -----------
            ------ ----
        -

        -------- --- ------------------ ------------------------ ------- -
            --------------- -- ------------------------------ -- ----
            --------------------- - ---------------
            ------ ----
        -
    -
-

在这个示例代码中,我们添加了三种基本手势,分别是单指单击,双指双击和手势缩放。我们也添加了一个简单的拖动手势,并且这个悬浮窗的大小可以随手势缩放而改变。

在 AccessibilityService 中使用触摸控制

我们可以创建一个 AccessibilityService,在其中使用无障碍服务来监听屏幕上的触摸事件。我们将会用这种方法在悬浮窗上添加一些手势控制。示例代码如下:

-- -------------------- ---- -------
----- -------------------------------- - ---------------------- -

    ------- --- ---------------- ---------------- - ----
    ------- --- ----------- - --
    ------- --- --------------- - --
    ------- --- ---------- - --
    ------- --- ---------- - --

    -------- --- --------------------------- -------------------- -
        -- -------
    -

    -------- --- ------------- -
        -- -------
    -

    -------- --- -------------------- -
        --------------- - --------------------- --------------------
    -

    -------- --- -------------------- ----- ------- -
        -- ---------- -- -------------------------------------- -
            ---------------------------------- ------ ---- --------------------------
        -
        ------ --------------------------
    -

    -------- --- ------------------------------ -
        -- -------
    -

    ------- ----- ----- ----------------- - ----------------------------------------- -
        -------- --- ----------------------- -------------- ------- -
            ---------------------------------------
            ------ -----------------------------
        -

        -------- --- -------------- -------------- ------- -
            ---------------------------------------
            ------ --------------------
        -

        -------- --- ----------------- ----------------------- ------- -
            ----------- -- --------------------- -- ----
            --------------------------------------------------------------
                            ---------------------- ------------ ---------------- -- --- ---------------- -- ---
                            --------- ----- -----
            ------ ----
        -

        -------- --- ------------------ ------------------------ ------- -
            --------------- -- ------------------------------ -- ----
            --------------------------------------------------------------
                            --------------------------- ---------------- -- --- ---------------- -- ---
                            --------- ----- -----
            ------ ----
        -
    -
-

在这个示例代码中,我们使用了 AccessibilityService 的 dispatchGesture 方法来分发手势。我们添加了两种触摸操作,分别是单指单击和双指双击。并且我们重度依赖了我们之前在 Service 中创建的 MyGestureListener。同时,我们还添加了一个系统手势 SWIPE_UP。

结论

在这篇文章中,我们介绍了如何为您的应用程序添加一个悬浮窗的手势控制,并且确保其在无障碍模式下也能正常运行。有了这个功能,使用者将会更加方便地操作您的应用程序。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67109b7b377015f5a1a1ae60

纠错
反馈