HarmonyOS應用基礎階段- 09、綜合案例-仿攜程旅行口碑榜

文章目錄

  • 攜程-口碑榜
    • 1、banner 區域
      • 1.1 區域部分
      • 1.2 口碑榜 Logo
      • 1.3 推薦榜單
      • 1.4 評分規則
      • 1.5 底部 Line
    • 2、選擇城市和目的地
      • 2.1 區域布局
      • 2.2 選擇城市
      • 2.3 口碑目的地
    • 3、商業選項菜單
    • 4、熱門項目選項
      • 4.1 區域布局
      • 4.2 熱門標題
      • 4.3 選項
    • 5、熱門榜標題
    • 6、熱門景點列表
      • 6.1 區域布局
      • 6.2 景點內容
        • 6.2.1 景點內容布局
        • 6.2.2 景點圖片區域
        • 6.2.3 景點文字 - 布局
        • 6.2.4 景點文字 - 標題
        • 6.2.5 景點文字 - 評分
        • 6.2.6 景點文字 - 上榜理由
        • 6.2.7 景點文字 - 標簽
        • 6.2.8 景點文字 - 地址

攜程-口碑榜

在這里插入圖片描述

口碑榜頁面共計 六 個區域:banner區域、選擇城市和目的地、商業選項菜單、熱門項目選項、熱門榜標題文字、熱門景點列表

1、banner 區域

在這里插入圖片描述
banner區域內容共計四部分:口碑榜 Logo、推薦榜單、評分規則、底部線條
注意:底部線條壓在榜單圖片上面,需要定位實現(position)

1.1 區域部分

實現思路:設置尺寸,添加背景圖
banner - 區域布局

Column(){}.width('100%').height(264).backgroundImage('/images/banner.png')

1.2 口碑榜 Logo

實現思路:添加 Image 圖片組件,并調整位置:margin、定位均可
banner - 口碑榜 Logo

// logo
Image('/images/log.png').width(200).offset({y: 70})

1.3 推薦榜單

水平滑動的榜單圖片列表: List > ListItem > Column > Image
banner - 推薦榜單

// 推薦榜單
List() {ListItem() {Column() {Image('/images/rank.png').width('34%')}}ListItem() {Column() {Image('/images/hot.png').width('34%')}}ListItem() {Column() {Image('/images/scenery.png').width('34%')}}ListItem() {Column() {Image('/images/ski.png').width('34%')}}
}.listDirection(Axis.Horizontal).position({y: 160}).height(82).scrollBar(BarState.Off)

1.4 評分規則

實現思路:Text 組件,添加寬、高、半透明背景色、圓角邊框等效果,并定位到區域最后側

  1. 定位 X 軸偏移為 100%,translate 向左移動自身寬度尺寸的 100%
    banner - 評分規則
// 評選規則
Text('評選規則').position({x: '100%', y: '42%'}).translate({x: '-100%'}).fontColor('#F6DFC8').fontSize(10).width(54).height(20).backgroundColor('rgba(255, 224, 208, 0.3)').borderRadius({ topLeft: 10, bottomLeft: 10}).textAlign(TextAlign.Center)

1.5 底部 Line

實現思路:添加 Image 組件,并定位到 banner 區域 最底部

  1. 定位Y軸偏移 100%,translate 向上移動自身高度尺寸的 100%
    banner - 底部Line
// 底部 line
Image($r('app.media.banner_line')).width('100%').position({x: 0, y: 226})

2、選擇城市和目的地

共計 2 部分內容:城市選項 和 目的地選項
在這里插入圖片描述

2.1 區域布局

實現思路:寬度 100%,主軸對齊方式 SpaceBetween
城市和目的地 - 區域布局

Row(){}.width('100%').justifyContent(FlexAlign.SpaceBetween).margin({top: 24, bottom: 24}).padding({left: 12, right: 12})

2.2 選擇城市

實現思路:漸變顏色的 Row 組件包含文本組件 Text 和 圖片組件 Image
選擇城市

