Procházet zdrojové kódy

页面切换到后台时,封面会立即停止旋转;返回前台时,从当前角度继续旋转,不会再出现快速旋转多圈的问题

onecold před 6 měsíci
rodič
revize
77f0cd21f1

+ 7 - 0
entry/src/main/ets/pages/NewIndex.ets

@@ -248,6 +248,13 @@ struct NewIndex {
     this.loadPlaylistList()
     // 加载网盘账户列表
     this.loadWebDavAccounts()
+    // 通知 LocalMusic 页面已显示,恢复旋转
+    AppStorage.setOrCreate('isPageVisible', true)
+  }
+
+  onPageHide() {
+    // 通知 LocalMusic 页面已隐藏,停止旋转
+    AppStorage.setOrCreate('isPageVisible', false)
   }
   /**
    * 页面显示生命周期钩子

+ 12 - 4
entry/src/main/ets/view/LocalMusic.ets

@@ -1824,12 +1824,11 @@ export struct LocalMusic {
     await table.saveOrUpdateWebDavItem(cloneItem);
   }
 
-  onPageHide(): void {
+  onPageHide() {
     this.knockController?.immersiveDisableListening();
   }
 
 
-
   @State isFirstStartPlay: boolean = false
 
   private async startFileDeletionWatcher(): Promise<void> {
@@ -10616,10 +10615,17 @@ export struct LocalMusic {
   @State timer: number = 0
   @State rotateAngle: number = 0
   @State isRotationRunning: boolean = false // 旋转动画是否正在运行
+  @StorageProp('isPageVisible') @Watch('onPageVisibilityChange') isPageVisible: boolean = true // 页面可见性标志
+
+  // 页面可见性变化回调
+  onPageVisibilityChange() {
+    // 当页面可见性改变时,重新启动/停止旋转动画
+    this.animationRoFun()
+  }
 
   //封面旋转动画
   animationRoFun() {
-    if (this.isPlaying && !this.isCoverRectangle) {
+    if (this.isPlaying && !this.isCoverRectangle && this.isPageVisible) {
       // 启动旋转动画
       if (!this.isRotationRunning) {
         this.isRotationRunning = true
@@ -11538,7 +11544,7 @@ export struct LocalMusic {
         .visibility(this.isCoverOpacity() || this.isCoverRectangle ? Visibility.None : Visibility.Visible)
         .borderRadius('100%')
         .align(Alignment.Center)
-        .clip(true)// .rotate({ x: 0, y: 0, z: 1, angle: this.rotateAngle })
+        .clip(true)
         .rotate({
           angle: this.rotateAngle,
           centerX: "50%",
@@ -14163,6 +14169,8 @@ export struct LocalMusic {
 
 
   private async play(url: string,startOffset?:number) {
+    this.lyricController.setLyric(null)
+    this.lyricControllerSingle.setLyric(null)
     this.isShowBgLiuGUANG = PreferencesUtil.getBooleanSync('isShowBgLiuGUANG', false)
     console.info('onecold this.url 1= '+url)
     if(!url.toLowerCase().startsWith('http')){

+ 4 - 3
ijkplayer/src/main/cpp/ijkplayer/ijkplayer.c

@@ -662,9 +662,10 @@ int ijkmp_seek_to_l(IjkMediaPlayer *mp, long msec)
 
 int ijkmp_seek_to(IjkMediaPlayer *mp, long msec)
 {
-    if (!mp) {
-        LOGE("ijkmp_seek_to mp is null\n");
-        return EIJK_FAILED;
+    if (!mp || !mp->ffplayer || !mp->ffplayer->is || !mp->ffplayer->is->ic ||
+ 	         !mp->ffplayer->is->ic->iformat || !mp->ffplayer->is->ic->pb) {
+ 	         LOGE("ijkmp_seek_to_l mp is null\n");
+ 	         return EIJK_FAILED;
     }
     MPTRACE("ijkmp_seek_to(%ld)\n", msec);
     pthread_mutex_lock(&mp->mutex);