#429,解决弧形列表风格,功能界面返回列表界面默认回到列表头部位置(需求)
authorluozheng <1732036298@qq.com>
Sat, 12 Oct 2024 07:31:41 +0000 (15:31 +0800)
committerluozheng <1732036298@qq.com>
Sat, 12 Oct 2024 07:31:41 +0000 (15:31 +0800)
code/sdk/application/wearable/fd230app/nativeui/applist/include/ApplistModel.h
code/sdk/application/wearable/fd230app/nativeui/applist/include/ApplistPresenter.h
code/sdk/application/wearable/fd230app/nativeui/applist/src/ApplistModel.cpp
code/sdk/application/wearable/fd230app/nativeui/applist/src/ApplistPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/applist/src/ApplistView.cpp

index 8474614..9bd793f 100644 (file)
@@ -45,6 +45,10 @@ public:
     uint16_t GetStartIndex(void);
     void SetHeadItemY(int index);
     int GetHeadItemY(void);
+    void SetArcListStartIndex(uint16_t index);
+    uint16_t GetArcListStartIndex(void);
+    void GetArcListHeadItemY(int y);
+    int GetArcListHeadItemY(void);
     void ApplistUpdate(void);
     void SetPresenter(ApplistPresenter *p);
     AppListStyle GetCurrentStyle(void);
@@ -61,8 +65,10 @@ private:
     int32 bundleLen = 0;
     uint8 appLen = 0;
 
-    uint16_t startIndex = 0;
-    int headItemY = 0;
+    uint16_t arcListstartIndex = 0; // 圆弧列表起始位置
+    int arcListheadItemY = 0;       // 圆弧列表头部位置
+    uint16_t startIndex = 0;        // 列表起始位置
+    int headItemY = 0;              // 列表头部位置
     bool initFlag{false};
 };
 }
index 29d65a1..f68c1f5 100644 (file)
@@ -35,6 +35,10 @@ namespace OHOS {
         uint16_t GetStartIndex(void);
         void SetHeadItemY(int y);
         int GetHeadItemY(void);
+        void SetArcListStartIndex(uint16_t index);
+        uint16_t GetArcListStartIndex(void);
+        void SetArcListHeadItemY(int y);
+        int GetArcListHeadItemY(void);
         uint8_t GetListItemNum(void);
         ApplistView* GetAppListView();
         AppListStyle GetCurrentStyle(void);
index 6602e79..ae71146 100644 (file)
@@ -227,6 +227,29 @@ namespace OHOS
         return headItemY;
     }
 
+    //设置弧形列表的起始位置
+    void ApplistModel::SetArcListStartIndex(uint16_t index)
+    {
+        arcListstartIndex = index;
+    }
+
+    //获取弧形列表的起始位置
+    uint16_t ApplistModel::GetArcListStartIndex(void)
+    {
+        return arcListstartIndex;
+    }
+
+    //设置弧形列表的头部位置
+    void ApplistModel::GetArcListHeadItemY(int y)
+    {
+        arcListheadItemY = y;
+    }
+    //获取弧形列表的头部位置
+    int ApplistModel::GetArcListHeadItemY(void)
+    {
+        return arcListheadItemY;
+    }
+
     void ApplistModel::ApplistUpdate(void)
     {
         ResolvingJSAppItems();
index 564c309..9269219 100644 (file)
@@ -239,6 +239,31 @@ namespace OHOS
         return model->GetHeadItemY();
     }
 
+    //设置弧形列表起始索引
+    void ApplistPresenter::SetArcListStartIndex(uint16_t index)
+    {
+        model->SetArcListStartIndex(index);
+        return;
+    }
+
+    //获取弧形列表起始索引
+    uint16_t ApplistPresenter::GetArcListStartIndex(void)
+    {
+        return model->GetArcListStartIndex();
+    }
+
+    //设置弧形列表头部Item的Y坐标
+    void ApplistPresenter::SetArcListHeadItemY(int y)
+    {
+        model->GetArcListHeadItemY(y);
+    }
+
+    //获取弧形列表头部Item的Y坐标
+    int ApplistPresenter::GetArcListHeadItemY(void)
+    {
+        return model->GetArcListHeadItemY();
+    }
+
     uint8_t ApplistPresenter::GetListItemNum(void)
     {
         return model->GetAppListNum();
index 897e2ed..285147d 100644 (file)
@@ -288,7 +288,7 @@ void ApplistView::ArcScaleListStyleOnStart(void)
     
         ArcScaleList_->SetPosition(ARC_SCALE_LIST_X, ARC_SCALE_LIST_Y, ARC_SCALE_LIST_WIDTH, ARC_SCALE_LIST_HEIGHT);
         ArcScaleList_->SetItemTransformFunc(&TransformItemBaseOnPosition);
-        ArcScaleList_->SetAdapter(ArcScaleListAdapter_);
+        // ArcScaleList_->SetAdapter(ArcScaleListAdapter_);
         ArcScaleList_->SetDraggable(true);
         ArcScaleList_->SetThrowDrag(true);
         ArcScaleList_->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT);
