Android開發之調節螢幕亮度

來源:互聯網
上載者:User

標籤:android   螢幕亮度調節   windowmanager.layout   

在播放器中,我們常常可以看到這麼一個設計,就是使用者通過在螢幕的某個部分上下滑動就可以調節螢幕的亮度,在某個部分上下滑動就可以調節播放的音量。而左右滑動就可以調節播放的進度。

今天,我要說一下亮度的調節。其實主要是通過設定View的屬性實現的。

  public void onLightChange(float delta, int distance, Window window) {        WindowManager.LayoutParams params = window.getAttributes();        mCurrentDeltaBrintness = mCurrentDeltaBrintness + delta;        if (params.screenBrightness == WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE) {            params.screenBrightness = getScreenBrightness(getContext());        }        if (Math.abs(mCurrentDeltaBrintness) >= mScrolledPixPerBringhtness) {            float deltaBrightness = mCurrentDeltaBrintness / (mScrolledPixPerBringhtness * MAX_BRINTNESS);            params.screenBrightness = params.screenBrightness + deltaBrightness;<pre name="code" class="java">    private void performLightChange(float brightness) {        int resId = R.drawable.light_0;        if (brightness <= 0.01f) {            resId = R.drawable.light_0;        } else if (brightness <= 0.25f) {            resId = R.drawable.light_25;        } else if (brightness <= 0.5f) {            resId = R.drawable.light_50;        } else if (brightness < 1.0f) {            resId = R.drawable.light_75;        } else {            resId = R.drawable.light_100;        }        updateViews(resId, (int) (brightness * 100));    }

if (params.screenBrightness <= 0.01f) { params.screenBrightness = 0.01f; } window.setAttributes(params); mCurrentDeltaBrintness = 0; } performLightChange(params.screenBrightness); }

上述代碼就是在左邊部分上下滑動的時候會被調用。

另附performLigthChange的代碼。

    private void performLightChange(float brightness) {        int resId = R.drawable.light_0;        if (brightness <= 0.01f) {            resId = R.drawable.light_0;        } else if (brightness <= 0.25f) {            resId = R.drawable.light_25;        } else if (brightness <= 0.5f) {            resId = R.drawable.light_50;        } else if (brightness < 1.0f) {            resId = R.drawable.light_75;        } else {            resId = R.drawable.light_100;        }        updateViews(resId, (int) (brightness * 100));    }

我們在舉一個相對好切入的例子。

複製代碼 1 package android.lekko.tools; 2  3 import android.app.Activity; 4 import android.content.ContentResolver; 5 import android.provider.Settings; 6 import android.provider.Settings.System; 7 import android.view.WindowManager; 8 import android.widget.Toast; 9 10 public class LightnessControl {11     // 判斷是否開啟了自動亮度調節 12     public static boolean isAutoBrightness(Activity act) { 13         boolean automicBrightness = false; 14         ContentResolver aContentResolver = act.getContentResolver();15         try { 16             automicBrightness = Settings.System.getInt(aContentResolver, 17                    Settings.System.SCREEN_BRIGHTNESS_MODE) == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC; 18         } catch (Exception e) { 19             Toast.makeText(act,"無法擷取亮度",Toast.LENGTH_SHORT).show();20         } 21         return automicBrightness; 22     }     23     // 改變亮度24     public static void SetLightness(Activity act,int value)25     {        26         try {27             System.putInt(act.getContentResolver(),System.SCREEN_BRIGHTNESS,value); 28             WindowManager.LayoutParams lp = act.getWindow().getAttributes(); 29             lp.screenBrightness = (value<=0?1:value) / 255f;30             act.getWindow().setAttributes(lp);31         } catch (Exception e) {32             Toast.makeText(act,"無法改變亮度",Toast.LENGTH_SHORT).show();33         }        34     }35     // 擷取亮度36     public static int GetLightness(Activity act)37     {38         return System.getInt(act.getContentResolver(),System.SCREEN_BRIGHTNESS,-1);39     }40     // 停止自動亮度調節 41     public static void stopAutoBrightness(Activity activity) { 42         Settings.System.putInt(activity.getContentResolver(), 43                 Settings.System.SCREEN_BRIGHTNESS_MODE, 44                 Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL); 45     }46     // 開啟亮度自動調節 47     public static void startAutoBrightness(Activity activity) { 48         Settings.System.putInt(activity.getContentResolver(), 49                 Settings.System.SCREEN_BRIGHTNESS_MODE, 50                 Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC); 51     } 52 }複製代碼  這是一個單獨可工作的類,主要用於調節螢幕亮度,有部分注釋了,解釋幾個概念,不標準,供參考:  ContentResolver類,為訪問其它應用程式的對外共用資料提供方法,如上面擷取、設定亮度時使用的System.getInt(),System.setInt()。  Activity類,android程式的主要類,一個介面必有此類提供後台支援,需要繼承此類。  Settings類,android程式系統相關的設定類,各種設定都可在此找。  LayoutParams類,android介面相關的參數,如高度、寬度、亮度等。  Toast類,一個可自動消失的提示框,輕型控制項。


好,螢幕的亮度調節就到這裡,很簡單的。






Android開發之調節螢幕亮度

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.