Я пытаюсь сделать приложение для Android, которое управляет его экраном (его цвета, если быть конкретным). У меня есть эти две следующих классы:Манипулирование цветами экрана Android RGB
static class ScreenAdjuster {
public static void setAlpha(Layer view, int alpha){
//Handle all conditions
view.setColor(alpha, 0, 0, 0);
}
public static void setContrast(Layer view, int contrast){
//Handle all conditions
view.setColor(contrast, 100, 100, 100);
}
public static void setColor(Layer redView, Layer greenView, Layer blueView, int r, int g, int b){
//Handle all conditions
redView.setColor(r, 255, 0, 0);
greenView.setColor(g, 0, 255, 0);
blueView.setColor(b, 0, 0, 255);
Log.d("display", "setting..." + r + " " + g + " " + b);
}
}
class Layer extends View
{
private int a;
private int b;
private int g;
private int r;
public Layer(Context context){
super(context);
}
@Override
protected void onDraw(Canvas canvas){
super.onDraw(canvas);
canvas.drawARGB(this.a, this.r, this.g, this.b);
Log.d("display", "rendering..");
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
int parentWidth = MeasureSpec.getSize(widthMeasureSpec);
int parentHeight = MeasureSpec.getSize(heightMeasureSpec);
this.setMeasuredDimension(parentWidth/2, parentHeight);
this.setLayoutParams(new ViewGroup.LayoutParams(parentWidth/2,parentHeight));
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
Log.d("display", "filling...");
}
public void setColor(int a, int r, int g, int b){
this.a = a;
this.r = r;
this.g = g;
this.b = b;
invalidate();
}
}
Я добавляю вид на менеджер в этой функции:
public void setColorsViews() {
if(!colorsFirstTime) {
view = new Layer(cordova.getActivity());
redView = new Layer(cordova.getActivity());
greenView = new Layer(cordova.getActivity());
blueView = new Layer(cordova.getActivity());
WindowManager localWindowManager = (WindowManager)cordova.getActivity().getSystemService("window");
WindowManager.LayoutParams layoutParams = cordova.getActivity().getWindow().getAttributes();
localWindowManager.addView(view, layoutParams);
localWindowManager.addView(greenView, layoutParams);
localWindowManager.addView(redView, layoutParams);
localWindowManager.addView(blueView, layoutParams);
colorsFirstTime = true;
Log.d("display", "views added");
}
}
(Это будет плагин для Кордовы, так что я получаю активность по cordova.getActivity()
It. работает с моими другими функциями, поэтому я полагаю, что он работает и здесь).
Я вызываю все это: ScreenAdjuster.setColor (redView, greenView, blueView, красный, зеленый, синий);
Но ... ничего не происходит. Все функции вызываются (onDraw()
, onMeasure()
, setColorsViews()
, но экран остается тем же
Что я делаю неправильно
Заранее спасибо
Вы можете использовать это решение в [this] (http://stackoverflow.com/a/7658364/2581872)? – hichris123
Это не про яркость (я использовал это решение, и оно работает). Речь идет о манипуляции цветами. – tomwesolowski
Я не уверен, что представление будет позиционироваться так, как вы ожидаете.Не могли бы вы попытаться просто проверить позиционирование вида, давая им цвет фона, чтобы понять, где они находятся? –