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) 版本安裝。
