动态设置视图上的背景颜色

时间:2014-09-28 20:47:32

标签: android

我试图重构一些使用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);
}
 }

1 个答案:

答案 0 :(得分:1)

您目前只在setupColorView()调用onCreate时设置背景颜色。

在每个onValueChange的{​​{1}}方法中,您调用了一个NumberPickers方法,它只是将值保存到类级别变量中,但之后您没有做任何事情用它。
在对这些变量之一进行任何更改后,您应该将新值应用于后台。

例如:

setXxx