【问题标题】:How do I pass the value of an array to another class?如何将数组的值传递给另一个类?
【发布时间】:2015-07-24 00:55:00
【问题描述】:

我正在尝试将另一个类中的颜色数组值传递给 Android Studio 中的 FunFactsActivity。现在,我收到一个错误
setBackgroundColor(int) in View cannot be applied to (java.lang.String). relativeLayout.setBackgroundColor(mColorWheel.mColors[currentColor]);

据我了解,我无法将 int 传递给它,因为它是一个字符串,但我只是想让我在该数组中已经拥有的颜色每隔几秒/间隔淡化到 relativeLayout 背景中一个线程,无法正确处理。我做错了什么?

FunFactsActivity.java

// update background color of relativeLayout every few seconds.
private void updateColor()
{
    final RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.relativeLayout);
    int color = mColorWheel.getColor();
    runOnUiThread(new Runnable()
    {

        @Override
        public void run()
        {

            if (currentColor > mColorWheel.mColors.length - 1)
            {
                currentColor = 0;

            }
            relativeLayout.setBackgroundColor(mColorWheel.mColors[currentColor]);

            currentColor++;

        }// end of run
    });

}

ColorWheel.java

public class ColorWheel {

    // Member variable (properties about the object)
    public String[] mColors = {
            "#39add1",
            "#3079ab",
            "#c25975",
            "#e15258",
            "#f9845b",
            "#838cc7",
            "#7d669e",
            "#53bbb4",
            "#e0ab18",
            "#637a91",
            "#f092b0",
            "#b7c0c7",
            "#FAEBD7",
            "#00FFFF",
            "#7FFFD4",
            "#0000FF",
            "#8A2BE2",
            "#A52A2A",
            "#DEB887",
            "#5F9EA0",
            "#7FFF00",
            "#D2691E",
            "#6495ED",
            "#DC143C",
            "#B8860B",
            "#A9A9A9",
            "#006400",
            "#FF8C00",
            "#8B0000",
            "#FFD700",
            "#FF69B4",
            "#4B0082",
            "#F08080",
            "#90EE90",
            "#87CEFA",
            "#FF4500",
            "#DA70D6",
            "#FA8072",
            "#9ACD32",
            "#00FF7F",
            "#4682B4",
    };

    // Method (abilities: things the object can do)
    public int getColor(){

        String color = "";
        // Randomly select a fact
        Random randomGenerator = new Random(); // Construct a new Random number generator
        int randomNumber = randomGenerator.nextInt(mColors.length);

        color = mColors[randomNumber];
        int colorAsInt = Color.parseColor(color);

        return colorAsInt;
    }
}

【问题讨论】:

  • 在 FunFactsActivity.java 上简单地创建一个 ColorWheel 类的对象。像ColorWheel cw = new ColorWheel() 和像cw.mColors[i]; 一样访问数组
  • 为什么不把mColors的字符串数组改成int数组。例如,#39add1 将变为 0x39add1,等等。
  • 试试relativeLayout.setBackgroundColor(Color.parseColor(mColorWheel.mColors[currentColor]));
  • @Universe 我得到的变量 'mColors' 来自内部类,需要声明为 final。
  • @DanielNugent 试过了,说无法解决。

标签: java android arrays android-studio


【解决方案1】:

您的ColorWheel 类已经在getColor 函数中调用Color.parseColor。 只需使用该功能,因为它已经获得了随机颜色。

relativeLayout.setBackgroundColor(mColorWheel.getColor());

或者如果你想使用 mColors 数组:

relativeLayout.setBackgroundColor(Color.parseColor(mColorWheel.mColors[currentColor]));

【讨论】:

    【解决方案2】:

    没有看完整个代码,但是在Android中设置颜色时,你要么:

    • 提供一个int,它是对颜色ID的引用,例如:R.color.my_red
    • 提供Color 对象。在您的情况下,如果您想将十六进制值转换为 Color,请致电 Color.parseColor("#000000")

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-24
      • 2018-12-18
      • 2017-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多