99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

HarmonyOS開發(fā)案例:【Swiper的實戰(zhàn)】

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-04-28 14:41 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

介紹

主要介紹了滑動容器組件Swiper的幾種常見的應用場景,包括頂部導航、輪播圖以及視頻滑動播放。

相關概念

  • [Swiper]:滑動容器,提供子組件切換滑動的能力。
  • [Stack]:堆疊容器,子組件按照順序依次入棧,后入棧組件在先入棧組件上方顯示。
  • [Video]:視頻播放組件。
  • [Observed和ObjectLink數(shù)據(jù)管理]:
    • @Observed應用于類,表示該類中的數(shù)據(jù)變更被UI頁面管理,例如:@Observed class ClassA {}。
    • @ObjectLink應用于被@Observed所裝飾類的對象,例如:@ObjectLink a: ClassA。

環(huán)境搭建

軟件要求

  • [DevEco Studio]版本:DevEco Studio 3.1 Release。
  • OpenHarmony SDK版本:API version 9。

硬件要求

  • 開發(fā)板類型:[潤和RK3568開發(fā)板]。
  • OpenHarmony系統(tǒng):3.2 Release。

環(huán)境搭建

完成本篇Codelab我們首先要完成開發(fā)環(huán)境的搭建,本示例以RK3568開發(fā)板為例,參照以下步驟進行:

  1. [獲取OpenHarmony系統(tǒng)版本]:標準系統(tǒng)解決方案(二進制)。以3.2 Release版本為例:
  2. 搭建燒錄環(huán)境。
    1. [完成DevEco Device Tool的安裝]
    2. [完成RK3568開發(fā)板的燒錄]
  3. 搭建開發(fā)環(huán)境。
    1. 開始前請參考[工具準備],完成DevEco Studio的安裝和開發(fā)環(huán)境配置。
    2. 開發(fā)環(huán)境配置完成后,請參考[使用工程向導]創(chuàng)建工程(模板選擇“Empty Ability”)。
    3. 工程創(chuàng)建完成后,選擇使用[真機進行調測]。
    4. 鴻蒙開發(fā)指導文檔:[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md]

代碼結構解讀

本篇Codelab只對核心代碼進行講解,完整代碼可以直接從gitee獲取。

├──entry/src/main/ets                 // 代碼區(qū)
│  ├──common                          
│  │  └──constants                    
│  │     ├──CommonConstant.ets        // 公共常量 
│  │     ├──PictureConstants.ets      // 圖片所使用的常量
│  │     ├──TopBarConstants.ets       // TopBar使用的常量
│  │     └──VideoConstants.ets        // Video使用的常量                       
│  ├──entryability                      
│  │  └──EntryAbility.ts              // 程序入口類                          
│  ├──pages                            
│  │  ├──PageVideo.ets                // 視頻播放頁
│  │  └──SwiperIndex.ets              // 應用首頁                          
│  ├──view                             
│  │  ├──all                          
│  │  │  └──PictureSort.ets           // “全部”tab頁圖片類別組件                           
│  │  ├──common                        
│  │  │  ├──Banner.ets                // 輪播圖組件
│  │  │  ├──PictureView.ets           // 圖片組件
│  │  │  └──TopBar.ets                // 頂部導航組件                           
│  │  ├──movie                         
│  │  │  └──MovieSort.ets             // “電影”tab頁圖片類別組件                        
│  │  ├──play                         // 視頻播放組件目錄 
│  │  │  ├──CommentView.ets           // 評論模塊組件
│  │  │  ├──DescriptionView.ets       // 視頻描述信息組件
│  │  │  ├──NavigationView.ets        // 頂部返回導航組件
│  │  │  └──PlayView.ets              // 視頻滑動播放組件                         
│  │  └──tabcontent                   // tab內(nèi)容組件 
│  │     ├──PageAll.ets               // 全部tab頁
│  │     ├──PageEntertainment.ets     // 娛樂tab頁
│  │     ├──PageGame.ets              // 游戲tab頁
│  │     ├──PageLive.ets              // 直播tab頁
│  │     ├──PageMovie.ets             // 電影tab頁
│  │     └──PageTV.ets                // 電視tab頁                        
│  └──viewmodel                        
│     ├──PictureItem.ets              // 圖片對象 
│     ├──PictureViewModel.ets         // 圖片模型
│     ├──TopBarItem.ets               // 頂部導航對象  
│     ├──TopBarViewModel.ets          // 頂部導航模型  
│     ├──VideoItem.ets                // 視頻對象     
│     └──VideoViewModel.ets           // 視頻模型
└──entry/src/main/resources           // 應用資源目錄

`HarmonyOSOpenHarmony鴻蒙文檔籽料:mau123789v直接拿`

搜狗高速瀏覽器截圖20240326151344.png

頂部導航場景