@@ -365,8 +365,15 @@ void ApplistView::ListStyleOnSetUpView()
         startIndex = presenter_->GetListItemNum() - 1;
         headY = VERTICAL_RESOLUTION / NUM_2;
     } else {
-        startIndex = presenter_->GetStartIndex();
-        headY = presenter_->GetHeadItemY();
+        uint16_t presliceId = NativeAbility::GetInstance().GetPreSliceId();
+        if (presliceId == VIEW_MAIN) //如果是从主页进入的,那么startIndex = 0,headY = 0
+        {
+            startIndex = 0;
+            headY = 0;
+        } else {
+            startIndex = presenter_->GetStartIndex();
+            headY = presenter_->GetHeadItemY(); 
+        } 
         if (headY == 0) {
             headY = VERTICAL_RESOLUTION / NUM_2;
         }
@@ -379,7 +386,35 @@ void ApplistView::ListStyleOnSetUpView()
 
 void ApplistView::ArcScaleListStyleOnSetUpView(void)
 {
-    // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ApplistView::ArcScaleListStyleOnSetUpView [%d]", __LINE__);
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ApplistView::ArcScaleListStyleOnSetUpView [%d]", __LINE__);
+    if (ArcScaleList_ == nullptr || ArcScaleListAdapter_ == nullptr) {
+        return;
+    }
+
+    uint16_t startIndex = 0;
+    int16_t headY = 0;
+    if (presenter_->GetArcListStartIndex() >= presenter_->GetListItemNum()) { 
+        startIndex = presenter_->GetListItemNum() - 1;
+        headY = VERTICAL_RESOLUTION / NUM_2;
+    } else {
+        uint16_t presliceId = NativeAbility::GetInstance().GetPreSliceId();
+        if (presliceId == VIEW_MAIN) //如果是从主页进入的,那么startIndex = 0,headY = 0
+        {
+            startIndex = 0;
+            headY = 0;
+        } else { //如果是从其他页面进入的,那么startIndex = presenter_->GetArcListStartIndex(),headY = presenter_->GetArcListHeadItemY()
+            startIndex = presenter_->GetArcListStartIndex();
+            headY = presenter_->GetArcListHeadItemY();
+        }
+        if (headY == 0) { 
+            headY = VERTICAL_RESOLUTION / NUM_2;
+        }
+    }
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[%d],startIndex = %d,headY = %d", __LINE__,startIndex,headY);
+    ArcScaleList_->SetStartIndex(startIndex);//设置起始索引。
+    ArcScaleList_->SetAdapter(ArcScaleListAdapter_);
+    ArcScaleList_->ScrollBy(headY);//滚动到指定的 headY 位置。
+    return;
 }
 
 void ApplistView::OnTearDownView()
@@ -489,6 +524,12 @@ void ApplistView::ArcScaleListStyleOnStop(void)
         // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ApplistView::ArcScaleListStyleOnStop [%d]", __LINE__);
         ArcScaleListGroup_->RemoveAll();
     }
+    int16_t arclistHeadY = ArcScaleList_->GetChildrenHead()->GetY();
+    int16_t arclistHeadIndex = ArcScaleList_->GetChildrenHead()->GetViewIndex();
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[%d],listHeadY = %d,listHeadIndex = %d", __LINE__,arclistHeadY,arclistHeadIndex);
+    presenter_->SetArcListHeadItemY(arclistHeadY);         //设置头部Y坐标
+    presenter_->SetArcListStartIndex(arclistHeadIndex);   //设置头部Index
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ApplistView::ListStyleOnStop end...");
 }
 
 void ApplistView::AddAppItemToList(const AppItem &item)