Row({ space: 5}) {Text('北京').fontColor('#5F2B0E').fontSize(16).fontWeight(600)Image($r('app.media.ic_public_arrow_down_0')).width(16).height(16).backgroundColor('#5F2B0E').borderRadius(8).fillColor('#fff')
}.width(163).height(36).linearGradient({direction: GradientDirection.Right,colors: [['rgba(255, 226, 200, 1)', 0.0],['rgba(230, 175, 138, 1)', 0.5] ]}).borderRadius(18).justifyContent(FlexAlign.Center)

2.3 口碑目的地

實現思路:Row 組件包含 文本組件 Text

Row() {Text('口碑目的地').fontColor('#99532E').fontSize(16).fontWeight(500)
}.width(163).height(36).backgroundColor('rgba(248, 213, 184, 0.2)').borderRadius(18).justifyContent(FlexAlign.Center)

3、商業選項菜單

在這里插入圖片描述
實現思路:Row 組件里面包含四個文本組件

  1. 三個白色背景組件外觀相同:尺寸、背景色、圓角、陰影、居中對齊、文字大小
  2. “景點”文本組件為 漸變背景色,其他效果與白色組件相同
    商業選項菜單
// 區域三:商業選項菜單
Row() {Text('酒店').width(78).height(36).backgroundColor('#fff').borderRadius(4).shadow({ radius: 8, color: 'rgba(47, 27, 14, 0.07)', offsetX:1, offsetY: 1, fill: true}).textAlign(TextAlign.Center).fontSize(16).fontWeight(400)Text('景點').width(78).height(36).borderRadius(4).linearGradient({direction: GradientDirection.Right,colors: [['#CC9466', 0.0], ['#B36D3E', 1.0]]}).shadow({ radius: 8, color: 'rgba(47, 27, 14, 0.07)', offsetX:1, offsetY: 1, fill: true}).textAlign(TextAlign.Center).fontSize(16).fontWeight(400).fontColor('#fff')Text('夜游').width(78).height(36).backgroundColor('#fff').borderRadius(4).shadow({ radius: 8, color: 'rgba(47, 27, 14, 0.07)', offsetX:1, offsetY: 1, fill: true}).textAlign(TextAlign.Center).fontSize(16).fontWeight(400)Text('美食').width(78).height(36).backgroundColor('#fff').borderRadius(4).shadow({ radius: 8, color: 'rgba(47, 27, 14, 0.07)', offsetX:1, offsetY: 1, fill: true}).textAlign(TextAlign.Center).fontSize(16).fontWeight(400)
}.width('100%').justifyContent(FlexAlign.SpaceBetween).padding({left: 12, right: 12})

4、熱門項目選項

實現思路:一行排列標題和選項
在這里插入圖片描述

4.1 區域布局

實現思路:寬度 100%,標題和選項之間間距為35

Row({ space: 35}) {}.width('100%').padding({left: 12, right: 12})

4.2 熱門標題

實現思路:Row > Image + Text

  1. Row 組件設置背景圖,背景圖位置為 底部
    熱門標題
// 標題
Row({ space: 3 }) {Image($r('app.media.ic_hot')).width(16).fillColor('#CC9466')Text('近期熱門').fontColor('#673915').fontSize(14).fontWeight(600)
}.margin({top: 15, bottom: 15}).backgroundImage('/images/select.png').backgroundImagePosition(Alignment.Bottom)

4.3 選項

實現思路:選項區域寬度為父組件剩余尺寸的所有(layoutWeight),內容對齊方式為 SpaceBetween
選項

// 選項
Row() {Text('必打卡').fontSize(14).fontColor('#6666')Text('滑雪').fontSize(14).fontColor('#6666')Text('親子').fontSize(14).fontColor('#6666')Text('自然風光').fontSize(14).fontColor('#6666')
}.layoutWeight(1).justifyContent(FlexAlign.SpaceBetween)

5、熱門榜標題

在這里插入圖片描述
代碼實現

Text('北京近期熱門景點榜').fontSize(24).fontWeight(600).fontColor('#3D1A07').lineHeight(34)

