Яркость экрана фильтра - PullRequest
       11

Яркость экрана фильтра

16 голосов
/ 26 ноября 2010

Кто-нибудь знает, как реализовать фильтр яркости экрана, как здесь:

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

Мне нужна отправная точка, и я не могу понять, как это сделать.

Ответы [ 4 ]

8 голосов
/ 26 ноября 2010

Просто сделайте прозрачное полноэкранное действие, которое позволит прикосновениям проходить. Чтобы касания проходили, используйте следующие флажки окна перед настройкой 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);
}

Для вашего файла макета main.xml просто используйте полноэкранный LinearLayout с прозрачным фоном:

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

Затем, чтобы настроить «яркость», просто измените значение цвета фона из своего кода где-то:

findViewById(R.id.background).setBackgroundColor(0x66000000);
4 голосов
/ 16 апреля 2013
  • Получение экземпляра WindowManager.

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

  • Создание полноэкранного макета XML (параметры макета установлены на fill_parent)

  • Установите свой вид, чтобы на него не нажимали, не фокусировали, не нажимали долго и т. Д., Чтобы касание передавалось в ваше приложение и приложение могло его обнаружить.

    view.setFocusable(false);<br> view.setClickable(false);<br> view.setKeepScreenOn(false);<br> view.setLongClickable(false);<br> view.setFocusableInTouchMode(false);

  • Создать параметр макета типа android.view.WindowManager.LayoutParams.LayoutParams layoutParams = new LayoutParams();

  • Установка параметров макета, таких как высота, ширина и т. Д.

    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;
    
  • Ключевой шаг: вы можете указать, какой процент яркости вам нужен,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));}
    
  • Наконец добавьте представление в созданный ранее WindowManager.

    windowManager.addView(view, layoutParams);

Примечание: Вам нужно SYSTEM_ALERT_WINDOW разрешение на наложение оверлея на экран.

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

Протестировал это, и оно работает.Дайте мне знать, если вы застряли.

1 голос
/ 09 декабря 2010

Конечно, вы не можете использовать это рабочий код, но если вы играете вокруг ... попробуйте это Недокументированный взлом

Используется:

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

Помните, что он использует это разрешение:

 <uses-permission android:name="android.permission.HARDWARE_TEST"/>
0 голосов
/ 30 ноября 2010

Вы можете попробовать это также:

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

    }
...