08-自然壁紙實戰教程-視頻列表-云

08-自然壁紙實戰教程-視頻列表

前言

視頻列表頁面本質上也是一個數據展示的列表,不同之處在于之前是是展示壁紙,Image組件負責渲染,這里展示的是視頻,使用Video組件,另外視頻頁面也實現了下載的基本功能,由于視頻往往比圖片要大,所以這里的下載是比較耗時的,因此使用了多線程技術taskpool實現了視頻的下載,并且保存到相冊。

image-20250701081028571

視頻搜索

image-20250701081116823

這個模塊其實是老模塊了,這里直接提供代碼

  // 頂部搜索欄Row() {TextInput({ placeholder: '搜索視頻...', text: $$this.videoViewModel.searchText }).width('80%').height(40).backgroundColor('#F5F5F5').borderRadius(20).padding({ left: 15, right: 15 }).onChange((text) => {this.videoViewModel.params.q = text}).onSubmit(async () => {await this.videoViewModel.search()})Button('搜索').width('18%').height(40).margin({ left: 8 }).borderRadius(20).backgroundColor('#3366CC').onClick(async () => {await this.videoViewModel.search()})}.width('100%').padding(10).margin({ top: 6 })

視頻分類

image-20250701081239094

視頻分類頁面也是一個常規的分類滾動結構,可以出用Scroll組件完成基本結構

  Row() {Text('類型:').fontSize(16).fontWeight(FontWeight.Medium).margin({ right: 10 })// 使用Scroll實現橫向滾動Scroll() {Row() {// 使用categories數據源ForEach(LocalData.CategoryData, (item: ICategory) => {Button({ type: ButtonType.Capsule }) {Text(item.text).fontSize(16).fontColor(this.videoViewModel.selectedCategory === item.value ? '#FFFFFF' : '#333333').padding({ left: 5, right: 5 })}.backgroundColor(this.videoViewModel.selectedCategory === item.value ? '#3366CC' : '#F0F0F0').margin({ right: 12 }).height(40).width('auto').padding({ left: 15, right: 15 }).onClick(() => {this.videoViewModel.selectCategory(item.value)})})}.width('auto')}.scrollable(ScrollDirection.Horizontal).scrollBar(BarState.Off).width('80%').layoutWeight(1)}.width('100%').padding({ left: 10, right: 10, bottom: 10 }).alignItems(VerticalAlign.Center)

LocalData.CategoryData 數據源

  static readonly CategoryData: ICategory[] = [{"id": 0,"text": "背景","value": "backgrounds","icon": "🌅"},{"id": 1,"text": "時尚","value": "fashion","icon": "👔"},{"id": 2,"text": "自然","value": "nature","icon": "🌲"},{"id": 3,"text": "科學","value": "science","icon": "🔬"},{"id": 4,"text": "教育","value": "education","icon": "📚"},{"id": 5,"text": "感情","value": "feelings","icon": "??"},{"id": 6,"text": "健康","value": "health","icon": "🏥"},{"id": 7,"text": "人","value": "people","icon": "👥"},{"id": 8,"text": "宗教","value": "religion","icon": "🙏"},{"id": 9,"text": "地方","value": "places","icon": "🌆"},{"id": 10,"text": "動物","value": "animals","icon": "🐱"},{"id": 11,"text": "工業","value": "industry","icon": "🏭"},{"id": 12,"text": "計算機","value": "computer","icon": "💻"},{"id": 13,"text": "食品","value": "food","icon": "🍜"},{"id": 14,"text": "體育","value": "sports","icon": "🏃"},{"id": 15,"text": "交通","value": "transportation","icon": "🚗"},{"id": 16,"text": "旅行","value": "travel","icon": "??"},{"id": 17,"text": "建筑物","value": "buildings","icon": "🏢"},{"id": 18,"text": "商業","value": "business","icon": "💼"},{"id": 19,"text": "音樂","value": "music","icon": "🎵"}]

視頻列表

image-20250701081326639

這里是視頻列表,我們發送請求獲取到視頻數據后,使用 LazyForEach 結合 List 實現的視頻列表渲染

      // 視頻列表if (this.videoViewModel.videoList.totalCount() > 0) {List() {LazyForEach(this.videoViewModel.videoList, (video: VideoData, index: number) => {ListItem() {Column() {// 視頻縮略圖Stack() {Image(video.videos?.medium?.thumbnail || '').width('100%').height(200).borderRadius(8).objectFit(ImageFit.Cover)// 播放時長if (video.duration) {Text(CommonUtils.formatDuration(video.duration)).fontSize(12).fontColor($r('sys.color.comp_background_list_card')).backgroundColor('rgba(0, 0, 0, 0.6)').borderRadius(4).padding({left: 6,right: 6,top: 2,bottom: 2})}}.width('100%').alignContent(Alignment.BottomEnd)// 視頻信息Row() {Column() {Text(video.tags.split(',')[0] || '未知標題').fontSize(16).fontWeight(FontWeight.Bold).margin({ top: 8, bottom: 4 }).maxLines(1).textOverflow({ overflow: TextOverflow.Ellipsis })Row() {Text(`${video.views || 0} 次觀看`).fontSize(12).fontColor('#666666')Text(`${video.likes || 0}`).fontSize(12).fontColor('#666666').margin({ left: 10 })}}.alignItems(HorizontalAlign.Start).layoutWeight(1)}.width('100%').padding({left: 4,right: 4,top: 4,bottom: 8})}.width('100%').borderRadius(8).backgroundColor($r('sys.color.comp_background_list_card')).margin({ bottom: 12 })}.onAppear(() => {if (index == (this.videoViewModel.videoList.totalCount() - 5)) {this.videoViewModel.loadMore()}}).onClick(() => {NavigationUtils.getInstance().navigatePush(NavigationConst.Video_Player_View, video)})}, (video: VideoData, index: number) => video.id.toString())}.width('100%').layoutWeight(1).padding({ left: 10, right: 10 }).cachedCount(10)}

視頻詳情

視頻詳情是通過點擊視頻卡片,然后通過Navigation跳轉實現的

 NavigationUtils.getInstance().navigatePush(NavigationConst.Video_Player_View, video)

關于我們

關于青藍逐碼組織

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/88882.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/88882.shtml
英文地址,請注明出處:http://en.pswp.cn/web/88882.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SCI特刊征稿

我們團隊聯合北京工業大學研究團隊在SCI源刊CMC組織了特刊SI: Advanced Edge Computing and Artificial Intelligence in Smart Environment,主要收錄邊緣計算和人工智能方向的文章,歡迎領域專家和學者投稿,網址https://www.techscience.com/cmc/special…

DO,VO,DTO.....

在 Java 項目里(尤其是 Spring、MyBatis 這類框架),經常會看到一堆以 O 結尾的類:VO、DO、DTO、BO、POJO……它們本質上都是普通的 Java Bean(即 POJO),但職責和出現的位置不同。下面用“用戶下…

數據結構之并查集和LRUCache

系列文章目錄 數據結構之ArrayList_arraylist o(1) o(n)-CSDN博客 數據結構之LinkedList-CSDN博客 數據結構之棧_棧有什么方法-CSDN博客 數據結構之隊列-CSDN博客 數據結構之二叉樹-CSDN博客 數據結構之優先級隊列-CSDN博客 常見的排序方法-CSDN博客 數據結構之Map和Se…

UE5多人MOBA+GAS 21、給升龍添加連段攻擊,從角色的按下事件中傳遞事件給GA

文章目錄給升龍制作可連段緩存下一連段用普攻鍵來觸發升龍后續的連段在角色中發送按下普攻標簽事件在升龍中接收按下事件,觸發連段以及傷害和力量的傳遞最后在藍圖中設置一下升龍技能的完整代碼給升龍制作可連段 給升龍技能添加一些連段 緩存下一連段 緩存下一連…

基于光柵傳感器+FPGA+ARM的測量控制解決方案

基于光柵傳感器結合FPGA與ARM的測量控制解決方案,通過硬件協同分工實現高精度、實時性及多場景適應性:?? ?一、系統架構分工??傳感層(光柵傳感器)?采用光柵尺輸出正交脈沖信號,分辨率達0.5μm,精度1μ…

NW831NW910美光固態閃存NW887NW888

美光固態閃存深度解析:NW831、NW910、NW887、NW888系列全方位評測一、技術根基與架構創新美光NW系列固態閃存的技術突破源于其先進的G9 NAND架構,該架構采用5納米制程工藝和多層3D堆疊技術,在單位面積內實現了高達256層的存儲單元堆疊&#x…

reasense api 文檔

API 架構 英特爾實感(Intel RealSense?)API 提供對深度攝像頭流數據的配置、控制和訪問功能。該 API 支持通過高層級 API 快速啟用攝像頭基礎功能,或通過底層級 API 全面控制所有攝像頭設置。請根據需求選擇合適的 API: 高層級 P…

ArkTs實現骰子布局

Entry Component struct workA {// 定義6種顏色數組,使用ResourceColor類型確保顏色值合法性State color: ResourceColor[] [#ef2816, #f0a200, #6ab002, #005868, #41192e, #141411]// 定義公共樣式裝飾器,避免重復樣式代碼Stylesys() {// 白色圓形基礎…

c語言內存函數以及數據在內存中的存儲

代碼見:登錄 - Gitee.com 1. memcpy使用和模擬實現 strcpy,strncpy是拷貝字符串的,有局限性 函數原型: void * memcpy ( void * destination, const void * source, size_t num ); 功能: memcpy 是完成內存塊拷?的…

Codeforces Round 787 (Div. 3)(A,B,C,D,E,F,G)

Codeforces Round 787 (Div. 3) - Codeforces A. Food for Animals 題意 有a袋狗糧,b袋貓糧,c袋通用糧食,問現在有x只狗y只貓,每一個動物都要吃一袋糧食,問糧食夠不夠吃 思路 首先肯定考慮貓吃貓糧,狗吃狗糧。然后再考慮如果不夠吃的話才會去吃通用…

LLaMA-Factory的webui快速入門

一、webui的啟動方式 LLaMA-Factory 支持通過 WebUI 零代碼微調大語言模型。 在完成安裝 后,您可以通過以下指令進入 WebUI: llamafactory-cli webui 使用上面命令啟動服務后,即可使用默認7860端口進行訪問。訪問地址:http://ip:7860,截止…

【第四節】ubuntu server安裝docker

首先更新軟件源 sudo apt update sudo apt upgrade安裝docker 下載 Docker 官方 GPG 密鑰 # 1. 下載 Docker 官方 GPG 密鑰 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg再次更新軟件源…

Kubernetes的微服務

用控制器來完成集群的工作負載,那么應用如何暴漏出去?需要通過微服務暴漏出去后才能被訪問Service是一組提供相同服務的Pod對外開放的接口。借助Service,應用可以實現服務發現和負載均衡。service默認只支持4層負載均衡能力,沒有7…

退出登錄后頭像還在?這個緩存問題坑過多少前端!

目錄 1. 為什么退出登錄后頭像還在? ① 緩存沒清理干凈 ② 頭像URL沒更新 ③ 后端會話失效,但靜態資源可訪問 2. 怎么解決?5種常見方案 ? 方案1:強制刷新頁面(簡單粗暴) ? 方案2:給頭像…

Windows下白嫖ClaudeCode

我的邀請鏈接:https://anyrouter.top/register?afffMJn 我的邀請鏈接:https://anyrouter.top/register?afffMJn 我的邀請鏈接:https://anyrouter.top/register?afffMJn 兄弟們,交個朋友啊!一定要用我的呀&#xff0…

windows在anaconda中下載安裝fasttext

windows在anaconda中下載安裝fasttext 1.訪問fasttext-wheel,點擊對應鏈接,下載對應Python版本、操作系統類型 的.whl文件: 鏈接地址:https://pypi.org/project/fasttext-wheel/#files 打開anaconda終端,切換到上面的…

mysql5.7系列-索引下推(cover_index)

什么是索引下推 ICP(Index Condition Pushdown)是在MySQL 5.6版本上推出的查詢優化策略,把本來由Server層做的索引條件檢查下推給存儲引擎層來做,以降低回表和訪問存儲引擎的次數,提高查詢效率。 回顧下mysql的架構分…

計算機網絡(基礎概念)

計算機網絡(基礎概念)1 初識協議1.1 協議分層2 OSI七層模型2.1 物理層2.2 數據鏈路層2.3 網絡層2.4 傳輸層2.5 應用層3 TCP/IP協議族3.1 什么是TCP/IP協議?3.1.1 OS與網絡關系4 網絡傳輸的基本流程4.1 局域網4.2 MAC地址5 跨網絡傳輸5.1 IP地址6 Socket…

專題 JavaScript 函數基礎

你將知道:函數聲明和表達式函數聲明和表達式之間的區別什么是匿名函數什么是 IIFE命名函數表達式this 關鍵字函數是調用該函數時執行的代碼塊 。函數聲明和表達式讓我們回顧一下它的語法:functionfunctionName(param1, param2, ..., paramN) {// Functio…

數據結構——優先隊列(priority_queue)的巧妙運用

優先隊列是一種相對高級的數據結構,它的底層原理是二叉堆。然而本篇不會執著于深挖其背后的原理,更主要的是理一下它在題目中的一些實用方法,幫助你更快的上手使用。 優先隊列(priority_queue) 優先隊列的特別之處就在于它可以自動進行排序&…