基于节操 5.3添加的滑动改变亮度,以及UI修改,有需要的直接拿走,不谢
文末有Demo
//需要的参数
mScreenWidth = wm.getDefaultDisplay().getWidth();
mScreenHeight = wm.getDefaultDisplay().getHeight();
mAudioManager = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE);
mSeekEndOffset = JCUtils.dip2px(getContext(),100);
//重写onTouch方法,修改如下
float x = event.getX();
float y = event.getY();
if (id == R.id.surface_container) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
Log.i(TAG, "onTouch surfaceContainer actionDown [" + this.hashCode() + "] ");
mTouchingProgressBar = true;
mDownX = x;
mDownY = y;
mChangeVolume = false;
mChangePosition = false;
mChangeLight =false;
break;
case MotionEvent.ACTION_MOVE:
Log.i(TAG, "onTouch surfaceContainer actionMove [" + this.hashCode() + "] ");
float deltaX = x - mDownX;//手指落下减去手指滑动终点距离x轴
float deltaY = y - mDownY;
float absDeltaX = Math.abs(deltaX);//x轴滑动距离和方向
float absDeltaY = Math.abs(deltaY);
if (currentScreen == SCREEN_WINDOW_FULLSCREEN) {
//当三种都为flase时
if (!mChangePosition && !mChangeVolume&&!mChangeLight) {
if (absDeltaX > THRESHOLD || absDeltaY > THRESHOLD) {
cancelProgressTimer();
if (absDeltaX >= THRESHOLD) {//横向滑动
//判断滑动进度条
if (currentState != CURRENT_STATE_ERROR) {
mChangePosition = true;
mDownPosition = getCurrentPositionWhenPlaying();
}
} else {
int screenHeight = getScreenHeight(getContext());
//如果y轴滑动距离超过设置的处理范围,那么进行滑动事件处理
boolean noEnd = Math.abs(screenHeight - mDownY) > mSeekEndOffset;
mChangeLight = (mDownX < mScreenWidth * 0.5f) && noEnd;//改变大于号小于号更改调节音量和亮在左侧还是右侧
if (!mChangeLight) {
mChangeVolume = noEnd;
mGestureDownVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
}
if (!mChangeVolume){
mChangeLight =noEnd;
}
}
}
}
}
if (mChangePosition) {
int totalTimeDuration = getDuration();
mSeekTimePosition = (int) (mDownPosition + deltaX * totalTimeDuration / mScreenWidth);
if (mSeekTimePosition > totalTimeDuration)
mSeekTimePosition = totalTimeDuration;
String seekTime = JCUtils.stringForTime(mSeekTimePosition);
String totalTime = JCUtils.stringForTime(totalTimeDuration);
showProgressDialog(deltaX, seekTime, mSeekTimePosition, totalTime, totalTimeDuration);
}
if (mChangeVolume) {
deltaY = -deltaY;
int max = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
int deltaV = (int) (max * deltaY * 3 / mScreenHeight);
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, mGestureDownVolume + deltaV, 0);
int volumePercent = (int) (mGestureDownVolume * 100 / max + deltaY * 3 * 100 / mScreenHeight);
showVolumeDialog(-deltaY, volumePercent);
}
if (mChangeLight) {
float percent = (-deltaY / mScreenHeight);
onBrightnessSlide(percent);
mDownY = y;
}
break;
case MotionEvent.ACTION_UP:
Log.i(TAG, "onTouch surfaceContainer actionUp [" + this.hashCode() + "] ");
mTouchingProgressBar = false;
dismissProgressDialog();
dismissVolumeDialog();
dismissBrightnessDialog();
if (mChangePosition) {
onEvent(JCUserAction.ON_TOUCH_SCREEN_SEEK_POSITION);
JCMediaManager.instance().mediaPlayer.seekTo(mSeekTimePosition);
int duration = getDuration();
int progress = mSeekTimePosition * 100 / (duration == 0 ? 1 : duration);
progressBar.setProgress(progress);
}
if (mChangeVolume) {
onEvent(JCUserAction.ON_TOUCH_SCREEN_SEEK_VOLUME);
}
startProgressTimer();
break;
}
}
return false;
/**
* 滑动改变亮度
*
* @param percent
*/
private void onBrightnessSlide(float percent) {
//获得当前屏幕亮度
mBrightnessData = ((Activity) (getContext())).getWindow().getAttributes().screenBrightness;
if (mBrightnessData <= 0.00f) {
mBrightnessData = 0.50f;
} else if (mBrightnessData < 0.01f) {
mBrightnessData = 0.01f;
}
WindowManager.LayoutParams lpa = ((Activity) (getContext())).getWindow().getAttributes();
lpa.screenBrightness = mBrightnessData + percent;
if (lpa.screenBrightness > 1.0f) {
lpa.screenBrightness = 1.0f;
} else if (lpa.screenBrightness < 0.01f) {
lpa.screenBrightness = 0.01f;
}
showBrightnessDialog(lpa.screenBrightness);
((Activity) (getContext())).getWindow().setAttributes(lpa);
}
/**
* 获取屏幕的高度px
*
* @param context 上下文
* @return 屏幕高px
*/
public static int getScreenHeight(Context context) {
WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics outMetrics = new DisplayMetrics();// 创建了一张白纸
windowManager.getDefaultDisplay().getMetrics(outMetrics);// 给白纸设置宽高
return outMetrics.heightPixels;
}
private void dismissBrightnessDialog() {
if (mBrightnessDialog != null) {
mBrightnessDialog.dismiss();
}
}
protected void showBrightnessDialog(float percent) {
if (mBrightnessDialog == null) {
View localView = LayoutInflater.from(getContext()).inflate(R.layout.jc_brightness_dialog, null);
mDialogBrightnessProgressBar = ((ProgressBar) localView.findViewById(R.id.brightness_progressbar));
mBrightnessDialog = new Dialog(getContext(), fm.jiecao.jcvideoplayer_lib.R.style.jc_style_dialog_progress);
mBrightnessDialog.setContentView(localView);
mBrightnessDialog.getWindow().addFlags(8);
mBrightnessDialog.getWindow().addFlags(32);
mBrightnessDialog.getWindow().addFlags(16);
mBrightnessDialog.getWindow().setLayout(-2, -2);
WindowManager.LayoutParams localLayoutParams = mBrightnessDialog.getWindow().getAttributes();
localLayoutParams.gravity = Gravity.RIGHT;
localLayoutParams.x = getContext().getResources().getDimensionPixelOffset(fm.jiecao.jcvideoplayer_lib.R.dimen.jc_volume_dialog_margin_left);
mBrightnessDialog.getWindow().setAttributes(localLayoutParams);
}
if (!mBrightnessDialog.isShowing()) {
mBrightnessDialog.show();
}
mDialogBrightnessProgressBar.setProgress((int) (percent * 100));
}
DEMO地址:http://download.csdn.net/detail/qq_35414804/9737767