15

我希望在显示动画时禁用所有触摸屏交互。我不希望setClickable()在动画开始或结束的按钮上使用该方法,因为有大量按钮。有什么建议么?

4

4 回答 4

6

在您的活动中,您可以覆盖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);
于 2012-06-11T21:20:17.770 回答
2

实现它的简单方法是在其上添加透明布局(将其添加到您的 xml 填充父级高度和宽度中)。

在动画开始:transaparentlayout.setClickable(true);

在动画结尾: transaparentlayout.setClickable(false);

于 2013-08-26T17:37:59.297 回答
1

回答这个问题

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

选择了具有所有视图并禁用它们的表布局的所有行

于 2012-06-12T18:42:38.450 回答
0

最终,我将@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 扩展视图 { 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);

享受

于 2016-11-09T11:09:53.647 回答