标题说明了一切。我想让 View 进入随机可见性和不可见性的无限循环。这就是我的处理方法:-
首先,我创建了两个方法来获取随机时间 getRandomWaitTime() 和 getRandomDisplayTime()。这些方法经过良好定义和测试(在日志中),并且按预期工作。这两种方法都返回一个随机值,以毫秒为单位,如
getRandomWaitTime() : 3000-6000
getRandomDisplayTime() : 3000-5000
现在我创建了一个 ImageView 水果[0],最初将其设置为不可见,然后执行以下代码:
fruit[0].postDelayed(new Runnable() {
@Override
public void run() {
fruit[0].setVisibility(View.VISIBLE);
fruit[0].postDelayed(new Runnable() {
@Override
public void run() {
fruit[0].setVisibility(View.INVISIBLE);
}
}, getRandomDisplayTime());
fruit[0].postDelayed(this, getRandomWaitTime());
}
}, getRandomWaitTime());
代码也编译、执行,ImageView经历了可见和不可见的无限循环但是将其设置为可见或不可见的时间似乎没有最小值3000ms有时感觉它可见 500 毫秒,然后就消失了。我尝试了很多方法,例如使用 Handler.postDelayed 而不是 View.postDelayed,但这似乎不起作用。
当我从 postDelayed 方法中删除所有 getRandomWaitTime()
和 getRandomDisplayTime()
方法并用 3000 这样的常量替换时,有趣的事情发生了。
Activity 开始。首先,fruit[0] 被设置为不可见。 3000 毫秒后,它变得可见并停留在那里。之后什么也没有发生。不再需要切换到隐身状态。我只是呆在那里。
那么所有这些巫术问题的可能原因是什么?
最佳答案
重点是,在第一次之后
你调用fruit[0].setVisibility(View.VISIBLE);
:
fruit[0].postDelayed(new Runnable() {
@Override
public void run() {
fruit[0].setVisibility(View.INVISIBLE);
}
}, getRandomDisplayTime());
和:
fruit[0].postDelayed(this, getRandomWaitTime());
几乎同时(立即)执行。
因此,假设 getRandomDisplayTime()
返回 3000,getRandomWaitTime()
返回 3500,您将在 3000 毫秒和 500 毫秒后看到 View 可见,它会再次消失。
您可以通过以下方式更改代码:
fruit[0].postDelayed(new Runnable() {
@Override
public void run() {
final Runnable runnable = this;
fruit[0].setVisibility(View.VISIBLE);
fruit[0].postDelayed(new Runnable() {
@Override
public void run() {
fruit[0].setVisibility(View.INVISIBLE);
fruit[0].postDelayed(runnable, getRandomWaitTime());
}
}, getRandomDisplayTime());
}
}, getRandomWaitTime());
关于android - 重复该过程: displaying a view for an random time then make it invisible for an random time,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41397318/