Преглед изворни кода

增加课件播放音量设置逻辑

Pq пре 2 година
родитељ
комит
08b225ca98

+ 7 - 0
live_teaching/src/main/java/com/daya/live_teaching/rtc/RtcAudioMixerControl.java

@@ -49,6 +49,13 @@ public class RtcAudioMixerControl extends RCRTCAudioMixingStateChangeListener {
     }
     }
 
 
     /**
     /**
+     * 获取当前播放音量
+     */
+    public int getPlaybackVolume() {
+        return RCRTCAudioMixer.getInstance().getPlaybackVolume();
+    }
+
+    /**
      * 获取总时长
      * 获取总时长
      *
      *
      * @return
      * @return

+ 60 - 0
live_teaching/src/main/java/com/daya/live_teaching/widget/CourseWarePlayView.java

@@ -11,6 +11,7 @@ import android.view.LayoutInflater;
 import android.view.View;
 import android.view.View;
 import android.widget.FrameLayout;
 import android.widget.FrameLayout;
 import android.widget.ImageView;
 import android.widget.ImageView;
+import android.widget.SeekBar;
 import android.widget.TextView;
 import android.widget.TextView;
 
 
 import com.cooleshow.base.utils.DateUtil;
 import com.cooleshow.base.utils.DateUtil;
@@ -69,6 +70,9 @@ public class CourseWarePlayView extends FrameLayout implements View.OnClickListe
     private TextView mTvPackUp;
     private TextView mTvPackUp;
     private String fileUrl;
     private String fileUrl;
     private OnEventListener mEventListener;
     private OnEventListener mEventListener;
+    private View mViewVolumeHelp;
+    private ImageView mIvVolume;
+    private CoursewarePlayVolumeControlPop mCoursewarePlayVolumeControlPop;
 
 
 
 
     public CourseWarePlayView(@NonNull Context context) {
     public CourseWarePlayView(@NonNull Context context) {
@@ -93,10 +97,36 @@ public class CourseWarePlayView extends FrameLayout implements View.OnClickListe
         mTvProgress = findViewById(R.id.tv_progress);
         mTvProgress = findViewById(R.id.tv_progress);
         mTvStatusText = findViewById(R.id.tv_status_text);
         mTvStatusText = findViewById(R.id.tv_status_text);
         mTvTotalProgress = findViewById(R.id.tv_total_progress);
         mTvTotalProgress = findViewById(R.id.tv_total_progress);
+        mViewVolumeHelp = findViewById(R.id.view_volume_help);
+        mIvVolume = findViewById(R.id.iv_volume);
+        mIvVolume.setOnClickListener(this);
         mIvPlay.setOnClickListener(this);
         mIvPlay.setOnClickListener(this);
         findViewById(R.id.tv_close).setOnClickListener(this);
         findViewById(R.id.tv_close).setOnClickListener(this);
         mTvPackUp = findViewById(R.id.tv_pack_up);
         mTvPackUp = findViewById(R.id.tv_pack_up);
         mTvPackUp.setOnClickListener(this);
         mTvPackUp.setOnClickListener(this);
+        initListener();
+    }
+
+    private void initListener() {
+        mSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
+            @Override
+            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
+
+            }
+
+            @Override
+            public void onStartTrackingTouch(SeekBar seekBar) {
+
+            }
+
+            @Override
+            public void onStopTrackingTouch(SeekBar seekBar) {
+                int progress = mSeekbar.getProgress();
+                float percent = progress / 100f;
+                Log.i("pq", "seekTo:" + percent);
+                getAudioMixerManager().seekTo(percent);
+            }
+        });
     }
     }
 
 
     public void setName(String name) {
     public void setName(String name) {
@@ -117,6 +147,31 @@ public class CourseWarePlayView extends FrameLayout implements View.OnClickListe
         }
         }
     }
     }
 
 
+    private void showVolumeChangePop() {
+        if (mCoursewarePlayVolumeControlPop == null) {
+            mCoursewarePlayVolumeControlPop = new CoursewarePlayVolumeControlPop(getContext());
+            mCoursewarePlayVolumeControlPop.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
+                @Override
+                public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
+                    getAudioMixerManager().updateCurrentUserVolume(progress);
+                    getAudioMixerManager().updateOtherUserVolume(progress);
+                }
+
+                @Override
+                public void onStartTrackingTouch(SeekBar seekBar) {
+
+                }
+
+                @Override
+                public void onStopTrackingTouch(SeekBar seekBar) {
+
+                }
+            });
+        }
+//        mCoursewarePlayVolumeControlPop.setCurrentVolume(getAudioMixerManager().getPlaybackVolume());
+        mCoursewarePlayVolumeControlPop.showAsDropDown(mViewVolumeHelp);
+    }
+
     /**
     /**
      * Added from 5.1.4
      * Added from 5.1.4
      * 混音播放进度,默认 200 毫秒回调一次
      * 混音播放进度,默认 200 毫秒回调一次
@@ -220,6 +275,11 @@ public class CourseWarePlayView extends FrameLayout implements View.OnClickListe
                 }
                 }
             }
             }
         }
         }
+
+        if (id == R.id.iv_volume) {
+            showVolumeChangePop();
+            return;
+        }
     }
     }
 
 
     private void restart() {
     private void restart() {

+ 47 - 0
live_teaching/src/main/java/com/daya/live_teaching/widget/CoursewarePlayVolumeControlPop.java

@@ -0,0 +1,47 @@
+package com.daya.live_teaching.widget;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.PopupWindow;
+import android.widget.SeekBar;
+
+import com.cooleshow.base.utils.SizeUtils;
+import com.daya.live_teaching.R;
+
+import androidx.appcompat.widget.AppCompatSeekBar;
+
+/**
+ * Author by pq, Date on 2022/11/18.
+ */
+public class CoursewarePlayVolumeControlPop extends PopupWindow {
+    private Context mContext;
+    private AppCompatSeekBar mSeekBar;
+
+    public CoursewarePlayVolumeControlPop(Context context) {
+        mContext = context;
+        init();
+    }
+
+    private void init() {
+        setOutsideTouchable(true);
+        setAnimationStyle(R.style.MyPopupAnimation);
+        View contentView = LayoutInflater.from(mContext).inflate(R.layout.view_courseware_volume_layout, null);
+        setContentView(contentView);
+        mSeekBar = contentView.findViewById(R.id.seek_bar);
+        setWidth(SizeUtils.dp2px(20));
+        setHeight(SizeUtils.dp2px(115));
+    }
+
+    public void setOnSeekBarChangeListener(SeekBar.OnSeekBarChangeListener listener) {
+        if (mSeekBar != null) {
+            mSeekBar.setOnSeekBarChangeListener(listener);
+        }
+    }
+
+    public void setCurrentVolume(int volume) {
+        if (mSeekBar != null) {
+            mSeekBar.setProgress(volume);
+        }
+    }
+}

