Android Studio更改多个图片的背景图像

3

我有5张图片放在drawable文件夹中(bg1,bg2,bg3,bg4,bg5),其中bg1是默认背景。

我想要通过点击按钮来依次更改背景图像,当到达最后一张图像时,它应该再次回到第一张图像,

例如,如果我点击了按钮,它应该将bg2设置为背景图像,如果我再次点击它,则应将bg3设置为背景图像,以此类推,

我尝试过下面的代码,但它只能更改一次背景图像。

    button.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            int x = 0;

            while(x < 5){

             x ++;
                // Give image name that you want to show on button click
                layout.setBackgroundResource(R.drawable.bg+x);

            }

        }
    });

1
你应该保存 x 的值。这样你总是从 0 开始。 - Gabriele Mariotti
2个回答

3

你需要将x设置为全局变量。在函数中设置x会使其始终等于0

int x = 0; //global variable in activity/fragment

...

button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
              x ++;
              x %= 5;
              if (x==0) layout.setBackgroundResource(R.drawable.bg1);
              else if (x==1) layout.setBackgroundResource(R.drawable.bg2);
              else if (x==2) layout.setBackgroundResource(R.drawable.bg3);
              else if (x==3) layout.setBackgroundResource(R.drawable.bg4);
              else layout.setBackgroundResource(R.drawable.bg5);
            }

        }
    });

你真的可以执行R.drawable.bg+x吗?我的意思是,R文件中的值是生成的ID,所以我认为你不能简单地将1添加到其中并期望它始终正常工作,除非纯粹靠运气和祈祷。 - David Kroukamp
@DavidKroukamp 是的,我认为这是不可能的,但在问题和代码中,它是这样编写的,所以我也按照这种方式编写了。但我认为这只是为了让它更简短。通常情况下,必须使用if来完成,就像您所写的那样。 - iknow
@DavidKroukamp 什么?他在问题中写道“但它只更改背景图像一次”。所以我认为他知道如何设置图像资源,唯一的问题是本地变量。 - iknow
这就像看着一个人在海洋中溺水,周围还有鲨鱼游来游去,而你只是扔给他们一件救生衣然后飞走了。 - David Kroukamp
这个问题的主要(也可能是唯一的)问题是本地变量没有设置资源。所以为了让代码更简洁,我写了一个像提问者一样的答案。 ‍♂️ - iknow
1
取消了我的踩,改为点赞。感谢更新。 - David Kroukamp

2

尝试:

// declare the varibale globally, or else everytime the onClick is called it will be reset to 0 
int x = 1;

button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
                int bg = 0;

                // are we larger than 5? lets start again at 1 :)
                if (x == 6) x = 1;

                if (x == 1) bg = R.drawable.bg1;
                if (x == 2) bg = R.drawable.bg2;
                if (x == 3) bg = R.drawable.bg3;
                if (x == 4) bg = R.drawable.bg4;
                if (x == 5) bg = R.drawable.bg5;

                layout.setBackgroundResource(bg);

                // lets increment you for the next round
                x++;
            }
        }
    });

1
谢谢,我在将x更改为final后成功了。 - arater 2000
你有没有想过在关闭应用程序后如何保存最后选择的图像? - arater 2000
尝试使用SharedPreferences。我认为您只需保存R.drawable.bg1或其他内容,这将保存资源的int id。如果您需要更复杂的结构,则建议使用Android的SQLite数据库。 - David Kroukamp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接