保利威文档中心

帮助中心

13.faq

更新时间:2025-12-30 14:33:59

1. 如何修改倍速选项

为了修改倍速选项,需要修改以下3个文件:

  1. polyv_controller_media_center_speed.xml (横屏倍速选择布局)
  2. polyv_controller_media_center_speed_portrait.xml (竖屏倍速选择布局)
  3. PolyvPlayerMediaController.java (媒体控制器逻辑代码)

以下示例如何添加2.5倍速:

步骤说明:

  1. 修改横屏倍速选择布局 polyv_controller_media_center_speed.xml

res/layout/polyv_controller_media_center_speed.xml 文件中,找到 <LinearLayout> 内部用于显示倍速选项的 TextView 列表。您需要在 tv_speed20tv_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" />
  1. 修改竖屏倍速选择布局 polyv_controller_media_center_speed_portrait.xml

res/layout/polyv_controller_media_center_speed_portrait.xml 文件中,同样需要在 tv_speed20_portraittv_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" />
  1. 修改 PolyvPlayerMediaController.java

这个文件是核心逻辑部分,需要进行多处修改。

  1. 声明新的 TextView 变量:PolyvPlayerMediaController 类顶部,找到倍速相关的 TextView 声明,并添加新定义的 tv_speed25_portraittv_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;
    
  2. 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);
    
  3. initView() 方法中为新的 TextView 设置点击监听器: 找到 initView() 方法,并为 tv_speed25_portraittv_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);
    // ...
    
  4. 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");
        }
    }
    
  5. 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 迁移操作步骤:

  1. 启动迁移:打开 demo 项目,在顶部菜单栏点击 Refactor > Migrate to AndroidX...
  2. 备份项目:在弹出的对话框中,强烈建议勾选 Backup project as Zip file。由于迁移过程涉及全量代码修改,备份可以防止不可预知的转换错误导致代码损坏。
  3. 分析视图:点击 Migrate 后,Android Studio 会在底部的 Refactoring Preview 窗口列出所有将要修改的文件和位置。
  4. 执行重构:确认列表无误后,点击底部的 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) 版本安装。
联系客服,在线咨询