我正在模仿帧动画;我把这一切都解决了。 我有一个for循环,在每次迭代中,它会在延迟后更改ImageView的图像。
for(int i = 1; i <13; i++){
if (stop== false){
String imgName = "b"+ Integer.toString(i);
id = getResources().getIdentifier(imgName, "drawable", getPackageName());
Handler handlerTimer = new Handler();
handlerTimer.postDelayed(new Runnable(){
public void run() {
view.setImageDrawable((getResources().getDrawable(id)));
}}, 300);
}
}
问题是run()不会在每次迭代时刷新;它只运作一次。
如何刷新或进行新的运行()?
我愿意采取任何其他方式来做到这一点。
任何建议都将受到赞赏。
答案 0 :(得分:1)
步骤1:将Runnable
定义为您活动的数据成员(或此代码所在的位置)
第2步:转储Handler
,因为您不需要它postDelayed()
已在View
上实施
步骤3:创建一个执行postDelayed()
调用的帮助方法 - 我会在此处将该方法称为foo()
- 并在您不正确调用的地方调用foo()
postDelayed()
步骤4:在run()
的{{1}}中,再次致电Runnable
以重新安排foo()
另一个延迟期
答案 1 :(得分:0)
尝试一下,如果它不起作用,那么生病尝试其他事情:
for(int i = 1; i <13; i++)
{
if (stop== false)
{
String imgName = "b"+ Integer.toString(i);
id = getResources().getIdentifier(imgName, "drawable", getPackageName());
Handler handlerTimer = new Handler();
handlerTimer.postDelayed(new Runnable(){
public void run() {
view.setImageDrawable((getResources().getDrawable(id)));
view.invalidate();
}}, 300);
}
}
invalidate()应该使您的视图重新绘制,并且您应该获得所需的效果。希望这有帮助!
这是Thread示例:
public class Main implements Runnable
{
public Main()
{
Thread thread = new Thread(this);
thread.start();
//new Thread starts at run()
}
public void run()
{
String imgName = "b"+ Integer.toString(i);
id = getResources().getIdentifier(imgName, "drawable", getPackageName());
try
{
for(int i = 1; i <13&!stop; i++)
{
view.setImageDrawable((getResources().getDrawable(id)));
Thread.sleep(300);
}
}catch(Exception e){e.printStackTrace();}
}
public static void main(String args[]){new Main();}
}
如果你还需要其他任何东西,请告诉我!