我希望在显示动画时禁用所有触摸屏交互。我不希望在动画开头或结尾的按钮上使用 setClickable()
方法,因为有大量按钮。有什么建议吗?
在"活动"中,您可以覆盖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);
实现它的简单方法是在其上添加透明布局(将其添加到xml填充父高度和宽度中)。
在动画开始:transaparentlayout.setClickable(true);
动画结尾:transaparentlayout.setClickable(false);
问题的答案
for (int i = 1; i < layout.getChildCount(); i++) {
TableRow row = (TableRow) layout.getChildAt(i);
row.setClickable(false);
选择了表格布局中具有所有视图的所有行并禁用它们
最终,我把@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" />
类
公共类 触摸黑洞视图扩展视图 { 私有布尔触摸禁用 = 假;
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);
享受