【问题标题】:setting the background color on a view dynamically动态设置视图的背景颜色
【发布时间】:2014-09-28 20:47:32
【问题描述】:

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

【问题讨论】:

    标签: android


    【解决方案1】:

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

    在您的每个NumberPickersonValueChange 方法中,您调用您的setXxx 方法之一,该方法只是将值保存到类级别变量中,但是您并没有对它做任何事情。
    在对这些变量之一进行任何更改后,您应该将新值应用于背景。

    例如:

    ...
    private void setAlpha(int newValue) {
        this.alpha = newVal;
        setupColorView()
    }
    
    private void setRed(int newValue) {
        this.red = newVal;
        setupColorView()
    }
    
    private void setGreen(int newValue) {
        this.green = newVal;
        setupColorView()
    }
    
    private void setBlue(int newValue) {
        this.blue = newVal;
        setupColorView()
    }
    ...
    

    【讨论】:

      猜你喜欢
      • 2015-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-31
      • 2021-03-11
      • 2011-01-11
      • 2023-03-25
      • 1970-01-01
      相关资源
      最近更新 更多