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
- ¿Cómo obtener el tamaño visible en una actividad?
- Android: Cómo manejar el tamaño de las imágenes para varias pantallas
- Cambiar el brillo del sistema mediante programación
- Sólo en la aplicación Android
- Cómo activar la pantalla durante el bloqueo parcial de la vigilia
Necesito un punto de partida y no puedo averiguar cómo hacerlo.
- ¿Cómo compartir programaticamente la pantalla del dispositivo Android con otra vía wifi? (No captura de pantalla)
- Viewflipper Receptor no registró error mientras cambio de orientación en 2.1 y 2.2
- Juego de Android lista de cajones de navegación para abrir la mitad exacta de la pantalla para todas las pantallas del dispositivo
- Tamaño de pantalla Android HDPI, LDPI, MDPI
- Android: deshabilita las rotaciones de 90 °, pero permite rotaciones de 180 °
- Forzar el modo de orientación "retrato"
- ¿Diferentes diseños para diferentes tamaños de pantalla en Android?
- Establecer pantalla completa enCrear
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); }
- No se puede crear una carpeta en el almacenamiento externo en android
- SharedUserId: seguro para cambiar cuando la aplicación ya está en el mercado?