我目前的任务是根据搜索栏更改为多个线性布局设置背景颜色。我尝试将链接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
}
答案 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));
}
因此,通过这种方式,您可以轻松地按照随机生成器设置背景颜色,因为我们已将其声明为全局,因此通常也不会生成重复值。