Here is what I think might work:
You will need the following values:
Red, Green, Blue, Alpha and Contrast (r, g, b, a, c)
Save them in preference after using the sliders:
private SharedPreferences pref; //In onCreate.. this.pref = getSharedPreferences("pref", 0); //Method to save the values in Preferences private void save() { SharedPreferences.Editor localEditor = this.pref.edit(); localEditor.putInt("a", this.a); localEditor.putInt("r", this.r); localEditor.putInt("g", this.g); localEditor.putInt("b", this.b); localEditor.putInt("c", this.c); localEditor.commit(); }
Define a layer class that extends the view and is used to draw applied values ββon the canvas.
import android.view.View; import android.graphics.Canvas; import android.content.Context; public class Layer extends View { private int a; private int b; private int g; private int r; public Layer(Context context){ super(context) } protected void onDraw(Canvas canvas){ super.onDraw(canvas); canvas.drawARGB(this.a, this.r, this.g, this.b); } public void setColor(int a, int r, int g, int b){ this.a = a; this.r = r; this.g = g; this.b = b; invalidate(); } }
Then write a service that should handle changes to these values ββand apply them to windows.
public class ScreenAdjustService extends Service {
// Declare views for applying values ββthat are stored in Prefs private static view of the layer; ... public static int r; public static int b; public static int g; public static int a; public static int c;
In the onCreate method
Get the values ββpreviously saved in the settings,
SharedPreferences localSharedPreferences = getSharedPreferences("pref", 0); a = localSharedPreferences.getInt("a", 0); r = localSharedPreferences.getInt("r", 0); g = localSharedPreferences.getInt("g", 0); b = localSharedPreferences.getInt("b", 0); c = localSharedPreferences.getInt("c", 0);
set views to set the resulting values,
view = new Layer(this); redView = new Layer(this); ...
Add these views to the window.
//Pass the necessary values for localLayoutParams WindowManager.LayoutParams localLayoutParams = new WindowManager.LayoutParams(...); WindowManager localWindowManager = (WindowManager)getSystemService("window"); localWindowManager.addView(view, localLayoutParams); localWindowManager.addView(redView, localLayoutParams); localWindowManager.addView(greenView, localLayoutParams);
Write reusable methods
public static void setAlpha(int alpha){
Call these methods where necessary using the service class.
ScreenAdjustService.setRGB(MyActivity.this.r, MyActivity.this.g, MyActivity.this.b); ScreenAdjustService.setAlpha(MyActivity.this.a); ScreenAdjustService.setContrast(MyActivity.this.c);
Remember to declare your service in the manifest XML file
<service android:name=".ScreenAdjustService " />
Maybe I missed something because I did it on the fly, but I think it should do it.