+ 11 - 0
live_teaching/src/main/res/anim/pop_enter_anim.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+<!--    <translate-->
+<!--        android:duration="200"-->
+<!--        android:fromYDelta="0%"-->
+<!--        android:toYDelta="100%" />-->
+    <alpha
+        android:duration="200"
+        android:fromAlpha="0.0"
+        android:toAlpha="1.0" />
+</set>

+ 11 - 0
live_teaching/src/main/res/anim/pop_exit_anim.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+<!--    <translate-->
+<!--        android:duration="200"-->
+<!--        android:fromYDelta="0%"-->
+<!--        android:toYDelta="0%" />-->
+    <alpha
+        android:duration="200"
+        android:fromAlpha="1.0"
+        android:toAlpha="0.0" />
+</set>

BIN
live_teaching/src/main/res/drawable-xhdpi/icon_courseware_play_volume_change.png


BIN
live_teaching/src/main/res/drawable-xxhdpi/icon_courseware_play_volume_change.png


+ 37 - 0
live_teaching/src/main/res/drawable/play_course_ware_volume_seekbar_style.xml

@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+    <item
+        android:id="@android:id/background"
+        android:gravity="center_vertical|fill_horizontal">
+        <shape android:shape="rectangle">
+            <corners android:radius="2dp"/>
+            <size android:height="4dp"/>
+            <solid android:color="@color/color_d8d8d8"/>
+        </shape>
+    </item>
+
+    <item
+        android:id="@android:id/secondaryProgress"
+        android:gravity="center_vertical|fill_horizontal">
+        <clip>
+            <shape android:shape="rectangle">
+
+                <corners android:radius="2dp"/>
+                <size android:height="4dp"/>
+                <solid android:color="@color/color_d8d8d8"/>
+            </shape>
+        </clip>
+    </item>
+
+    <item
+        android:id="@android:id/progress"
+        android:gravity="center_vertical|fill_horizontal">
+        <clip>
+            <shape android:shape="rectangle">
+                <corners android:radius="2dp"/>
+                <size android:height="4dp"/>
+                <solid android:color="@color/color_ff8000"/>
+            </shape>
+        </clip>
+    </item>
+</layer-list>

+ 5 - 0
live_teaching/src/main/res/drawable/shape_play_courseware_volume_thumb.xml

@@ -0,0 +1,5 @@
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="@color/color_ff8000"/>
+    <size android:width="12dp" android:height="12dp"/>
+    <corners android:radius="12dp"/>
+</shape>

+ 9 - 2
live_teaching/src/main/res/layout/view_course_ware_play_layout.xml

