Android调节屏幕亮暗度和音量
来源:互联网 发布:macbook必备软件 编辑:程序博客网 时间:2024/06/06 10:35
一.背景
做视频用到了就记录下,从github(https://github.com/curtis2/SuperVideoPlayer 谢谢)上扒了一个项目的手势调亮度和音量(但是有bug!!!就是调节音量感觉会突然消失),本文重点是如何调节音量
二.代码
package com.example.administrator.gesturetext;import android.content.Context;import android.media.AudioManager;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.view.Display;import android.view.GestureDetector;import android.view.MotionEvent;import android.view.View;import android.view.ViewGroup;import android.view.WindowManager;import android.widget.FrameLayout;import android.widget.ImageView;import android.widget.RelativeLayout;public class MainActivity extends AppCompatActivity { private FrameLayout mVolumeBrightnessLayout; private ImageView mOperationBg; private ImageView mOperationPercent; private GestureDetector mGestureDetector; private AudioManager mAudioManager; private int mMaxVolume; private int mVolume = -1; private float mBrightness = -1f; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); RelativeLayout rlContentContainer = (RelativeLayout) findViewById(R.id.rl_content_container); mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); mMaxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); mVolumeBrightnessLayout = (FrameLayout) findViewById(R.id.operation_volume_brightness); mOperationBg = (ImageView) findViewById(R.id.operation_bg); mOperationPercent = (ImageView) findViewById(R.id.operation_percent); mGestureDetector = new GestureDetector(MainActivity.this, new VolumeBrightnesGestureListener()); rlContentContainer.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { if (mGestureDetector.onTouchEvent(motionEvent)) { return true; } switch (motionEvent.getAction() & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN: break; case MotionEvent.ACTION_UP: endGesture(); break; } return true; } }); } private Handler mDismissHandler = new Handler() { @Override public void handleMessage(Message msg) { if (msg.what == 0) { mVolumeBrightnessLayout.setVisibility(View.GONE); } } }; private void endGesture() { mVolume = -1; mBrightness = -1f; // 隐藏 mDismissHandler.removeMessages(0); mDismissHandler.sendEmptyMessageDelayed(0, 500); } private class VolumeBrightnesGestureListener extends GestureDetector.SimpleOnGestureListener { @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { float mOldX = e1.getX(), mOldY = e1.getY(); int y = (int) e2.getRawY(); Display disp = getWindowManager().getDefaultDisplay(); int windowWidth = disp.getWidth(); int windowHeight = disp.getHeight(); //1440 2392 if (mOldX > windowWidth * 3.0 / 5) { onVolumeSlide((mOldY - y) / windowHeight); return true; } else if (mOldX < windowWidth *2.0/ 5.0) { onBrightnessSlide((mOldY - y) / windowHeight); return true; } return false; } } /** * 声音高低 * * @param percent */ private void onVolumeSlide(float percent) { if (mVolume == -1) { mVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC); if (mVolume < 0) mVolume = 0; mOperationBg.setImageResource(R.drawable.video_volumn_bg); mVolumeBrightnessLayout.setVisibility(View.VISIBLE); } int index = (int) (percent * mMaxVolume) + mVolume; if (index > mMaxVolume) index = mMaxVolume; else if (index < 0) index = 0; mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, index, 0); ViewGroup.LayoutParams lp = mOperationPercent.getLayoutParams(); lp.width = findViewById(R.id.operation_full).getLayoutParams().width * index / mMaxVolume; mOperationPercent.setLayoutParams(lp); } /** * 处理屏幕亮暗 * * @param percent */ private void onBrightnessSlide(float percent) { if (mBrightness < 0) { mBrightness = getWindow().getAttributes().screenBrightness; if (mBrightness <= 0.00f) mBrightness = 0.50f; if (mBrightness < 0.01f) mBrightness = 0.01f; mOperationBg.setImageResource(R.drawable.video_brightness_bg); mVolumeBrightnessLayout.setVisibility(View.VISIBLE); } WindowManager.LayoutParams lpa = getWindow().getAttributes(); lpa.screenBrightness = mBrightness + percent; if (lpa.screenBrightness > 1.0f) lpa.screenBrightness = 1.0f; else if (lpa.screenBrightness < 0.01f) lpa.screenBrightness = 0.01f; getWindow().setAttributes(lpa); ViewGroup.LayoutParams lp = mOperationPercent.getLayoutParams(); lp.width = (int) (findViewById(R.id.operation_full).getLayoutParams().width * lpa.screenBrightness); mOperationPercent.setLayoutParams(lp); }}
三.代码分析
(1)屏幕亮暗度
WindowManager.LayoutParams lpa = getWindow().getAttributes();lpa.screenBrightness = mBrightness + percent;if (lpa.screenBrightness > 1.0f) lpa.screenBrightness = 1.0f;else if (lpa.screenBrightness < 0.01f) lpa.screenBrightness = 0.01f;getWindow().setAttributes(lpa);注意!!!:如果要跟系统同步 需要写WRITTING_SETTING权限,Android6.0及以上需要写个intent手动设置,在清单文件中写没用的(这个太傻比了,估计没人会要这么做)
(2)音量
我们这里只设置了媒体音乐
mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE)mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, index, 0);
音量分很多种
public static final int STREAM_ALARM = 4;public static final int STREAM_DTMF = 8;public static final int STREAM_MUSIC = 3;public static final int STREAM_NOTIFICATION = 5;public static final int STREAM_RING = 2;public static final int STREAM_SYSTEM = 1
可以看出有很多种,套路都是一样的
代码链接待添加
0 0
- Android调节屏幕亮暗度和音量
- 【Android】系统音量及屏幕亮度调节
- 【Android】Android实现视频播放的时候滑动屏幕调节亮度和音量
- Android实现手机音量及屏幕亮度调节
- Fedora 下调节外放音量和屏幕亮度
- 音量及屏幕亮度调节
- Android音量调节原理
- Android调节音量
- Android音量控制调节
- Android之音量调节
- Android音量控制调节
- Android 音量调节
- Android(Java):音量调节
- android 调节媒体音量
- android audio 音量调节
- Android 音量调节
- Android音量控制调节
- Android 音量调节方法
- 江苏省各地级市县经纬度查询大全
- 【 C 语言】-初次认识
- extjs进度条代码实例
- Java luncher作用
- 简单对比最近操作更改的文件
- Android调节屏幕亮暗度和音量
- 实践指南-快速解锁Rancher v1.2
- Tomcat Manager用户配置详解
- 五行代码实现 炫动滑动 卡片层叠布局,仿探探、人人影视订阅界面 简单&优雅:LayoutManager+ItemTouchHelper
- Android单点触控技术,对图片进行平移,缩放,旋转操作
- OPENCV c++
- js与ajax- XMLHttpRequest
- Linux防火墙iptables
- P1125 笨小猴 noip2008SeniorT1