【问题标题】:How to decrease brightness like screen filter如何像屏幕过滤器一样降低亮度
【发布时间】:2026-02-23 16:55:01
【问题描述】:

我一直在尝试创建一个这样的简单应用程序,但我失败了。 基于这个answer我该怎么办?我使用的代码:

MainActivity.java

public class MainActivity extends Activity  { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main);
        SeekBar fseekbar = (SeekBar) findViewById(R.id.fseekBar2);
        fseekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener(){

    @Override
    public void onProgressChanged(SeekBar seekBar, int progress,
        boolean fromUser) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {
        // TODO Auto-generated method stub
    }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
        // TODO Auto-generated method stub
    }
}

我的相对Layout.xml

<LinearLayout
        android:id="@+id/linear"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

  <SeekBar
        android:id="@+id/fseekBar2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        />

</LinearLayout>

问题是我无法创建窗口管理器并将亮度值设置为 layoutParams。

【问题讨论】:

    标签: android filter brightness screen-brightness android-seekbar


    【解决方案1】:

    试试这个...

    MainActivity.java

    public class MainActivity extends Activity {
    private SeekBar brightbar;
    
    //Variable to store brightness value
    private int brightness;
    //Content resolver used as a handle to the system's settings
    private ContentResolver cResolver;
    //Window object, that will store a reference to the current window
    private Window window;
    
    TextView txtPerc;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    
        //Instantiate seekbar object
        brightbar = (SeekBar) findViewById(R.id.brightbar);
    
        txtPerc = (TextView) findViewById(R.id.txtPercentage);
    
        //Get the content resolver
        cResolver = getContentResolver();
    
        //Get the current window
        window = getWindow();
    
        //Set the seekbar range between 0 and 255
        brightbar.setMax(255);
        //Set the seek bar progress to 1
        brightbar.setKeyProgressIncrement(1);
    
        try
        {
            //Get the current system brightness
            brightness = System.getInt(cResolver, System.SCREEN_BRIGHTNESS);
        }
        catch (SettingNotFoundException e)
        {
            //Throw an error case it couldn't be retrieved
            Log.e("Error", "Cannot access system brightness");
            e.printStackTrace();
        }
    
        //Set the progress of the seek bar based on the system's brightness
        brightbar.setProgress(brightness);
    
        //Register OnSeekBarChangeListener, so it can actually change values
        brightbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener()
        {
            public void onStopTrackingTouch(SeekBar seekBar)
            {
                //Set the system brightness using the brightness variable value
                System.putInt(cResolver, System.SCREEN_BRIGHTNESS, brightness);
                //Get the current window attributes
                LayoutParams layoutpars = window.getAttributes();
                //Set the brightness of this window
                layoutpars.screenBrightness = brightness / (float)255;
                //Apply attribute changes to this window
                window.setAttributes(layoutpars);
            }
    
            public void onStartTrackingTouch(SeekBar seekBar)
            {
                //Nothing handled here
            }
    
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
            {
                //Set the minimal brightness level
                //if seek bar is 20 or any value below
                if(progress<=20)
                {
                    //Set the brightness to 20
                    brightness=20;
                }
                else //brightness is greater than 20
                {
                    //Set brightness variable based on the progress bar
                    brightness = progress;
                }
                //Calculate the brightness percentage
                float perc = (brightness /(float)255)*100;
                //Set the brightness percentage
                txtPerc.setText((int)perc +" %");
            }
        });   
    }
    }
    

    main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Slide the bar to change the brightness:"
        android:id="@+id/txtPercentage" />
    
    <SeekBar
        android:id="@+id/brightbar"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="30dip"
        android:layout_marginRight="30dip" >
    </SeekBar>
    
    </LinearLayout>
    

    编码愉快...

    【讨论】:

    • 请在您的清单中设置此权限
    最近更新 更多