6、熱門景點列表

在這里插入圖片描述
實現思路:List > ListItem

6.1 區域布局

實現思路:可垂直方向滾動的列表 List

List() {ListItem() {}.padding({ left:12,right:12,top:6,bottom:6 })
}.scrollBar(BarState.Off)

6.2 景點內容

6.2.1 景點內容布局

實現思路:Row組件包裹圖片區域和文字區域

  1. Row 組件:寬度100%、內邊距 padding、白色背景色、圓角、陰影、交叉軸對齊方式為頂對齊
Row({ space: 8}){}.width('100%').padding(12).backgroundColor('#fff').borderRadius(5).shadow({ radius: 8, color: 'rgba(0, 0, 0, 0.1)', offsetX: 0, offsetY: 2, fill: true}).alignItems(VerticalAlign.Top)
6.2.2 景點圖片區域

在這里插入圖片描述

實現思路:Row組件 > Image + Text

  1. 圖片:尺寸、圓角
  2. Text:背景圖、定位到父組件左上角
    代碼實現
// 圖片區域
Row() {Image('/images/universal.png').width(88).height(175).borderRadius(5)Text('No.1').width(50).height(28).backgroundImage('/images/no_icon.png').position({x: -4}).textAlign(TextAlign.Center).fontSize(11).fontWeight(700)
}
6.2.3 景點文字 - 布局

在這里插入圖片描述
實現思路:使用 Column 組件實現垂直排列多行內容

  1. 寬度:占用所有父組件剩余寬度
  2. 每行間距為 6
Column({ space: 6}){}.layoutWeight(1)
6.2.4 景點文字 - 標題

實現思路:Row > 標題文字 Text + 收藏圖標 Image

// 標題
Row() {Text('北京環球度假區').fontSize(16).fontWeight(600).lineHeight(20).fontColor('#000')Image($r('app.media.ic_xihuan')).width(18).fillColor('#444')
}
.width('100%').justifyContent(FlexAlign.SpaceBetween)
6.2.5 景點文字 - 評分

在這里插入圖片描述
景點文字 - 評分

// 評分
Row({space: 8}) {Row() {Image($r('app.media.ic_huo')).width(10).fillColor('#fff')Text('10').fontSize(12).fontColor('#fff')}.padding(4).borderRadius(4).linearGradient({direction: GradientDirection.Left, colors: [['#FF856E', 0.1], ['#FF902A', 1.0]]})Row({space: 3}) {Text('4.5分').fontSize(12).fontColor('#666')Text('1.8w條點評').fontSize(12).fontColor('#666')}Text('¥308起').fontSize(12).fontColor('#666')
}
.width('100%')
.justifyContent(FlexAlign.Start)
6.2.6 景點文字 - 上榜理由

在這里插入圖片描述
實現思路:文本 Text 縮進;圖片和“上榜理由”定位

// 上榜理由
Row() {Text() {ImageSpan($r('app.media.dianzan')).width(16)Span('上榜理由:').fontSize(13).fontWeight(600).fontColor('#5f2b0e')Span('這個冬天來環球影城,一起沉浸在冬日獨有的浪漫,漫步在雪花飛舞的雪天,創造專屬于').fontColor('#5f2b0e').fontSize(13)}.maxLines(3).textOverflow({overflow: TextOverflow.Ellipsis})
}.width('100%').height(72).backgroundColor('#fff7f1').padding(8).alignItems(VerticalAlign.Top).borderRadius(4)
6.2.7 景點文字 - 標簽

在這里插入圖片描述

// 標簽
Row({ space: 5}) {Text('嗨玩樂園').padding(4).border({width: 1, color: '#99AECA'}).borderRadius(4).fontSize(10).fontColor('#99AECA')Text('游樂園').padding(4).border({width: 1, color: '#99AECA'}).borderRadius(4).fontSize(10).fontColor('#99AECA')
}
.width('100%')
6.2.8 景點文字 - 地址

在這里插入圖片描述

