Tôi muốn vô hiệu hóa tất cả các tương tác trên màn hình cảm ứng trong khi hoạt ảnh đang được hiển thị. Tôi không muốn sử dụng phương pháp setClickable()
trên các nút ở đầu hoặc cuối của hoạt ảnh vì có một số lượng lớn các nút. Bất kỳ đề xuất?Vô hiệu hóa tất cả các tương tác trên màn hình cảm ứng Khi hoạt ảnh
Trả lời
Trong Hoạt động của bạn, bạn có thể ghi đè onTouchEvent
và luôn luôn return true;
để cho biết bạn đang xử lý các sự kiện chạm.
Bạn có thể tìm tài liệu cho hàm đó there.
Sửa Dưới đây là một cách để bạn có thể vô hiệu hóa cảm ứng trên toàn bộ màn hình thay vì xử lý tất cả các quan điểm từng người một ... Đầu tiên thay đổi cách bố trí hiện tại của bạn như thế này:
<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>
Và sau đó xác định tùy chỉnh của bạn xem với một cái gì đó như thế này:
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;
}
}
Sau đó, trong hoạt động, bạn có thể vô hiệu hóa các liên lạc với
(TouchBlackHoleView) black_hole = findViewById(R.id.black_hole);
black_hole.disable_touch(true);
Và kích hoạt nó trở lại với
black_hole.disable_touch(false);
câu trả lời cho vấn đề này
for (int i = 1; i < layout.getChildCount(); i++) { TableRow row = (TableRow) layout.getChildAt(i); row.setClickable(false);
chọn tất cả các hàng của cách bố trí bảng trong đó có tất cả các quan điểm và vô hiệu hóa chúng
Cách dễ dàng để thực hiện đó là thêm bố cục transaperent trên nó (thêm nó trong chiều cao và chiều rộng phụ huynh điền xml của bạn).
Trong khi bắt đầu hoạt hình: transaparentlayout.setClickable(true);
Trong khi kết thúc hoạt hình: transaparentlayout.setClickable(false);
Cuối cùng tôi đã là một câu trả lời cơ bản của @Matthieu và làm cho nó làm việc theo cách như vậy. Tôi quyết định xuất bản câu trả lời của mình vì tôi mất 30 phút để hiểu tại sao tôi gặp lỗi.
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" />
Lớp
public class TouchBlackHoleView kéo dài Xem { tin 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;
}
}
Sử dụng
blackHole = (TouchBlackHoleView) findViewById(R.id.blackHole);
blackHole.disableTouch(true);
Thưởng thức
'Xem xem = findViewById (R.id.whole_view); \t chế độ xem.setOnTouchListener (new OnTouchListener() { công khai boolean onTouch (Xem v, sự kiện MotionEvent) { // TODO Phương pháp tạo tự động được tạo trả về true; } }); ' tôi đã viết điều này khi bắt đầu hoạt ảnh nhưng không hoạt động vui lòng cho tôi biết nơi nào sai –
đây là toàn bộ id của bố cục chính của tôi –
Loại xem là gì và bạn đang cố vô hiệu hóa điều gì? Nó là một nút? một ScrollView? ...? – Matthieu