Подтвердить что ты не робот

Отключение нескольких пальцев в моем приложении

Мое приложение использует одно действие для размещения нескольких фрагментов. Каждый раз, когда один фрагмент отображается на экране телефона. Вид каждого фрагмента состоит из нескольких значков изображений.

В настоящее время пользователь может нажимать на две иконки одновременно двумя пальцами (каждый щелчок нажимает на один значок). Я хочу отключить эту функцию multi-touch в моем приложении, чтобы разрешить только одно нажатие значка вступить в действие.

Я пробовал следующие способы:

Способ 1: в моей теме приложения, я добавил:

<item name="android:windowEnableSplitTouch">false</item>

Способ 2: В манифесте манифеста Android я добавил:

<uses-feature android:name="android.hardware.touchscreen.multitouch" android:required="false" />

Способ 3: в моей деятельности:

@Override
public boolean onTouchEvent(MotionEvent event) {

    if(event.getPointerCount() > 1) {
        System.out.println("Multitouch detected!");
        return true;
    }
    else
       return super.onTouchEvent(event);
    }

К сожалению, ни одно из моих решений не работает. Итак, Как отключить функцию multi-touch в моем приложении?

4b9b3361

Ответ 1

В случае: у вас есть несколько кнопок, и вы хотите сделать только одну кнопку. В родительском (не ROOT, только родительский элемент) кнопок, в его параметрах xml добавьте

Android: splitMotionEvents = "ложь"

И что это. Пример:

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:splitMotionEvents="false" <-----------!!!
    >

    <Button
    android:id="@+id/button_main_1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="button1" />

    <Button
    android:id="@+id/button_main_2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="button2" />

    <Button
    android:id="@+id/button_main_3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="button3" />
</LinearLayout>

Btw. Когда у вас есть 2 linearlayout с 3 кнопками на макет, вы должны установить этот splitMotionEvents в два макета , а также в родительском из этих 2 linearLayouts. В противном случае вы сможете щелкнуть только одну кнопку на макет (тогда сумма = 2). Надеюсь, вы поняли это.:)

Ни один из других решений не работал у меня или был слишком хромым.

Ответ 2

Да, я тоже столкнулся с этим вопросом и я нашел решение, что android: splitMotionEvents = "false" это будет работать только для того, чтобы направлять детей макета.

Пример:

Как если бы вы создали два макета A и B и В A есть две кнопки b1, b2 В B есть две кнопки b3, b4

оба A и B находятся в макете родителя Поэтому сначала вам нужно очистить, что эти кнопки не являются прямыми дочерними элементами родительского макета

В родительском макете есть только два ребенка A и B

Если вы добавите android: splitMotionEvents = "false" в родительский макет то multi touch не будет работать с макетом A и макетом B, но он будет работать на каждой кнопке b1, b2, b3, b4, потому что это не прямые дочерние элементы родительского макета

Итак, если вы хотите, чтобы мультиплеер не работал на этих кнопках Тогда вам нужно добавить android: splitMotionEvents = "false" для каждого макета отдельно

Есть несколько случаев:

1).Если вы добавите android: splitMotionEvents = "false" в макет A чем вы не можете нажать кнопку b1 и кнопку b2 одновременно но вы можете одновременно нажать кнопку b1 или b2 и кнопку b3 или b4.

2). прямо напротив случая 1.

3). Но если вы добавите android: splitMotionEvents = "false" на оба макета, чем вы не можете коснуться каких-либо двух кнопок на экране одновременно.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:splitMotionEvents="false" >

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:splitMotionEvents="false" >

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="b1" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="b2" />
</LinearLayout>

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:splitMotionEvents="false" >

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="b3" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="b4" />
</LinearLayout>

Я думаю, это может быть полезно для вас.

Ответ 3

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

Вы должны настроить onTouchListener на этом прозрачном представлении, что делает что-то вроде этого:

gestureOverlayView.setOnTouchListener(new View.OnTouchListnener(){
    @Override
    public boolean onTouch(View v, MotionEvent e){
       // True means the event is ignored by the overlayed views 
       return e.getPointerCount() > 1 ? true : false;
    }
}