// 地址
Row({space: 5}) {Image($r('app.media.ic_daohangdizhi')).width(11).fillColor('#999')Text('北京 · 果園環島/通州區 距您36.7km').fontSize(12).fontColor('#999')
}
.width('100%')

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

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

相關文章

中小制造企業轉型:低成本國產工業軟件替代方案實踐

在數字經濟浪潮席卷全球的當下,制造業數字化轉型已成為企業提升競爭力、實現可持續發展的必由之路。然而,高昂的成本與復雜的技術門檻,卻讓眾多中小制造企業陷入 “不能轉、不想轉、不會轉、不敢轉” 的困局。幸運的是,一批具有自…

Kafka 核心架構與消息模型深度解析(二)

案例實戰:Kafka 在實際場景中的應用 (一)案例背景與需求介紹 假設我們正在為一個大型電商平臺構建數據處理系統。該電商平臺擁有龐大的用戶群體,每天會產生海量的訂單數據、用戶行為數據(如瀏覽、點擊、收藏等&#…

【iOS】cache_t分析

前言 之前分析類的結構的時候,有遇到一個cache_t,當時說是用來保存方法緩存的結構,這篇文章來從源碼詳細介紹一下cache_t 概覽cache_t cache_t結構 類在底層的結構如之前所述,存在著cache_t屬性,而cache_t的結構如下…

java面試題:List如何排序?內存溢出/OOM怎么回事?如何排查和解決?

List如何排序 List排序可以通過實現Comparable接口并且實現compareTo方法,或者傳入comparator去實現排序。 內存溢出/OOM是怎么回事? 內存溢出就是程序在運行的過程中,申請的內存超過了最大內存限制,導致JVM拋出OOM異常&#x…

Python cryptography【密碼庫】庫功能與使用指南

邊寫代碼零食不停口 盼盼麥香雞味塊 、卡樂比(Calbee)薯條三兄弟 獨立小包、好時kisses多口味巧克力糖、老金磨方【黑金系列】黑芝麻丸 邊寫代碼邊貼面膜 事業美麗兩不誤 DR. YS 野森博士【AOUFSE/澳芙雪特證】377專研美白淡斑面膜組合 優惠劵 別光顧寫…

第二十四章 流程控制_ if分支

第二十四章 流程控制: if分支和輸入 正如許多編程語言一樣Shell也有自己的條件分支語句。有時需要根據情況進行相應的處理,因此可以通過條件分支語句實現,本章主要介紹的是if分支語句。 if語句 在Shell中if語句語法格式如下: if commands…

電腦網絡重置,找不到原先自家的WIFI,手機還能正常連接并上網

問題排查:1、電腦感覺網絡太慢,因此打算點擊了網絡重置 2、點擊提示會刪除網絡,在五分鐘后關機重啟 3、從設備管理器設備的無線wifi屬性-事件中發現刪除記錄 4、選擇更新驅動程序 5、從列表中選取 6、更改回老驅動版本 備選方案&#…

C語言_預處理詳解

1. 預定義符號 C語言設置了一些預定義符號,可以直接使用,預定義符號也是在預處理期間處理的 1 __FILE__ //進行編譯的源文件 2 __LINE__//文件當前的行號 3 __DATE__ //文件被編譯的日期 4 __TIME__//文件被編譯的時間 5 __STDC__//如果編譯器遵循ANSI…

【QT】使用QT幫助手冊找控件樣式

選擇幫助—》輸入stylesheet(小寫)—》選擇stylesheet—》右側選擇Qt Style Sheets Reference 2.使用CtrlF—》輸入要搜索的控件—》點擊Customizing QScrollBar 3.顯示參考樣式表–》即可放入QT-designer的樣式表中

SQL知識合集(二):函數篇

TRIM函數 作用:去掉字符串前后的空格 SELECT * FROM your_table_name WHERE TRIM(column_name) ; COALESCE函數 作用:返回其參數中的第一個非 NULL 值。它可以接受多個參數,并從左到右依次評估這些參數,直到找到第一個非 NUL…

Cursor 工具項目構建指南: Uniapp Miniprogram 環境下的 Prompt Rules 約束

簡簡單單 Online zuozuo: 簡簡單單 Online zuozuo 簡簡單單 Online zuozuo 簡簡單單 Online zuozuo 簡簡單單 Online zuozuo :本心、輸入輸出、結果 簡簡單單 Online zuozuo : 文章目錄 Cursor 工具項目構建指南: Uniapp Miniprogram 環境下的 Prompt Rules 約束前言項目簡…

Java轉Go日記(六十):gin其他常用知識

1. 日志文件 package mainimport ("io""os""github.com/gin-gonic/gin" )func main() {gin.DisableConsoleColor()// Logging to a file.f, _ : os.Create("gin.log")gin.DefaultWriter io.MultiWriter(f)// 如果需要同時將日志寫入…

cocos單例工廠和自動裝配

cocos單例工廠和自動裝配 1 單例工廠 1.1 分析 實例字典 原理很簡單&#xff0c;只是一個map&#xff0c;確保每個類只保留一個實例&#xff1b; private static _instances new Map<string, any>();獲取與存儲實例 這邊使用的方式是生成一個唯一的id存儲在類上&…

django paramiko 跳轉登錄

在使用Django框架結合Paramiko進行SSH遠程操作時&#xff0c;通常涉及到自動化腳本的執行&#xff0c;比如遠程服務器上的命令執行、文件傳輸等。如果你的需求是“跳轉登錄”&#xff0c;即在登錄遠程服務器后&#xff0c;再通過該服務器的SSH連接跳轉到另一臺服務器&#xff0…

《C++初階之類和對象》【命名空間 + 輸入輸出 + 缺省參數 + 函數重載】

【命名空間 輸入&輸出 缺省參數 函數重載】目錄 前言&#xff1a;---------------hello world---------------比較C語言和C的第一個程序&#xff1a;hello word ---------------命名空間---------------什么是命名空間&#xff1f;怎么使用命名空間&#xff1f;怎么定義…

[USACO1.5] 八皇后 Checker Challenge Java

import java.util.*;public class Main {// 標記 對角線1&#xff0c;對角線2&#xff0c;所在x軸 是否存在棋子static boolean[] d1 new boolean[100], d2 new boolean[100], d new boolean[100]; static int n, ans 0;static int[] arr new int[14]; // 記錄一輪棋子位置…

云服務器Xshell登錄拒絕訪問排查

根據你的描述&#xff0c;使用Xshell 8登錄云服務器時顯示“拒絕訪問”&#xff0c;可能涉及多個原因。以下結合搜索結果整理出排查和解決方法&#xff0c;按優先級排序&#xff1a; 一、檢查基礎網絡與端口連通性 本地網絡與服務器IP是否可達 在本地電腦的CMD中執行 ping 服務…

Python爬蟲實戰:研究urlunparse函數相關技術

1. 引言 1.1 研究背景與意義 在當今信息爆炸的時代,互聯網上的數據量呈現出指數級增長。如何從海量的網頁數據中高效地獲取有價值的信息,成為了學術界和工業界共同關注的問題。網絡爬蟲作為一種自動獲取網頁內容的技術,能夠按照預定的規則遍歷互聯網上的網頁,并提取出所需…

Spring AI學習一

隨著Chatpt的火爆&#xff0c;現在Spring官方也開始支持AI了并推出了Spring AI框架&#xff0c;目前還沒發布正式版本&#xff0c;這里可以先看一下官方依賴的版本。 Spring官網地址可以看這里&#xff1a;Spring | Home 目前官網上是有這兩個版本&#xff1a;1.0.0和1.1.0-SN…

reverse筆記

一&#xff0c;strcat的使用方法&#xff08;在攻防世界中刷題時遇到的&#xff09; 二&#xff0c;殼&#xff08;做題遇到過但是一直不是很理解&#xff0c;今天查了一下&#xff09; 殼是一種軟件保護技術&#xff0c;能夠防止程序被輕易地分析和修改。 總而言之&#xff0…