保利威文档中心

幫助中心

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) 版本安裝。
联系客服,在线咨询