2010-11-26 5 views
14

Quelqu'un at-il une idée de comment mettre en œuvre un filtre de luminosité de l'écran comme celui ici:Filtre écran Luminosité

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

je besoin d'un point de départ et je ne peux pas comprendre comment le faire.

+0

J'ai rencontré le même problème. J'ai également posté cette question http://stackoverflow.com/questions/2222146/control-screen-brightness-in-android-using-background-service. J'ai été capable de résoudre le problème. U peut voir la bonne méthode dans le post. –

+0

essayez ce lien, il peut vous aider un peu: http://android-er.blogspot.com/2011/02/change-android-screen-brightness.html –

Répondre

8

Faites simplement une activité en plein écran transparente qui laisse passer les contacts. Pour faire des touches passent par l'utilisation des drapeaux de la fenêtre ci-dessous avant de l'contentView:

@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); 
} 

Pour votre fichier de mise en page main.xml il suffit d'utiliser un LinearLayout plein écran avec un fond transparent:

<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> 

ensuite ajuster juste changer « luminosité » la valeur de la couleur de fond de votre code quelque part:

findViewById(R.id.background).setBackgroundColor(0x66000000); 
+0

Merci, cela fonctionne lié à la mise en transparence, mais le toucher les événements semblent fonctionner bizarrement, je peux faire défiler mais quand je clique une icône de programme semble comme elle geler (pas tout à fait geler, mais n'ouvrant pas les programmes) – Alex

+0

D'autres idées? Je ne pense pas qu'avoir une activité transparente sur le dessus est le solution – Alex

+0

Quelqu'un s'il vous plaît :)? – Alex

0

ca vous essayez cela aussi:

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); 

    } 
1

Bien sûr, vous ne pouvez pas utiliser c'est le code de production, mais si vous jouez autour .. essayez ce Undocumented hack

Il utilise:

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

Rappelez-vous qu'il utilise cette autorisation:

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

où puis-je trouver hardware09.jar? pour ce [tutoriel (http://www.tutorialforandroid.com/2009/01/changing-screen-brightness.html) – noobProgrammer

+0

effectivement ce lien est brisé ... – Device

4
  • Obtenez une instance de WindowManager.

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

  • Créer un xml de mise en page en mode plein écran (paramètres de mise en page définis à fill_parent)

  • Définir votre point de vue non cliquable, non focalisable, peu de temps cliquables, etc. afin que le toucher est passé à travers la votre application et l'application peuvent le détecter.

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

  • Créer un paramètre de mise en page de type android.view.WindowManager.LayoutParams. LayoutParams layoutParams = new LayoutParams();

  • Régler les paramètres de mise en page comme hauteur, largeur 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; 
    
  • étape clé: Vous pouvez définir quel est le pourcentage de luminosité dont vous avez besoin. 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));} 
    
  • ajouter Enfin vue de WINDOWMANAGER que vous avez créé plus tôt.

    windowManager.addView(view, layoutParams);

Note: Vous avez besoin SYSTEM_ALERT_WINDOW la permission de déposer une superposition sur l'écran.

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

Avez-vous testé cela et cela fonctionne. Faites-moi savoir si vous êtes coincé.

+0

s'il vous plaît pouvez-vous poster une réponse complète à cette [question] (http://stackoverflow.com/questions/22748031/create-a-simple-screen-filter) L'utilisation d'exemples sera très appréciée – noobProgrammer

Questions connexes