應用首頁首頁使用Swiper組件實現(xiàn)了頂部導航的應用場景。用戶點擊不同的分類標題,會切換展示不同的界面內(nèi)容。同時也支持用戶左右滑動界面,對應導航標題聯(lián)動變化的效果。

實現(xiàn)這種效果,我們只需將界面劃分為兩部分:導航欄與內(nèi)容區(qū)。導航欄使用自定義組件TopBar實現(xiàn),內(nèi)容區(qū)使用Swiper組件實現(xiàn)。

@State和@Link裝飾符配合使用,實現(xiàn)TopBar組件標題與Swiper組件索引的雙向綁定。內(nèi)容區(qū)內(nèi)容滑動時,會觸發(fā)Swiper的onChange事件,并改變索引index的值。前面已經(jīng)通過特定修飾符實現(xiàn)了索引的雙向綁定。因此該索引值的變化會使TopBar的索引值同步變化,實現(xiàn)TopBar和Swiper的聯(lián)動效果。

// SwiperIndex.ets
struct SwiperIndex {
  // 索引值雙向綁定 實現(xiàn)聯(lián)動效果.
  @State index: number = 0;

  build() {
    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Start }) {
      TopBar({ index: $index })
      Swiper() {
        PageAll()
        PageMovie()
        PageTV()
        PageEntertainment()
        PageLive()
        PageGame()
      }
      .index(this.index)
      .indicator(false)
      .loop(false)
      .onChange((index: number) = > {
        this.index = index;
      })
    }
    .backgroundColor($r('app.color.start_window_background'))
  }
}

點擊導航欄中的不同標題時,會觸發(fā)TopBar中的onClick事件,并改變對應的索引值。同理,該索引的變化會使Swiper的索引值同步變化,實現(xiàn)Swiper和TopBar的聯(lián)動效果。

// TopBar.ets
export struct TopBar {
  // 索引值雙向綁定 實現(xiàn)聯(lián)動效果
  @Link index: number;
  private tabArray: Array< TopBarItem > = initializeOnStartup();

  build() {
    Row({ space: CommonConstants.SPACE_TOP_BAR }) {
      ForEach(this.tabArray,
        (item: TopBarItem) = > {
          Text(item.name)
            .fontSize(this.index === item.id ? $r('app.float.font_size_checked') : $r('app.float.font_size_unchecked'))
            .fontColor(Color.Black)
            .textAlign(TextAlign.Center)
            .fontWeight(this.index === item.id ? FontWeight.Bold : FontWeight.Regular)
            .onClick(() = > {
              this.index = item.id;
            })
        }, (item: TopBarItem) = > JSON.stringify(item))
    }
    .margin({ left: CommonConstants.ADS_LEFT })
    .width(CommonConstants.FULL_WIDTH)
    .height(CommonConstants.TOP_BAR_HEIGHT)
  }
}

最終實現(xiàn)導航欄與內(nèi)容區(qū)的雙向聯(lián)動效果。

輪播圖場景

輪播圖常見于各種應用首頁,用于各類信息、資訊的輪番展示。本應用使用Swiper組件,同樣實現(xiàn)了這一能力。“全部”頁簽的“電影精選”部分,即為一個電影內(nèi)容的輪播模塊。它可以切換展示不同電影內(nèi)容。

我們將輪播圖模塊定義為一個自定義組件Banner。在Banner組件創(chuàng)建新實例時,會初始化輪播內(nèi)容并開啟定時任務。定時任務通過調用swiperController.showNext()方法,控制Swiper組件切換內(nèi)容展示。

// Banner.ets
aboutToAppear() {
  // 內(nèi)容數(shù)據(jù)初始化
  this.imageArray = initializePictures(PictureType.BANNER);
  // 開啟定時輪播
  startPlay(this.swiperController);
}

// PictureViewModel.ets
export function startPlay(swiperController: SwiperController) {
  let timerId = setInterval(() = > {
    swiperController.showNext();
  }, CommonConstants.SWIPER_TIME);
  timerIds.push(timerId);
}

在Swiper組件內(nèi),將初始化數(shù)據(jù)進行循環(huán)渲染。配合開啟的定時任務,循環(huán)播放。

// Banner.ets
build() {
  Swiper(this.swiperController) {
    ForEach(this.imageArray, (item: PictureItem) = > {
      Stack({ alignContent: Alignment.TopStart }) {
        Image(item.image)
          ...
        Column() {
          Text($r('app.string.movie_classic'))
            .textStyle($r('app.float.font_size_description'), CommonConstants.FONT_WEIGHT_LIGHT)
            ...
          Text(item.name)
            .textStyle($r('app.float.font_size_title'), CommonConstants.FONT_WEIGHT_BOLD)
        }
        ...
      }
      .height(CommonConstants.FULL_HEIGHT)
      .width(CommonConstants.FULL_WIDTH)
    }, (item: PictureItem) = > JSON.stringify(item))
  }
  ...
}

