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