@@ -109,6 +109,13 @@
         app:layout_constraintRight_toRightOf="parent"
         app:layout_constraintRight_toRightOf="parent"
         app:layout_constraintTop_toTopOf="@+id/iv_play" />
         app:layout_constraintTop_toTopOf="@+id/iv_play" />
 
 
+    <View
+        app:layout_constraintLeft_toLeftOf="@+id/iv_volume"
+        app:layout_constraintTop_toTopOf="@+id/iv_volume"
+        android:id="@+id/view_volume_help"
+        android:layout_width="1px"
+        android:layout_height="1px"/>
+
     <TextView
     <TextView
         android:id="@+id/tv_volume_text"
         android:id="@+id/tv_volume_text"
         android:layout_width="wrap_content"
         android:layout_width="wrap_content"
@@ -154,6 +161,6 @@
         android:layout_width="wrap_content"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_height="wrap_content"
         android:visibility="gone"
         android:visibility="gone"
-        app:constraint_referenced_ids="tv_progress,tv_total_progress,tv_volume_text,iv_volume,seekbar,iv_play"
-        tools:visibility="gone" />
+        app:constraint_referenced_ids="tv_progress,tv_total_progress,tv_volume_text,iv_volume,view_volume_help,seekbar,iv_play"
+        tools:visibility="visible" />
 </androidx.constraintlayout.widget.ConstraintLayout>
 </androidx.constraintlayout.widget.ConstraintLayout>

+ 39 - 0
live_teaching/src/main/res/layout/view_courseware_volume_layout.xml

@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="20dp"
+    android:layout_height="115dp"
+    android:background="@drawable/bg_white_10dp">
+
+    <ImageView
+        android:id="@+id/iv_volume_icon"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:src="@drawable/icon_courseware_play_volume_change"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <FrameLayout
+        android:layout_width="wrap_content"
+        android:layout_height="0dp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/iv_volume_icon">
+
+        <androidx.appcompat.widget.AppCompatSeekBar
+            android:id="@+id/seek_bar"
+            android:layout_width="95dp"
+            android:layout_gravity="center"
+            android:layout_height="wrap_content"
+            android:max="100"
+            android:progress="50"
+            android:progressDrawable="@drawable/play_course_ware_volume_seekbar_style"
+            android:rotation="270"
+            android:splitTrack="false"
+            android:paddingStart="10dp"
+            android:paddingEnd="6dp"
+            android:thumb="@drawable/shape_play_courseware_volume_thumb" />
+    </FrameLayout>
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 10 - 6
live_teaching/src/main/res/values/styles.xml

@@ -6,7 +6,6 @@
     </style>
     </style>
 
 
 
 
-
     <style name="liveActivityTheme" parent="Theme.AppCompat.Light.NoActionBar">
     <style name="liveActivityTheme" parent="Theme.AppCompat.Light.NoActionBar">
         <!-- 状态栏 -->
         <!-- 状态栏 -->
         <item name="android:colorPrimaryDark">#000000</item>
         <item name="android:colorPrimaryDark">#000000</item>
@@ -17,6 +16,7 @@
         <!-- 导航栏颜色 -->
         <!-- 导航栏颜色 -->
         <item name="android:navigationBarColor">#000000</item>
         <item name="android:navigationBarColor">#000000</item>
     </style>
     </style>
+
     <style name="ToolButton">
     <style name="ToolButton">
         <item name="android:background">@color/transparent</item>
         <item name="android:background">@color/transparent</item>
         <item name="android:textColor">@color/white</item>
         <item name="android:textColor">@color/white</item>
@@ -45,16 +45,20 @@
 
 
     <declare-styleable name="VerticalSeekBar">
     <declare-styleable name="VerticalSeekBar">
         <!--seekbar最大值-->
         <!--seekbar最大值-->
-        <attr name="max" format="integer"/>
+        <attr name="max" format="integer" />
         <!--当前进度-->
         <!--当前进度-->
-        <attr name="progress" format="integer"/>
+        <attr name="progress" format="integer" />
         <!--图片大小-->
         <!--图片大小-->
-        <attr name="thumbSize" format="dimension"/>
+        <attr name="thumbSize" format="dimension" />
         <!--方向从上到下  或下到上-->
         <!--方向从上到下  或下到上-->
-        <attr name="orientation" format="boolean"/>
-        <attr name="barbg" format="color"/>
+        <attr name="orientation" format="boolean" />
+        <attr name="barbg" format="color" />
         <attr name="progressbg" format="color"></attr>
         <attr name="progressbg" format="color"></attr>
 
 
     </declare-styleable>
     </declare-styleable>
 
 
+    <style name="MyPopupAnimation" parent="android:Animation">
+        <item name="android:windowExitAnimation">@anim/pop_exit_anim</item>
+        <item name="android:windowEnterAnimation">@anim/pop_enter_anim</item>
+    </style>
 </resources>
 </resources>