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

Отключить все взаимодействия с сенсорным экраном во время анимации

Я хочу отключить все взаимодействия с сенсорным экраном во время отображения анимации. Я не хочу использовать метод setClickable() на кнопках в начале или конце анимации, потому что есть большое количество кнопок. Любые предложения?

4b9b3361

Ответ 1

В своей деятельности вы можете переопределить onTouchEvent и всегда return true;, чтобы указать, что вы обрабатываете события касания.

Вы можете найти документацию для этой функции там.

Изменить. Здесь вы можете отключить сенсорный контроль над всем экраном, а не обрабатывать каждое представление по одному... Сначала измените текущий макет следующим образом:

<FrameLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >

    < .... put your current layout here ... />

    <TouchBlackHoleView
        android:id="@+id/black_hole"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />
</FrameLayout>

И затем определите свой пользовательский вид примерно так:

public class TouchBlackHoleView extends View {
    private boolean touch_disabled=true;
    @Override
    public boolean onTouchEvent(MotionEvent e) {
        return touch_disabled;
    }
    public disable_touch(boolean b) {
        touch_disabled=b;
    }
}

Затем в действии вы можете отключить прикосновение с помощью

(TouchBlackHoleView) black_hole = findViewById(R.id.black_hole);
black_hole.disable_touch(true);

И включите его с помощью

black_hole.disable_touch(false);

Ответ 2

ответ на этот вопрос

for (int i = 1; i < layout.getChildCount(); i++) { TableRow row = (TableRow) layout.getChildAt(i); row.setClickable(false);

выбрали все строки макета таблицы, в которых были все представления и отключены.

Ответ 3

Простой способ реализации, который добавляет над ним транспарантный макет (добавьте его в высоту и ширину родителя xml).

В начале анимации: transaparentlayout.setClickable(true);

В конце анимации: transaparentlayout.setClickable(false);

Ответ 4

В конце концов я взял в качестве основного ответа @Matthieu и сделал так, чтобы он работал таким образом. Я решил опубликовать свой ответ, потому что мне понадобилось 30 минут, чтобы понять, почему я получил ошибку.

XML

<...your path to this view and in the end --> .TouchBlackHoleView
    android:id="@+id/blackHole"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

Класс

открытый класс TouchBlackHoleView extends View {   private boolean touchDisable = false;

public TouchBlackHoleView(Context context) {
    super(context);
}

public TouchBlackHoleView(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public TouchBlackHoleView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    return touchDisable;
}

public void disableTouch(boolean value){
    touchDisable = value;
}
}

Использование

blackHole = (TouchBlackHoleView) findViewById(R.id.blackHole);
blackHole.disableTouch(true);

Enjoy