我试图重构一些使用Android Color类而不是我自己的自定义Color类设置View背景颜色的代码。一切似乎都加载并运行在活动上确定,但是当我更改微调器的值时,视图的背景颜色不会改变。我错过了什么?
package com.example.android.colorpickerii;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.NumberPicker;
import android.graphics.Color;
public class ColorPickerActivity extends Activity {
static final int MIN_VAL = 0;
static final int MAX_VAL = 255;
View colorView;
int alpha = 255, red = 164, green = 199, blue = 57;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_color_picker);
setupAlphaPicker();
setupRedPicker();
setupGreenPicker();
setupBluePicker();
setupColorView();
}
private void setupColorView() {
colorView = findViewById(R.id.color_box);
colorView.setBackgroundColor(Color.argb(getAlpha(),
getRed(),
getGreen(),
getBlue()));
}
private void setupBluePicker() {
NumberPicker bluePicker;
bluePicker = (NumberPicker) findViewById(R.id.bluePicker);
bluePicker.setMinValue(MIN_VAL);
bluePicker.setMaxValue(MAX_VAL);
bluePicker.setValue(57);
bluePicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
@Override
public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
setBlue(newVal);
}
});
}
private void setupGreenPicker() {
NumberPicker greenPicker;
greenPicker = (NumberPicker) findViewById(R.id.greenPicker);
greenPicker.setMinValue(MIN_VAL);
greenPicker.setMaxValue(MAX_VAL);
greenPicker.setValue(199);
greenPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
@Override
public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
setGreen(newVal);
}
});
}
private void setupRedPicker() {
NumberPicker redPicker;
redPicker = (NumberPicker) findViewById(R.id.redPicker);
redPicker.setMinValue(MIN_VAL);
redPicker.setMaxValue(MAX_VAL);
redPicker.setValue(164);
redPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
@Override
public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
setRed(newVal);
}
});
}
private void setupAlphaPicker() {
NumberPicker alphaPicker;
alphaPicker = (NumberPicker) findViewById(R.id.alphaPicker);
alphaPicker.setMinValue(MIN_VAL);
alphaPicker.setMaxValue(MAX_VAL);
alphaPicker.setValue(255);
alphaPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
@Override
public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
setAlpha(newVal);
}
});
}
private void setAlpha(int newVal) { this.alpha = newVal; }
private void setRed(int newVal) { this.red = newVal; }
private void setGreen(int newVal) { this.green = newVal; }
private void setBlue(int newVal) { this.blue = newVal; }
private int getAlpha() { return this.alpha; }
private int getRed() { return this.red; }
private int getGreen() { return this.green; }
private int getBlue() { return this.blue; }
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
答案 0 :(得分:1)
您目前只在setupColorView()
调用onCreate
时设置背景颜色。
在每个onValueChange
的{{1}}方法中,您调用了一个NumberPickers
方法,它只是将值保存到类级别变量中,但之后您没有做任何事情用它。
在对这些变量之一进行任何更改后,您应该将新值应用于后台。
例如:
setXxx