我希望我的应用能够延迟切换两张图片,比如说3秒钟。这是我以前的代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
getFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment())
.commit();
}
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
ImageView image = (ImageView)
findViewById(R.id.imgView_dice0);
image.setImageResource(R.drawable.dice_6);
}
}, 3000);
}
....
这适用于切换图像一次。我尝试将图像更改放在两个方法中(并将R.drawable.dice_6
替换为R.drawable.dice_1
),这些方法被延迟调用,被循环包围。这不起作用,应用程序只显示一个相同的骰子。
我该怎么办?
答案 0 :(得分:2)
您应该在runnable中重新启动Handler.postDelayed
以使其正常工作。
类似的东西:
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
private boolean useDiceOne;
@Override
public void run() {
ImageView image = (ImageView)findViewById(R.id.imgView_dice0);
if (!useDiceOne) {
image.setImageResource(R.drawable.dice_6);
} else {
image.setImageResource(R.drawable.dice_1);
}
useDiceOne = !useDiceOne;
handler.postDelayed(this, 3000);
}
}, 3000);
useDiceOne
将用于更改dice_1
和dice_6
之间的图片
p.s缓存ImageView
。
为了使它更灵活(在你想要的时候停止它等)你可以在某处保存处理程序引用(以及runnable引用)并使用removeCallbacks