Как сделать сенсорные события через наложение доступа? - PullRequest
0 голосов
/ 16 мая 2018

В настоящее время я работаю над службой доступности, которая имеет два представления. Кнопка и простой цветной вид. Цветной вид появляется / исчезает, когда я касаюсь кнопки. Это код услуги -

package com.hardik.accessibiltyservicetest;

import android.accessibilityservice.AccessibilityService;
import android.accessibilityservice.FingerprintGestureController;
import android.graphics.PixelFormat;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import android.view.accessibility.AccessibilityEvent;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import in.championswimmer.sfg.lib.SimpleFingerGestures;

public class Service extends AccessibilityService {

    FrameLayout mLayout;
    WindowManager.LayoutParams lp;
    LayoutInflater inflater;
    WindowManager wm;

    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {

    }

    @Override
    public void onInterrupt() {

    }

    @Override
    protected void onServiceConnected() {
        // Create an overlay and display the action bar
        wm = (WindowManager) getSystemService(WINDOW_SERVICE);
        mLayout = new FrameLayout(this);
        lp = new WindowManager.LayoutParams();
        lp.type = WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY;
        lp.format = PixelFormat.TRANSLUCENT;
        lp.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
        lp.width = WindowManager.LayoutParams.MATCH_PARENT;
        lp.height = WindowManager.LayoutParams.MATCH_PARENT;
        lp.gravity = Gravity.CENTER;
        inflater = LayoutInflater.from(this);
        inflater.inflate(R.layout.action_bar, mLayout);
        wm.addView(mLayout, lp);
        configurePowerButton();

    }

    boolean is = true;

    private void configurePowerButton() {
        SimpleFingerGestures obj = new SimpleFingerGestures();
        obj.setDebug(true);
        obj.setConsumeTouchEvents(true);
        obj.setOnFingerGestureListener(new SimpleFingerGestures.OnFingerGestureListener() {
            @Override
            public boolean onSwipeUp(int i, long l, double v) {
                Log.e("Swipe", "Up "+i);
                return false;
            }

            @Override
            public boolean onSwipeDown(int i, long l, double v) {
                return false;
            }

            @Override
            public boolean onSwipeLeft(int i, long l, double v) {
                return false;
            }

            @Override
            public boolean onSwipeRight(int i, long l, double v) {
                return false;
            }

            @Override
            public boolean onPinch(int i, long l, double v) {
                return false;
            }

            @Override
            public boolean onUnpinch(int i, long l, double v) {
                return false;
            }

            @Override
            public boolean onDoubleTap(int i) {
                return false;
            }
        });


        Button powerButton = mLayout.findViewById(R.id.power);
        final View img = mLayout.findViewById(R.id.view);
        powerButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //performGlobalAction(GLOBAL_ACTION_POWER_DIALOG);
                Toast.makeText(getApplicationContext(), "yus", Toast.LENGTH_SHORT).show();
                if (is){
                    is = false;
                    img.setVisibility(View.GONE);
                }
                else{
                    is =true;
                    img.setVisibility(View.VISIBLE);
                }

            }
        });

        img.setOnTouchListener(obj);


    }


}

и это файл макета -

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <Button
        android:id="@+id/power"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="32dp"
        android:layout_marginTop="32dp"
        android:background="#80FFFFFF"
        android:text="Test"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <View
        android:id="@+id/view"
        android:layout_width="300dp"
        android:layout_height="300dp"
        android:background="#000000"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

событие касания и все работает отлично. но проблема в том, что при текущих длине и ширине параметра окна WindowManager, соответствующих родительскому элементу, наложение блокирует события прикосновения к самому пользовательскому интерфейсу Android, другими словами, ни одна часть пользовательского интерфейса Android не будет реагировать, пока наложение не будет остановлено, поскольку наложение потребляет все сенсорный ввод. И самый большой недостаток в том, что я хочу, чтобы наложение было таким же, как я спроектировал в макете, и, установив любой другой параметр длины и ширины, начинается проблема касания фона, то есть он снова начинает потреблять события касания.

Это не потребляет все сенсорные события, когда я устанавливаю параметры для переноса контента, но это не дает мне требуемого интерфейса службы.

Также не возражайте против использования библиотеки жестов, код является частью моего личного проекта.

заранее спасибо.

1 Ответ

0 голосов
/ 17 мая 2018

я нашел исправление. просто создайте отдельные макеты для каждого элемента

...