視頻滑動播放場景

視頻滑動播放是Swiper組件的另一個常見應用場景。點擊應用首頁中的視頻圖片,會跳轉至視頻播放界面。我們可以通過上下滑動,切換播放的視頻內(nèi)容。

視頻播放界面通過函數(shù)initializeOnStartup初始化視頻內(nèi)容。在Swiper組件內(nèi)通過循環(huán)渲染的方式,將各個視頻內(nèi)容渲染成自定義組件PlayView。這樣每一個視頻內(nèi)容就是一個Swiper的子組件,就可以通過滑動的方式切換播放內(nèi)容。

// PageVideo.ets
build() {
  Column() {
    Swiper() {
      ForEach(this.videoArray, (item: VideoItem, index: number) = > {
        PlayView({
          index: $index,
          pageShow: $pageShow,
          item: item,
          barPosition: index
        });
      }, (item: VideoItem) = > JSON.stringify(item))
    }
    .width(CommonConstants.FULL_WIDTH)
    .height(CommonConstants.FULL_HEIGHT)
    .indicator(false)
    .loop(false)
    .vertical(true)
    .onChange((index: number) = > {
      this.index = index;
    })
  }
}

在自定義組件PlayView中,通過Video來控制視頻播放。另外,結合Stack容器組件,在視頻內(nèi)容上疊加點贊、評論、轉發(fā)等內(nèi)容。

