【问题标题】:android studio change background image for multiple imagesandroid studio更改多个图像的背景图像
【发布时间】:2020-06-18 07:10:57
【问题描述】:

我在可绘制文件夹中有 5 张图片(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);

            }

        }
    });

【问题讨论】:

  • 你应该保存 x 的值。这样你总是从0开始

标签: android image


【解决方案1】:

您必须将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 并期望它一直工作,除非纯粹靠运气和祈祷
  • @DavidKroukamp 是的,我认为这无法完成,但问题是,代码是这样编写的,所以我以这种方式编写,但我认为这只是为了缩短时间。通常它必须按照你所写的那样完成
  • @DavidKroukamp 什么?他在他的问题中写道“但它只会改变一次背景图像”。所以我认为他知道如何设置图像资源,唯一的问题是局部变量
  • 这就像看着一个人淹死在海洋中,鲨鱼在他们周围盘旋,而您只需给他们一件救生衣就可以起飞。
  • 删除了我的反对票和赞成票。感谢您的更新。
【解决方案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++;
            }
        }
    });

【讨论】:

  • 感谢这在将 x 更改为 final 后对我有用
  • 你知道如何在关闭应用程序后保存最后选择的图像
  • @arater2000 developer.android.com/training/data-storage/shared-preferences 尝试共享首选项。我假设您只保存 R.drawable.bg1 或其他任何内容,这将保存资源的 int id。如果你需要更复杂的结构那么id推荐使用android的sqllite数据库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-07
  • 2013-05-13
  • 2016-04-29
  • 1970-01-01
  • 2016-01-09
  • 2020-12-16
  • 2011-12-07
相关资源
最近更新 更多