4

所以我有调整系统亮度的代码,并且我已经正确实现了搜索栏,但是当我调整搜索栏时,屏幕亮度不会改变。我查看了其他一些帖子,解决方案似乎是创建一个可以快速打开和关闭的 Dummy 类。如果我这样做,那么我觉得会有很多延迟,因为随着搜索栏的移动,屏幕会不断刷新。

 @Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
    ContentResolver cr = getContentResolver();
    try{
    int brightness = Settings.System.getInt(cr,Settings.System.SCREEN_BRIGHTNESS);
    Settings.System.putInt(cr, Settings.System.SCREEN_BRIGHTNESS, brightness);
    WindowManager.LayoutParams lp = getWindow().getAttributes();
    lp.screenBrightness = brightness / 255.0f;
    getWindow().setAttributes(lp);

    }
    catch (Settings.SettingNotFoundException a)
    {

    }
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
    //Toast.makeText(MainActivity.this, "Started Tracking Seekbar", Toast.LENGTH_SHORT).show();
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {

}

刷新的另一个问题是,我在有相机预览的屏幕中运行此亮度控制,并且每次加载虚拟屏幕时都会杀死相机需要一些时间并进一步增加延迟

我确实看到了这篇文章,但我不知道如何实现它。因为我没有使用偏好

我的偏好中有一个搜索栏来更新屏幕亮度。有没有办法刷新 UI 以查看实时变化?

4

2 回答 2

3

我用下面的代码解决了这个问题,它现在可以按预期工作了!

@Override
public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {
    // TODO Auto-generated method stub
    BackLightValue = (float)arg1/100;

    WindowManager.LayoutParams layoutParams = getWindow().getAttributes();
    layoutParams.screenBrightness = BackLightValue;
    getWindow().setAttributes(layoutParams);
}
@Override
public void onStartTrackingTouch(SeekBar arg0) {
}
@Override
public void onStopTrackingTouch(SeekBar arg0) {

    int SysBackLightValue = (int)(BackLightValue * 255);
    android.provider.Settings.System.putInt(getContentResolver(),
            android.provider.Settings.System.SCREEN_BRIGHTNESS,
            SysBackLightValue);
    }
于 2013-06-10T21:41:55.587 回答
3

使用我的以下代码完美运行:

在您的任何 xml 文件中:

  <SeekBar
            android:id="@+id/seekBar1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_weight="1"
            android:background="?android:attr/selectableItemBackground"
            android:max="10"
            android:progressDrawable="@drawable/progress"
            android:scaleType="fitCenter"
            android:thumb="@drawable/thumb" />

注意:在搜索栏中尽可能多地获取属性。

在您的任何活动中使用以下方法并调用它:

   private void setSeekbar()
   {
       seekBar = (SeekBar) findViewById(R.id.seekBar1);
        seekBar.setMax(255);
       float curBrightnessValue = 0;

       try {
                curBrightnessValue = android.provider.Settings.System.getInt(
                getContentResolver(),
                android.provider.Settings.System.SCREEN_BRIGHTNESS);
           } catch (SettingNotFoundException e) {
           e.printStackTrace();
           }

    int screen_brightness = (int) curBrightnessValue;
    seekBar.setProgress(screen_brightness);
    seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
    int progress = 0;

        @Override
        public void onProgressChanged(SeekBar seekBar, int progresValue,
                boolean fromUser) {
            progress = progresValue;

        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            android.provider.Settings.System.putInt(getContentResolver(),
                    android.provider.Settings.System.SCREEN_BRIGHTNESS,
                    progress);
        }
    });
  }
于 2014-09-18T09:20:45.847 回答