Android - 每5秒更改一次背景

时间:2014-04-27 07:07:00

标签: android

我有这个代码试图让我的应用每5秒更改一次背景,但是,它只显示我的数组中的第一个图像。是否有一个简单的调整,我可以这样做,它将连续贯穿5个不同的图像??

以下是我在MainActivity.class中的内容

    int count=0; //outside oncreate

    //all that is below is within oncreate
    final int[] drawablearray=new int[]{R.drawable.one,R.drawable.two,R.drawable.three,R.drawable.four,R.drawable.five};
    new Handler().postDelayed(new Runnable() {
        public void run() {
           if(count<drawablearray.length){
               MainActivity.this.getWindow().
               setBackgroundDrawableResource(drawablearray[count]);
               count++;
            }
           else{
              count=0;
            }
          }
      }, 5000);

感谢所有人和任何帮助!!

3 个答案:

答案 0 :(得分:5)

您需要递归调用该方法。您目前的设置方式只能调用一次。

int count =0;
boolean abort;
onResume(){
    super.onResume();
    abort = false;
    this.changeBackground(count);
}
onPause(){
    abort = true;
    super.onPause();
}


private void changeBackground(int count){
    if (abort)
        return;
    new Handler().postDelayed(new Runnable() {
        public void run() {
            if(count<drawablearray.length){
                count++;
            }
            else{
               count=0;
            }
            changeBackgroundColor(count);
            changeBackground(count);
        }
    }, 5000);
}

private void changeBackgroundColor(int count){
    if (abort)
        return;
    MainActivity.this.getWindow().
                setBackgroundDrawableResource(drawablearray[count]);
}

答案 1 :(得分:0)

旋转无限循环。此外,您可以使用%删除if-else条件:

while (changeBackground == true)
{
    new Handler().postDelayed(new Runnable() {
    public void run() {
           MainActivity.this.getWindow().
           setBackgroundDrawableResource(drawablearray[count]);
           count = (count + 1) % drawablearray.length;
  }, 5000);
}

PS:您可能希望从某个事件配置背景更改,例如在事件e上,应停止更改背景。此类事件的一个示例可以是从一个活动切换到另一个活动。您可以通过设置/重置变量changeBackground来实现此目的。

答案 2 :(得分:0)

@BatchSize(size = 20)
@ManyToMany(cascade = { CascadeType.MERGE, CascadeType.PERSIST }, fetch = FetchType.LAZY,targetEntity=Site.class)
@JoinTable(name = "USER_SITE",
joinColumns = { @JoinColumn(name = USER_ID, nullable = false) },
inverseJoinColumns = { @JoinColumn(name = "SITE_ID", nullable = false) })
private Set<ISite> userSites;