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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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…