desc:视频播放界面增加音量控制

main
xiaowusky 1 year ago
parent 4ac9e9dc96
commit 04ea52e7f9

@ -9,12 +9,14 @@ import android.view.LayoutInflater.Factory2
import android.view.View
import android.view.ViewGroup
import android.widget.EditText
import android.widget.ImageButton
import android.widget.LinearLayout
import android.widget.RelativeLayout
import android.widget.SeekBar
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.AppCompatRadioButton
import androidx.core.view.postDelayed
import androidx.lifecycle.lifecycleScope
import com.common.commonlib.utils.LogUtils
import com.loper7.date_time_picker.number_picker.NumberPicker
@ -174,6 +176,7 @@ abstract class BaseActivity : AppCompatActivity() {
"androidx.appcompat.widget.AppCompatRadioButton" -> AppCompatRadioButton(context, attrs)
"SeekBar" -> SeekBar(context, attrs)
"EditText" -> EditText(context, attrs)
"ImageButton" -> ImageButton(context, attrs)
else -> {
null
}
@ -184,6 +187,10 @@ abstract class BaseActivity : AppCompatActivity() {
baseBinding.topBar.tryFocusBackArea()
}
fun isBackFocused(): Boolean {
return currentFocus == baseBinding.topBar.getBackArea()
}
override fun onResume() {
super.onResume()
if (!isHome) {
@ -213,10 +220,12 @@ abstract class BaseActivity : AppCompatActivity() {
val repeatCount = event.repeatCount
val keyCode = event.keyCode
if (KeyEvent.KEYCODE_DPAD_LEFT == keyCode || KeyEvent.KEYCODE_DPAD_RIGHT == keyCode) {
if (isLeftRightLongPress) {
if (isLeftRightLongPress && baseBinding.areaSound.visibility == View.VISIBLE) {
baseBinding.areaSound.postDelayed(300) {
lastFocusView?.requestFocus()
baseBinding.areaSound.visibility = View.GONE
volumeUtil.mediaVolume = baseBinding.sbSound.progress
}
return true
}
} else if (keyCode == KeyEvent.KEYCODE_ENTER) {
@ -237,9 +246,9 @@ abstract class BaseActivity : AppCompatActivity() {
private fun dealActionDown(event: KeyEvent): Boolean {
val repeatCount = event.repeatCount
val keyCode = event.keyCode
if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT || keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
isLeftRightLongPress = repeatCount != 0
if (repeatCount > 10) {
if (KeyEvent.KEYCODE_DPAD_LEFT == keyCode || KeyEvent.KEYCODE_DPAD_RIGHT == keyCode) {
isLeftRightLongPress = repeatCount > 10
if (isLeftRightLongPress && currentFocus !is SeekBar) {
val visibility = baseBinding.areaSound.visibility
if (View.GONE == visibility) {
lastFocusView = currentFocus

@ -36,16 +36,18 @@ import android.view.ViewConfiguration;
import android.view.WindowManager;
import android.widget.LinearLayout;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.view.ViewCompat;
import androidx.core.view.ViewConfigurationCompat;
import com.bumptech.glide.Glide;
import com.yinuo.safetywatcher.databinding.ActivityMainProBinding;
import com.yinuo.safetywatcher.watcher.base.NoOptionsActivity;
import tv.danmaku.ijk.media.player.IMediaPlayer;
public class ProVideoActivity extends AppCompatActivity {
public class ProVideoActivity extends NoOptionsActivity {
private static final String TAG = "ProVideoActivity";
public static final int REQUEST_WRITE_STORAGE = 111;
@ -63,17 +65,112 @@ public class ProVideoActivity extends AppCompatActivity {
@SuppressLint("ClickableViewAccessibility")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
getWindow().setStatusBarColor(Color.TRANSPARENT);
}
mBinding = ActivityMainProBinding.inflate(getLayoutInflater());
setContentView(mBinding.getRoot());
super.onCreate(savedInstanceState);
}
// @Override
// public boolean onKeyDown(int keyCode, KeyEvent event) {
// if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
// mVideoView.toggleMediaControlsVisiblity();
// return true;
// } else if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
// mediaController.rewindVideo();
// return true;
// } else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
// mediaController.fastVideo();
// return true;
// } else {
// return super.onKeyDown(keyCode, event);
// }
// }
@Override
public boolean dispatchKeyEvent(@NonNull KeyEvent event) {
if (!mediaController.isShowing() && !isBackFocused()) {
mVideoView.toggleMediaControlsVisiblity();
return true;
}
return super.dispatchKeyEvent(event);
}
@Override
protected void onStop() {
super.onStop();
mVideoView.stopPlayback();
}
@Override
protected void onDestroy() {
super.onDestroy();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
LinearLayout container = mBinding.playerContainer;
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
setNavVisibility(false);
// 横屏情况 播放窗口横着排开
container.setOrientation(LinearLayout.HORIZONTAL);
} else {
// 竖屏,取消全屏状态
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
setNavVisibility(true);
// 竖屏情况 播放窗口竖着排开
container.setOrientation(LinearLayout.VERTICAL);
}
}
public boolean isLandscape() {
int orientation = getResources().getConfiguration().orientation;
return orientation == ORIENTATION_LANDSCAPE;
}
public void setNavVisibility(boolean visible) {
if (!ViewConfigurationCompat.hasPermanentMenuKey(ViewConfiguration.get(this))) {
int newVis = View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
if (!visible) {
newVis |= View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE;
}
// If we are now visible, schedule a timer for us to go invisible. Set the new desired visibility.
getWindow().getDecorView().setSystemUiVisibility(newVis);
}
}
public void onChangeOrientation(View view) {
setRequestedOrientation(isLandscape() ? ActivityInfo.SCREEN_ORIENTATION_PORTRAIT : ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
public void onChangePlayMode(View view) {
mMode = mVideoView.toggleAspectRatio();
Log.i(TAG, "画面模式:" + mMode);
}
@NonNull
@Override
public View generateContentView() {
if (mBinding != null) {
return mBinding.getRoot();
}
return null;
}
@Override
public void initView() {
// mBinding = ActivityMainProBinding.inflate(getLayoutInflater());
// setContentView(mBinding.getRoot());
// handle arguments
mVideoPath = getIntent().getStringExtra("videoPath");
@ -214,79 +311,21 @@ public class ProVideoActivity extends AppCompatActivity {
// detector.onTouchEvent(event);
// return true;
// });
}
View backArea = getBaseBinding().topBar.getBackArea();
int backAreaId = backArea.getId();
backArea.setNextFocusRightId(backAreaId);
backArea.setNextFocusLeftId(backAreaId);
backArea.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
mVideoView.toggleMediaControlsVisiblity();
return true;
} else if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
mediaController.rewindVideo();
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
mediaController.tryFocusSelf();
return true;
} else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
mediaController.fastVideo();
return true;
} else {
return super.onKeyDown(keyCode, event);
}
}
@Override
protected void onStop() {
super.onStop();
mVideoView.stopPlayback();
}
@Override
protected void onDestroy() {
super.onDestroy();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
LinearLayout container = mBinding.playerContainer;
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
setNavVisibility(false);
// 横屏情况 播放窗口横着排开
container.setOrientation(LinearLayout.HORIZONTAL);
} else {
// 竖屏,取消全屏状态
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
setNavVisibility(true);
// 竖屏情况 播放窗口竖着排开
container.setOrientation(LinearLayout.VERTICAL);
}
}
public boolean isLandscape() {
int orientation = getResources().getConfiguration().orientation;
return orientation == ORIENTATION_LANDSCAPE;
}
public void setNavVisibility(boolean visible) {
if (!ViewConfigurationCompat.hasPermanentMenuKey(ViewConfiguration.get(this))) {
int newVis = View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
if (!visible) {
newVis |= View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE;
}
// If we are now visible, schedule a timer for us to go invisible. Set the new desired visibility.
getWindow().getDecorView().setSystemUiVisibility(newVis);
}
}
public void onChangeOrientation(View view) {
setRequestedOrientation(isLandscape() ? ActivityInfo.SCREEN_ORIENTATION_PORTRAIT : ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
return false;
}
public void onChangePlayMode(View view) {
mMode = mVideoView.toggleAspectRatio();
Log.i(TAG, "画面模式:" + mMode);
});
}
}

@ -61,7 +61,7 @@ public class VideoControllerView extends FrameLayout implements IMediaController
private TextView mCurrentTime; // 当前播放时间点
private TextView mEndTime; // 总时长
private View mControlView;
// private View mControlView;
private ImageButton mPauseButton; // 暂停or开始
private ImageButton mFastButton; // 快进
private ImageButton mRewindButton; // 快退
@ -233,8 +233,11 @@ public class VideoControllerView extends FrameLayout implements IMediaController
doPauseResume();
show(sDefaultTimeout);
if (mControlView != null) {
mControlView.requestFocus();
// if (mControlView != null) {
// mControlView.requestFocus();
// }
if (mProgress != null) {
mProgress.requestFocus();
}
}
@ -349,15 +352,19 @@ public class VideoControllerView extends FrameLayout implements IMediaController
if (!mShowing && mAnchor != null) {
setProgress();
if (mControlView != null) {
mControlView.requestFocus();
// if (mControlView != null) {
// mControlView.requestFocus();
// }
if (mProgress != null) {
mProgress.requestFocus();
}
disableUnsupportedButtons();
LayoutParams tlp = new LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT,
Gravity.BOTTOM);
if (mAnchor instanceof ViewGroup) {
@ -440,39 +447,39 @@ public class VideoControllerView extends FrameLayout implements IMediaController
v.findViewById(R.id.seek_bar_container).setVisibility(VISIBLE);
}
View backArea = v.findViewById(R.id.back_area);
backArea.setOnClickListener(v1 -> {
if (mContext instanceof Activity) {
((Activity) mContext).finish();
}
});
setCommonBg(backArea);
mControlView = v.findViewById(R.id.control_area);
mControlView.setOnKeyListener((v12, keyCode, event) -> {
if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER || keyCode == KeyEvent.KEYCODE_ENTER) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
mPauseButton.performClick();
}
return true;
}
return false;
});
setCommonBg(mControlView);
mControlView.requestFocus();
}
private void setCommonBg(View v) {
StateListDrawable bg = new StateListDrawable();
Drawable currentBackground = v.getBackground();
Drawable drawable = AppCompatResources.getDrawable(
mContext,
com.yinuo.safetywatcher.R.drawable.focus_bg
);
bg.addState(new int[]{android.R.attr.state_focused}, drawable);
bg.addState(new int[]{}, currentBackground);
v.setBackground(bg);
}
// View backArea = v.findViewById(R.id.back_area);
// backArea.setOnClickListener(v1 -> {
// if (mContext instanceof Activity) {
// ((Activity) mContext).finish();
// }
// });
// setCommonBg(backArea);
// mControlView = v.findViewById(R.id.control_area);
// mControlView.setOnKeyListener((v12, keyCode, event) -> {
// if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER || keyCode == KeyEvent.KEYCODE_ENTER) {
// if (event.getAction() == KeyEvent.ACTION_DOWN) {
// mPauseButton.performClick();
// }
// return true;
// }
// return false;
// });
// setCommonBg(mControlView);
// mControlView.requestFocus();
}
// private void setCommonBg(View v) {
// StateListDrawable bg = new StateListDrawable();
// Drawable currentBackground = v.getBackground();
// Drawable drawable = AppCompatResources.getDrawable(
// mContext,
// com.yinuo.safetywatcher.R.drawable.focus_bg
// );
// bg.addState(new int[]{android.R.attr.state_focused}, drawable);
// bg.addState(new int[]{}, currentBackground);
// v.setBackground(bg);
// }
/**
* Отключить паузу или seek button, если поток не может быть приостановлена
@ -608,6 +615,12 @@ public class VideoControllerView extends FrameLayout implements IMediaController
}
}
public void tryFocusSelf() {
if (mProgress != null) {
mProgress.requestFocus();
}
}
public interface FullScreenAbleMediaPlayerControl extends MediaController.MediaPlayerControl {
void toggleFullScreen();
}

@ -37,6 +37,8 @@
android:layout_below="@+id/tv"
android:layout_marginTop="@dimen/_20dp"
android:focusable="true"
android:nextFocusRight="@id/sb_sound"
android:nextFocusLeft="@id/sb_sound"
android:min="0"
android:padding="0dp" />

@ -9,6 +9,7 @@
android:id="@+id/render_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusable="false"
android:layout_gravity="center"
android:background="#000000">

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/media_controller_ll"
android:layout_width="match_parent"
@ -10,7 +10,8 @@
android:layout_width="match_parent"
android:layout_height="@dimen/_87dp"
android:background="#6000"
android:focusable="true"
android:focusable="false"
android:visibility="invisible"
android:gravity="center_vertical">
<ImageView
@ -23,14 +24,14 @@
<Space
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
android:focusable="false"
android:layout_weight="1" />-->
<LinearLayout
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/control_area"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#6000"
android:focusable="true"
android:orientation="vertical">
<LinearLayout
@ -58,6 +59,9 @@
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:nextFocusLeft="@id/media_controller_progress"
android:nextFocusRight="@id/media_controller_progress"
android:focusable="true"
android:progress="0" />
<TextView
@ -84,20 +88,26 @@
android:id="@+id/rewind"
style="@android:style/MediaButton.Rew"
android:layout_weight="1"
android:focusable="true"
android:nextFocusLeft="@id/rewind"
android:src="@drawable/new_moveback_btn" />
<ImageButton
android:id="@+id/pause"
style="@android:style/MediaButton.Play"
android:layout_weight="1"
android:focusable="true"
android:src="@drawable/new_stop_white" />
<ImageButton
android:id="@+id/fast_forward"
style="@android:style/MediaButton.Ffwd"
android:layout_weight="1"
android:focusable="true"
android:nextFocusRight="@id/fast_forward"
android:src="@drawable/new_forward_btn" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
<!--
</LinearLayout>-->

Loading…
Cancel
Save