问题:setVisibility((延迟工作。默认情况下,darken_bck_view
与alpha="0"
和visibility="gone"
我通过代码将darken_bck_view
的visibility
更改为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
只有在一段时间后才能点击(即使已经开始可见(,正如我所想的那样。