13.faq
1. 如何修改倍速选项
为了修改倍速选项,需要修改以下3个文件:
polyv_controller_media_center_speed.xml(横屏倍速选择布局)polyv_controller_media_center_speed_portrait.xml(竖屏倍速选择布局)PolyvPlayerMediaController.java(媒体控制器逻辑代码)
以下示例如何添加2.5倍速:
步骤说明:
- 修改横屏倍速选择布局
polyv_controller_media_center_speed.xml
在 res/layout/polyv_controller_media_center_speed.xml 文件中,找到 <LinearLayout> 内部用于显示倍速选项的 TextView 列表。您需要在 tv_speed20 和 tv_speed30 之间添加一个新的 TextView 来表示2.5倍速。
找到以下代码段 (或类似位置):
<TextView
android:id="@+id/tv_speed20"
style="@style/tv_click_controller_land_center"
android:gravity="center"
android:layout_weight="1"
android:padding="@dimen/talk_common_margin"
android:text="2x" />
<TextView
android:id="@+id/tv_speed30"
style="@style/tv_click_controller_land_center"
android:gravity="center"
android:layout_weight="1"
android:padding="@dimen/talk_common_margin"
android:text="3x" />
在 tv_speed20 之后、tv_speed30 之前插入以下代码:
<TextView
android:id="@+id/tv_speed20"
style="@style/tv_click_controller_land_center"
android:gravity="center"
android:layout_weight="1"
android:padding="@dimen/talk_common_margin"
android:text="2x" />
<!-- 新增:2.5倍速选项 -->
<TextView
android:id="@+id/tv_speed25"
style="@style/tv_click_controller_land_center"
android:gravity="center"
android:layout_weight="1"
android:padding="@dimen/talk_common_margin"
android:text="2.5x" />
<TextView
android:id="@+id/tv_speed30"
style="@style/tv_click_controller_land_center"
android:gravity="center"
android:layout_weight="1"
android:padding="@dimen/talk_common_margin"
android:text="3x" />
- 修改竖屏倍速选择布局
polyv_controller_media_center_speed_portrait.xml
在 res/layout/polyv_controller_media_center_speed_portrait.xml 文件中,同样需要在 tv_speed20_portrait 和 tv_speed30_portrait 之间添加一个新的 TextView。
找到以下代码段 (或类似位置):
<TextView
android:id="@+id/tv_speed20_portrait"
style="@style/tv_click_controller_portrait_center"
android:layout_marginRight="@dimen/corners_common_l"
android:padding="@dimen/talk_common_margin"
android:text="2x" />
<TextView
android:id="@+id/tv_speed30_portrait"
style="@style/tv_click_controller_portrait_center"
android:padding="@dimen/talk_common_margin"
android:text="3x" />
在 tv_speed20_portrait 之后、tv_speed30_portrait 之前插入以下代码:
<TextView
android:id="@+id/tv_speed20_portrait"
style="@style/tv_click_controller_portrait_center"
android:layout_marginRight="@dimen/corners_common_l"
android:padding="@dimen/talk_common_margin"
android:text="2x" />
<!-- 新增:2.5倍速选项 (竖屏) -->
<TextView
android:id="@+id/tv_speed25_portrait"
style="@style/tv_click_controller_portrait_center"
android:layout_marginRight="@dimen/corners_common_l"
android:padding="@dimen/talk_common_margin"
android:text="2.5x" />
<TextView
android:id="@+id/tv_speed30_portrait"
style="@style/tv_click_controller_portrait_center"
android:padding="@dimen/talk_common_margin"
android:text="3x" />
- 修改
PolyvPlayerMediaController.java
这个文件是核心逻辑部分,需要进行多处修改。
声明新的
TextView变量: 在PolyvPlayerMediaController类顶部,找到倍速相关的TextView声明,并添加新定义的tv_speed25_portrait和tv_speed25。找到类似代码:
// 竖屏的播放速度布局 // ... private TextView tv_speed05_portrait, tv_speed075_portrait, tv_speed10_portrait, tv_speed125_portrait, tv_speed15_portrait, tv_speed20_portrait, tv_speed30_portrait; // ... // 横屏的播放速度布局 // ... private TextView tv_speed05, tv_speed075, tv_speed10, tv_speed125, tv_speed15, tv_speed20, tv_speed30;修改为:
// 竖屏的播放速度布局 // ... private TextView tv_speed05_portrait, tv_speed075_portrait, tv_speed10_portrait, tv_speed125_portrait, tv_speed15_portrait, tv_speed20_portrait, tv_speed25_portrait, tv_speed30_portrait; // ... // 横屏的播放速度布局 // ... private TextView tv_speed05, tv_speed075, tv_speed10, tv_speed125, tv_speed15, tv_speed20, tv_speed25, tv_speed30;在
findIdAndNew()方法中初始化新的TextView: 找到findIdAndNew()方法,并为新声明的TextView变量关联 XML 中的视图ID。找到类似代码:
// ... 竖屏的播放速度布局的view tv_speed20_portrait = (TextView) view.findViewById(R.id.tv_speed20_portrait); tv_speed30_portrait = (TextView) view.findViewById(R.id.tv_speed30_portrait); // ... 横屏的播放速度布局的view tv_speed20 = (TextView) view.findViewById(R.id.tv_speed20); tv_speed30 = (TextView) view.findViewById(R.id.tv_speed30);修改为:
// ... 竖屏的播放速度布局的view tv_speed20_portrait = (TextView) view.findViewById(R.id.tv_speed20_portrait); tv_speed25_portrait = (TextView) view.findViewById(R.id.tv_speed25_portrait); // 新增 tv_speed30_portrait = (TextView) view.findViewById(R.id.tv_speed30_portrait); // ... 横屏的播放速度布局的view tv_speed20 = (TextView) view.findViewById(R.id.tv_speed20); tv_speed25 = (TextView) view.findViewById(R.id.tv_speed25); // 新增 tv_speed30 = (TextView) view.findViewById(R.id.tv_speed30);在
initView()方法中为新的TextView设置点击监听器: 找到initView()方法,并为tv_speed25_portrait和tv_speed25设置OnClickListener。找到类似代码:
// ... tv_speed20_portrait.setOnClickListener(this); tv_speed30_portrait.setOnClickListener(this); // ... tv_speed20.setOnClickListener(this); tv_speed30.setOnClickListener(this); // ...修改为:
// ... tv_speed20_portrait.setOnClickListener(this); tv_speed25_portrait.setOnClickListener(this); // 新增 tv_speed30_portrait.setOnClickListener(this); // ... tv_speed20.setOnClickListener(this); tv_speed25.setOnClickListener(this); // 新增 tv_speed30.setOnClickListener(this); // ...在
initSpeedView(float speed)方法中更新2.5倍速的选中状态和显示文本:initSpeedView方法负责根据当前的播放倍速更新UI上倍速选项的选中状态和顶部/竖屏显示区域的文本。找到类似代码:
public void initSpeedView(float speed) { tv_speed05.setSelected(false); tv_speed05_portrait.setSelected(false); // ... 其他倍速的 setSelected(false) tv_speed20.setSelected(false); tv_speed20_portrait.setSelected(false); tv_speed30.setSelected(false); tv_speed30_portrait.setSelected(false); // ... if (speed == 2) { tv_speed20.setSelected(true); tv_speed20_portrait.setSelected(true); tv_speed.setText("2x"); tv_speed_portrait.setText("2x"); } if (speed == 3) { tv_speed30.setSelected(true); tv_speed30_portrait.setSelected(true); tv_speed.setText("3x"); tv_speed_portrait.setText("3x"); } }修改为:
public void initSpeedView(float speed) { tv_speed05.setSelected(false); tv_speed05_portrait.setSelected(false); tv_speed075.setSelected(false); tv_speed075_portrait.setSelected(false); tv_speed10.setSelected(false); tv_speed10_portrait.setSelected(false); tv_speed125.setSelected(false); tv_speed125_portrait.setSelected(false); tv_speed15.setSelected(false); tv_speed15_portrait.setSelected(false); tv_speed20.setSelected(false); tv_speed20_portrait.setSelected(false); tv_speed25.setSelected(false); // 新增 tv_speed25_portrait.setSelected(false); // 新增 tv_speed30.setSelected(false); tv_speed30_portrait.setSelected(false); if (speed == 0.5) { tv_speed05.setSelected(true); tv_speed05_portrait.setSelected(true); tv_speed.setText("0.5x"); tv_speed_portrait.setText("0.5x"); } // ... 其他倍速的 if (speed == X) 块 if (speed == 2) { tv_speed20.setSelected(true); tv_speed20_portrait.setSelected(true); tv_speed.setText("2x"); tv_speed_portrait.setText("2x"); } if (speed == 2.5) { // 新增 tv_speed25.setSelected(true); tv_speed25_portrait.setSelected(true); tv_speed.setText("2.5x"); tv_speed_portrait.setText("2.5x"); } if (speed == 3) { tv_speed30.setSelected(true); tv_speed30_portrait.setSelected(true); tv_speed.setText("3x"); tv_speed_portrait.setText("3x"); } }在
onClick(View view)方法中处理2.5倍速的点击事件: 这个方法处理所有UI元素的点击事件。您需要添加一个case来响应2.5倍速选项的点击。找到类似代码:
case R.id.tv_speed20_portrait: case R.id.tv_speed20: resetSpeedView(2); break; case R.id.tv_speed30_portrait: case R.id.tv_speed30: resetSpeedView(3); break;修改为:
case R.id.tv_speed20_portrait: case R.id.tv_speed20: resetSpeedView(2); break; case R.id.tv_speed25_portrait: // 新增 case R.id.tv_speed25: // 新增 resetSpeedView(2.5F); // 注意:浮点数需要F后缀 break; case R.id.tv_speed30_portrait: case R.id.tv_speed30: resetSpeedView(3); break;
2. 如何转换demo为AndroidX版本
Android Studio 内置了重构工具,可以自动扫描项目中的 Java/Kotlin 代码、XML 布局文件以及 Gradle 脚本,将旧的 Support 库引用批量替换为 AndroidX。
2.1 迁移操作步骤:
- 启动迁移:打开 demo 项目,在顶部菜单栏点击 Refactor > Migrate to AndroidX... 。
- 备份项目:在弹出的对话框中,强烈建议勾选 Backup project as Zip file。由于迁移过程涉及全量代码修改,备份可以防止不可预知的转换错误导致代码损坏。
- 分析视图:点击 Migrate 后,Android Studio 会在底部的
Refactoring Preview窗口列出所有将要修改的文件和位置。 - 执行重构:确认列表无误后,点击底部的 Do Refactor 按钮完成转换。
2.2 软件版本要求说明
并不是所有的 Android Studio 版本都支持一键迁移。请确保您的开发环境满足以下要求:
- 最低版本要求:Android Studio 3.2 及以上版本。
- 3.2 版本是 Google 正式引入 AndroidX 迁移工具的起点。
- 推荐版本:建议使用 Android Studio Dolphin (2021.3.1) 或更高版本(如 Hedgehog、Iguana 等),因为新版本对 Jetifier(第三方库转换)的支持更加稳定,且处理 Gradle 脚本冲突的能力更强。
- 历史版本归档: Android Studio Download Archives,如遇到较低或较高版本找不到 Migrate to AndroidX... 功能,可以在这里找到 Android Studio Dolphin (2021.3.1) 版本安装。
