Filtro de pantalla de brillo

¿Alguien tiene una idea de cómo implementar un filtro de pantalla de brillo como el de aquí:

Http://www.appbrain.com/app/screen-filter/com.haxor

Necesito un punto de partida y no puedo averiguar cómo hacerlo.

Basta con hacer una actividad de pantalla completa transparente que permite a los toques pasar a través. Para hacer que los toques pasen, utilice los siguientes indicadores de ventana antes de configurar el contenido:

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Window window = getWindow(); // Let touches go through to apps/activities underneath. window.addFlags(FLAG_NOT_TOUCHABLE); // Now set up content view setContentView(R.layout.main); } 

Para su archivo de diseño main.xml sólo tiene que utilizar una pantalla completa LinearLayout con un fondo transparente:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/background" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#33000000"> </LinearLayout> 

A continuación, para ajustar el "brillo" sólo cambiar el valor del color de fondo de su código en alguna parte:

 findViewById(R.id.background).setBackgroundColor(0x66000000); 
  • Obtener una instancia de WindowManager.

    WindowManager windowManager = (WindowManager) Class.forName("android.view.WindowManagerImpl").getMethod("getDefault", new Class[0]).invoke(null, new Object[0]);

  • Crear un diseño de pantalla completa xml (parámetros de diseño establecidos en fill_parent )

  • Configure su vista como no se puede hacer clic, no se puede enfocar, no se puede hacer clic largo, etc. para que el toque se pase a través de su aplicación y la aplicación pueda detectarla.

    view.setFocusable(false);
    view.setClickable(false);
    view.setKeepScreenOn(false);
    view.setLongClickable(false);
    view.setFocusableInTouchMode(false);

  • Cree un parámetro de diseño del tipo android.view.WindowManager.LayoutParams . LayoutParams layoutParams = new LayoutParams();

  • Establecer parámetro de diseño como altura, ancho, etc

     layoutParams.height = LayoutParams.FILL_PARENT; layoutParams.width = LayoutParams.FILL_PARENT; layoutParams.flags = 280; // You can try LayoutParams.FLAG_FULLSCREEN too layoutParams.format = PixelFormat.TRANSLUCENT; // You can try different formats layoutParams.windowAnimations = android.R.style.Animation_Toast; // You can use only animations that the system to can access layoutParams.type = LayoutParams.TYPE_SYSTEM_OVERLAY; layoutParams.gravity = Gravity.BOTTOM; layoutParams.x = 0; layoutParams.y = 0; layoutParams.verticalWeight = 1.0F; layoutParams.horizontalWeight = 1.0F; layoutParams.verticalMargin = 0.0F; layoutParams.horizontalMargin = 0.0F; 
  • Paso clave: Puede definir el porcentaje de brillo que necesita. layoutParams.setBackgroundDrawable(getBackgroundDrawable(i));

     private Drawable getBackgroundDrawable(int i) { int j = 255 - (int) Math.round(255D * Math.exp(4D * ((double) i / 100D) - 4D)); return new ColorDrawable(Color.argb(j, 0, 0, 0));} 
  • Finalmente agregue vista a windowManager que creó anteriormente.

    windowManager.addView(view, layoutParams);

Nota: Necesita el permiso SYSTEM_ALERT_WINDOW para colocar una superposición en la pantalla.

 <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> 

Han probado esto y funciona. Avísame si te quedas atascado.

Por supuesto que no se puede usar este es el código de producción, pero si usted está jugando .. pruebe este hack indocumentado

Usa :

 private void setBrightness(int brightness) { try { IHardwareService hardware = IHardwareService.Stub.asInterface( ServiceManager.getService("hardware")); if (hardware != null) { hardware.setScreenBacklight(brightness); } } catch (RemoteException doe) { } } 

Recuerde que utiliza este permiso:

  <uses-permission android:name="android.permission.HARDWARE_TEST"/> 

También puedes probar esto:

 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.max_bright); WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.screenBrightness = 100 / 100.0f; getWindow().setAttributes(lp); } 
  • Cambio del brillo de la pantalla mediante programación (como con el widget de energía)
  • Tipo de pantalla / brillo de Android
  • Android: ¿Ajusta la pantalla cuando aparece el teclado?
  • Activar y desactivar la pantalla mediante programación en android
  • ¿Cuándo Android toma su reciente captura de pantalla del selector de aplicaciones?
  • Android, ¿Cómo puedo hacer que AVD sea más pequeño?
  • Método correcto para setKeepScreenOn / FLAG_KEEP_SCREEN_ON
  • ¿Cómo puedo bloquear el diseño de mi programa Android a una orientación
  • Descripción de la densidad de la pantalla Samsung Galaxy Tab
  • ¿Desplazamiento del papel tapiz para el API nivel 3?
  • Mostrar imagen de aplicación personalizada en el administrador de tareas de ICS o JB
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.