在Android中使用链接哈希映射和数组作为值

时间:2016-05-27 09:05:12

标签: java android linkedhashmap

我目前的任务是根据搜索栏更改为多个线性布局设置背景颜色。我尝试将链接HashMap中的布局存储为键,并使用带有rgb整数的数组作为其值。我还使用随机类来设置默认的rgb值。

我一直在考虑选择什么结构,并决定使用链接哈希映射来轻松访问onStopTrackingTouch方法中的rgb值,并在搜索栏移动后将其从默认值更改。

但似乎我朝着错误的方向前进。我遇到了很多类型,这段代码不起作用,但这不是主要问题。我真正怀疑的是这个结构对我有用。有什么方法可以简化它吗?

public class MainActivity extends AppCompatActivity implements SeekBar.OnSeekBarChangeListener {

private LinearLayout mTopLeftLayout;
private LinearLayout mBottomLeftLayout;

private LinearLayout mTopRigthLayout;
private LinearLayout mMiddleRightLayout;
private LinearLayout mBottomRightLayout;

LinkedHashMap<View, ArrayList<Integer[]>> colorMap = new LinkedHashMap<View, ArrayList<Integer[]>>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final SeekBar seekBar = (SeekBar)findViewById(R.id.seekBar);
    seekBar.setOnSeekBarChangeListener(this);

    mTopLeftLayout = (LinearLayout)findViewById(R.id.topLeftLayout);

    mBottomLeftLayout = (LinearLayout)findViewById(R.id.bottomLeftLayout);
    colorMap.put(mBottomLeftLayout, null);

    mTopRigthLayout = (LinearLayout)findViewById(R.id.topRigthLayout);
    colorMap.put(mTopRigthLayout, null);

    mBottomRightLayout = (LinearLayout)findViewById(R.id.bottomRightLayout);
    colorMap.put(mBottomLeftLayout, null);

    setRandomBackground();

}

private void setRandomBackground(){

    Random rnd = new Random();

    for (Map.Entry<View, ArrayList<Integer[]>> color: colorMap.entrySet()){

        ArrayList<Integer[]> value = color.getValue();

        for (int i=0;i<3; i++) {
            value.add(rnd.nextInt(256));

        }

        int backgroundColor = Color.rgb(value[1], value[2], value[3]);
        color.setBackgroundColor(color);

    }

}

//seekBar methods goes here

}

1 个答案:

答案 0 :(得分:0)

我认为你正在使用如此复杂的方法,当我们根据我对你的查询的理解有简单和简短的方法时,请找到以下解决方案。

首先将随机变量声明为全局,如下所示,

  Random rnd;

现在,在onCreate()方法中初始化它,如下所示,

 rnd = new Random();

现在检查设置颜色的主要方法

   private void setRandomBackground(){
         mTopLeftLayout.setBackgroundColor(Color.rgb(rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256));  

         mBottomLeftLayout.setBackgroundColor(Color.rgb(rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256));     

         mTopRigthLayout.setBackgroundColor(Color.rgb(rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256));

   }

因此,通过这种方式,您可以轻松地按照随机生成​​器设置背景颜色,因为我们已将其声明为全局,因此通常也不会生成重复值。