【问题标题】:How to get a Random Non Final variable inside a Final runnable ? -Android如何在 Final runnable 中获取 Random Non Final 变量? -安卓
【发布时间】:2013-09-19 15:09:11
【问题描述】:

在显示代码之前无法解释这一点,所以:

final int randomcolor = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256),
                rnd.nextInt(256));


    final Runnable updater = new Runnable() {
            @Override
            public void run() {


                    relativeLayout.setBackgroundColor(randomcolor);     

                    handler.postDelayed(this, 25);
                }
            }
        };

上面我有一个名为 Updater 的可运行程序...下面我通过单击按钮启动它..

Button.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {

            handler.postDelayed(updater,2000 );

        }
    });

(我已经删掉了我的大部分代码,所以这可能没有意义我为什么要这样做。上面将创建一个无限循环,因为可运行对象被卡在没有出路的地方......假设我可以摆脱它。)

代码说明

所有这些都在 Oncreate()... 因此,单击按钮后,我将在延迟两秒后启动 Runnable ......然后,每 25 毫秒间隔后,相同的 runnable 一次又一次地运行直到时间结束(就像我说的,忽略这个最后一点。)

你会看到我在 runnable 中只做一件事,改变相对布局的背景颜色。

重要,我想要的是每 25 毫秒后,即每次运行时,它应该将相对布局的背景颜色更改为随机的东西。它可能看起来像一个醉汉华丽的癫痫诱导应用程序......把原因留给我(再次)

问题是,处理程序不能采用非最终可运行...并且每次运行的随机变量不能是最终的,最终和非最终不能一起工作。 (再读一遍)

所以,每次运行可运行文件时,我都需要一个新的 Color 整数...这样每次运行时,它都会将背景颜色更改为不同且随机的颜色。

我觉得解决方案很简单,但我似乎无法确定..

有什么想法吗?我该怎么做呢?

【问题讨论】:

    标签: android random time colors


    【解决方案1】:

    最简单的解决方案,即使它可能不是最有效的解决方案,是像这样在可运行文件本身内生成颜色:

    final Runnable updater = new Runnable() {
        @Override
        public void run() {
            final int randomcolor = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256),
                rnd.nextInt(256));
            relativeLayout.setBackgroundColor(randomcolor);     
            handler.postDelayed(this, 25);
        }
    };
    

    【讨论】:

      【解决方案2】:

      告诉你这个我觉得很脏,但你可以将变量包装在数组或列表中。

      final int[] randomColorHack = new int[1]; 
      final Runnable updater = new Runnable() {
              @Override
              public void run() {
                        randomColorHack[0] = 100;
                  }
              }
          };
      
      int out = randomColorHack[0];
      
      // out == 0;
      // until your updater is ran then it will == 100;
      

      显然,如果您想要可运行文件或列表:

       final List<Runnable> hackRunnable = new ArrayList<Runnable>();
       hackRunnable.put(updater);
      
       Button.setOnClickListener(new View.OnClickListener() {
      
          public void onClick(View v) {
                 handler.postDelayed(hackRunnable.get(0), 2000);
          }
       }
      

      【讨论】:

      • 25 毫秒 - 每次运行......这是 40 个变量持续一秒......如果用户没有癫痫发作......该应用程序将 XD 我确实尝试过,但它有点太对我的应用来说很重 :-)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-10
      • 1970-01-01
      • 2013-08-12
      • 1970-01-01
      • 2011-05-04
      • 1970-01-01
      • 2016-07-25
      相关资源
      最近更新 更多