// PlayView.ets
build() {
  Stack({ alignContent: Alignment.End }) {
    Video({
      src: this.item.src,
      controller: this.videoController
    })
      .controls(false)
      .autoPlay(this.playState === PlayState.START ? true : false)
      .objectFit(ImageFit.Fill)
      .loop(true)
      .height(CommonConstants.WIDTH_VIDEO)
      .width(CommonConstants.FULL_WIDTH)
      .onClick(() = > {
        if (this.playState === PlayState.START) {
          this.playState = PlayState.PAUSE;
          this.videoController.pause();
        } else if (this.playState === PlayState.PAUSE) {
          this.playState = PlayState.START;
          this.videoController.start();
        }
      })

    NavigationView()
    CommentView({ item: this.item })
    DescriptionView()
  }
  .backgroundColor(Color.Black)
  .width(CommonConstants.FULL_WIDTH)
  .height(CommonConstants.FULL_HEIGHT)
}

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 鴻蒙
    +關注

    關注

    60

    文章

    2623

    瀏覽量

    44076
  • HarmonyOS
    +關注

    關注

    80

    文章

    2126

    瀏覽量

    33153
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    OpenHarmony實戰(zhàn)開發(fā)-swiper開發(fā)指導

    ,同時可以期待后續(xù)文章ing?,不定期分享原創(chuàng)知識。 更多鴻蒙最新技術知識點,請關注作者博客:鴻蒙實戰(zhàn)經(jīng)驗分享:鴻蒙基礎入門開發(fā)寶典! (qq.com)
    發(fā)表于 04-29 16:14

    鴻蒙5開發(fā)寶藏案例分享---Swiper組件性能優(yōu)化實戰(zhàn)

    鴻蒙寶藏:Swiper組件性能優(yōu)化實戰(zhàn),告別卡頓丟幀! 大家好!最近在鴻蒙開發(fā)時,偶然發(fā)現(xiàn)了官方文檔里埋藏的 性能優(yōu)化寶藏案例 ,尤其是<span class=\"
    發(fā)表于 06-12 17:53

    《labview入門與實戰(zhàn)開發(fā)》經(jīng)典案例

    labview入門與實戰(zhàn)開發(fā)案例100例書中的案例資料供大家學習
    發(fā)表于 01-11 18:10 ?184次下載

    HarmonyOS測試技術與實戰(zhàn)-DECC測試服務

    HDC 2021華為開發(fā)HarmonyOS測試技術與實戰(zhàn)-DECC測試服務
    的頭像 發(fā)表于 10-23 14:40 ?1743次閱讀
    <b class='flag-5'>HarmonyOS</b>測試技術與<b class='flag-5'>實戰(zhàn)</b>-DECC測試服務

    HarmonyOS測試技術與實戰(zhàn)-HarmonyOS分布式應用特征與挑戰(zhàn)

     HDC 2021華為開發(fā)者大會HarmonyOS測試技術與實戰(zhàn)-HarmonyOS分布式應用特征與挑戰(zhàn)
    的頭像 發(fā)表于 10-23 14:41 ?1950次閱讀
    <b class='flag-5'>HarmonyOS</b>測試技術與<b class='flag-5'>實戰(zhàn)</b>-<b class='flag-5'>HarmonyOS</b>分布式應用特征與挑戰(zhàn)

    HarmonyOS測試技術與實戰(zhàn)-分布式應用測試解決方案

    HDC 2021華為開發(fā)者大會HarmonyOS測試技術與實戰(zhàn)-HarmonyOS分布式應用測試解決方案
    的頭像 發(fā)表于 10-23 14:48 ?1806次閱讀
    <b class='flag-5'>HarmonyOS</b>測試技術與<b class='flag-5'>實戰(zhàn)</b>-分布式應用測試解決方案

    HarmonyOS測試技術與實戰(zhàn)-應用評分工具

     HDC 2021華為開發(fā)者大會HarmonyOS測試技術與實戰(zhàn)-應用評分工具演示
    的頭像 發(fā)表于 10-23 14:55 ?1557次閱讀
    <b class='flag-5'>HarmonyOS</b>測試技術與<b class='flag-5'>實戰(zhàn)</b>-應用評分工具

    HarmonyOS測試技術與實戰(zhàn)-UX測試服務

    HDC 2021華為開發(fā)者大會HarmonyOS測試技術與實戰(zhàn)-UX測試服務
    的頭像 發(fā)表于 10-23 15:00 ?1414次閱讀
    <b class='flag-5'>HarmonyOS</b>測試技術與<b class='flag-5'>實戰(zhàn)</b>-UX測試服務

    HarmonyOS測試技術與實戰(zhàn)-HarmonyOS圖形棧測試技術深度解析

    HDC 2021華為開發(fā)者大會HarmonyOS測試技術與實戰(zhàn)-HarmonyOS圖形棧測試技術深度解析
    的頭像 發(fā)表于 10-23 15:09 ?1784次閱讀
    <b class='flag-5'>HarmonyOS</b>測試技術與<b class='flag-5'>實戰(zhàn)</b>-<b class='flag-5'>HarmonyOS</b>圖形棧測試技術深度解析

    HarmonyOS測試技術與實戰(zhàn)-HarmonyOS圖形棧整體架構和測試能力

    HDC 2021華為開發(fā)者大會HarmonyOS測試技術與實戰(zhàn)-HarmonyOS圖形棧整體架構和測試能力
    的頭像 發(fā)表于 10-23 15:11 ?1653次閱讀
    <b class='flag-5'>HarmonyOS</b>測試技術與<b class='flag-5'>實戰(zhàn)</b>-<b class='flag-5'>HarmonyOS</b>圖形棧整體架構和測試能力

    HarmonyOS測試技術與實戰(zhàn)-華為ArkUI開發(fā)框架和場景測試

    HDC 2021華為開發(fā)者大會HarmonyOS測試技術與實戰(zhàn)-華為ArkUI開發(fā)框架和場景測試
    的頭像 發(fā)表于 10-23 15:16 ?2141次閱讀
    <b class='flag-5'>HarmonyOS</b>測試技術與<b class='flag-5'>實戰(zhàn)</b>-華為ArkUI<b class='flag-5'>開發(fā)</b>框架和場景測試

    HarmonyOS測試技術與實戰(zhàn)-UI和渲染分離

    HDC 2021華為開發(fā)者大會 HarmonyOS測試技術與實戰(zhàn)-UI和渲染分離
    的頭像 發(fā)表于 10-23 15:23 ?1537次閱讀
    <b class='flag-5'>HarmonyOS</b>測試技術與<b class='flag-5'>實戰(zhàn)</b>-UI和渲染分離

    HarmonyOS測試技術與實戰(zhàn)-HarmonyOS自研圖形??偨Y

    HDC 2021華為開發(fā)者大會 HarmonyOS測試技術與實戰(zhàn)-HarmonyOS自研圖形??偨Y
    的頭像 發(fā)表于 10-23 15:47 ?1864次閱讀
    <b class='flag-5'>HarmonyOS</b>測試技術與<b class='flag-5'>實戰(zhàn)</b>-<b class='flag-5'>HarmonyOS</b>自研圖形棧總結

    華為開發(fā)者分論壇HarmonyOS學生公開課-OpenHarmony Codelabs開發(fā)案

    2021華為開發(fā)者分論壇HarmonyOS學生公開課-OpenHarmony Codelabs開發(fā)案
    的頭像 發(fā)表于 10-24 11:25 ?2177次閱讀
    華為<b class='flag-5'>開發(fā)</b>者分論壇<b class='flag-5'>HarmonyOS</b>學生公開課-OpenHarmony Codelabs<b class='flag-5'>開發(fā)案</b>例

    HarmonyOS開發(fā)案例:【視頻播放器】

    基于video、swiper和slider組件,實現(xiàn)簡單的視頻播放器,可支持海報輪播、視頻播放等功能。
    的頭像 發(fā)表于 04-22 21:06 ?1002次閱讀
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>開發(fā)案</b>例:【視頻播放器】