如何在不延迟的情况下强制setVisibility工作



问题:setVisibility((延迟工作。默认情况下,darken_bck_viewalpha="0"visibility="gone"
我通过代码将darken_bck_viewvisibility更改为VISIBLE,并预计后面的视图将无法单击

如果我在点击按钮后等待半秒钟,它就会像预期的那样工作

但是:当我点击darken_bck_view后面的元素时(当alpha开始改变时(,它们仍然可以点击(最多500毫秒(

问题:如何在点击按钮后立即强制setVisibility()方法更改darken_bck_view的状态(没有任何延迟(?

ContstractLayout with child elements:

<androidx.constraintlayout.widget.ConstraintLayout>
...
<View
android:id="@+id/darken_bck_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:alpha="0"
android:background="@color/colorBlack"
android:visibility="gone"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/adView"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toBottomOf="parent" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="some"
android:onClick="testClick"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintRight_toRightOf="parent" />
...
</androidx.constraintlayout.widget.ConstraintLayout>

活动中的按钮点击处理程序:

public void testClick(View view) {
darkenBckView.setVisibility(View.VISIBLE);
darkenBckView.animate().alpha(0.6f).setDuration(400);
}

使用:

mButton.animate().withStartAction(new Runnable() {
@Override
public void run() {   //<-- executed at animation Start
mButton.setEnabled(false);
}
}).withEndAction(new Runnable() {
@Override
public void run() {   //<-- executed at animation End
mButton.setEnabled(true);
}
}).alpha(0.6f).setDuration(400).start();

解决方案:在开始动画后立即将侦听器设置为view,并更改Visibility状态(在我的情况下为darken_bck_view(。因为view只有在一段时间后才能点击(即使已经开始可见(,正如我所想的那样。

最新更新