HarmonyOS 应用开发-ArkUI(ets)仿“腾讯新闻”APP

news2024/11/25 9:50:54

一、效果演示

1、新闻列表页

2、新闻详情页、图片展示页

3、视频页

4、动态页

二、 流程图

–本来自定义了视频的控制栏的,但是发现VideoController()控制器的bug会导致控制器失效,所以没继续做。视频页先不搞了。

三、文件组织(“我的页面”没做,视频页面因为bug没做完)

四、思路与实现

1、网络连接

我是做成一个POST通用请求,有点粗糙(也没做错误处理)不要介意,能用就行,哈哈

数据请求官方文档链接

/*
 * 通用请求
 * url:链接
 * params:参数
 */
export function DataHelperPOST(url: string, params: Object) {
    let httpRequest = http.createHttp()
    let promise = httpRequest.request(url, {
        method: http.POST,
        extraData: params,
        connectTimeout: 30000,
        readTimeout: 30000,
        header: {
            'Content-Type': 'application/json'
        }
    })
    return promise.then((value) => {
        let data:{ code: number, data: any } = { code: 0, data: '' }
        data.code = value.responseCode
        if(value.responseCode === 200) {
            data.data = JSON.parse(JSON.stringify(value.result));
        }
        return data
    })
}

//调用
export async function GetNewsList(newsType: string) {
    //接口链接
    let newsUrl: string = `http://v.juhe.cn/toutiao/index`;
    //参数
    let params: Object = { "type": newsType, "key": NewsKey }
    let getData = await DataHelperPOST(newsUrl, params);
}

2、自定义固定Tabs菜单,点击菜单切换,滑动页面菜单跟随

菜单用Scroll包裹设置为横向滑动,用display.getDefaultDisplay() 获取屏幕宽度(预览器无法获取),根据每个tab的固定宽度算出屏幕能显示多少个tab,用this.scroller.currentOffset().xOffset获取滑动偏移值,依据当前的index与偏移值的关系设置Scroll的偏移值this.scroller.scrollTo()

获取屏幕大小接口官方文档链接

3、下拉刷新

主要用List,List下拉自带弹簧效果

1、内容item用ForEach循环,再在最前面加一个刷新 item 10%高度,整个List往上偏移10%,List高度为110%,用parallelGesture绑定滑动事件。

2、往下滑动时未达到刷新行程,释放自动回弹(List自带的弹簧效果)。达到刷新行程,释放,List整体往下偏移10%(固定显示刷新item),刷新完成,List往上偏移10%(隐藏刷新 item)。

List() {
    //刷新 item
    ListItem() {
        Column() {
            Image($r("app.media.jiazaizhong_1"))
                .objectFit(ImageFit.Contain)
                .height('50%').aspectRatio(1)
                .margin({ bottom: 5 })
                .rotate({ x: 0, y: 0, z: 1, angle: this.rotateAngle })
            Text(this.loadingText)
                .fontSize(14)
                .fontColor($r("app.color.fontColor_text2"))
        }
    }
    .width('100%').height(`${this.loadingHeight}%`)

    ForEach(this.tabData, item => {
        ListItem() {
            //内容item
        }
    }, item => item.id)
}
.position({ x: 0, y: `-${this.loadingYOffset}%` })
.width('100%').height(`${100 + this.loadingYOffset}%`)

4、新闻内容详情页

api获取的内容数据是html字符串,直接显示的话只能显示一堆很乱的文本,所以要将html字符串处理一下,把里面的文本、图片提取出来。

可以用charAt()逐字循环、indexOf()循环处理文本,把处理好的文本、图片存到一个数组里[{“node”: “text”, “content”: “文本····”}, {“node”: “img”, “content”: “图片地址”}],在显示页面用for循环判断node,显示Text或Image

(因为聚合的这个新闻内容只有图片和文字,而且格式也很整齐,所以处理起来比较简单。如果是整个页面的话也可以,但处理文本就比较复杂。而且不同网站的结构也不一样,如果玩过爬取的话这个就很简单了)

5、自定义视频控制栏

①Stack
②position

用Stack或position在视频前面设置一个控制栏,再用VideoController()控制器控制视频暂停/播放,用滑动条Slider()设置为进度条,用Video的onUpdate()方法实时更新进度条,用Slider()的onChange()事件设置拉动进度条播放。

Stack(){
    Video()
    Column() {
        //自定义控制栏
    }
}
Column() {
    Video()
    Column() {
        //自定义控制栏
    }
    .position({x: 0, y: 0})
    //透明度渐变
    //控制栏顶部(标题)与底部(进度条)黑色半透明向中间全透明渐变
    .linearGradient({colors: [['#a6000000', 0.0],['#00000000', 0.2], ['#00000000', 0.8], ['#a6000000', 1.0]]})
}

五、多机型适配(API7只有P40 Pro能开)

MatePadPro

MateX2

六、代码

下载代码的同学记得要填上自己的聚合API key,才能请求数据:data/NewsData

如果要用模拟器请求数据要把这两个注释去掉:common/TabsTypePage:aboutToAppear()方法下面
(还有index主页的获取屏幕Size的方法,预览器无法设置/获取,还会报错,有点烦。所以注释掉)

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1580518.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

性能优化 - 你知道dns-prefetch有什么用吗

难度级别:中级及以上 提问概率:50% 我们在HTML文档里写一个script标签,为src属性指定Javascript文件网络地址,这是一件再平凡不过的事情。当浏览器加载HTML文档,加载到这个script标签的时候,就会去下载Javascript文件。而在下载之前,就…

Unity类银河恶魔城学习记录12-8 p130 Skill Tree UI源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili UI.cs using UnityEngine;public class UI : MonoBehaviour {[SerializeFi…

C++中高阶数据结构(AVL树的原理讲解)

AVL树 AVL树的定义 avl本质是搜索树,是高度平衡二叉搜索树.特点是:任何树的左右子树的高度差不超过1.最大的高度差值最大也只能是1,也称之为平衡因子, 平衡因子就是右子树减去左子树的值,这个值的绝对值的最大值只能是1.这个平衡因子不是必须的,只是一种控制方式,方便我们更…

stable diffusion的从安装到使用

stable-diffusion,一个免费开源的文生图软件,文章主要讲怎么从源码开始安装,以及使用的方式 git地址:https://github.com/AUTOMATIC1111/stable-diffusion-webui 本人电脑环境win10,软件pycharm,需要提前…

【话题:工作生活】2022年工作总结--疫情下的上海,疫情中的我。

现在是阳历2023年11月27日星期一,我再次开始撰写自己的年终工作总结。希望再过1、2个月,这份年终总结能够出炉,与大家相遇。 给自己定个小目标,年终的工作生活总结坚持写10年。我2017年毕业,之后就开始写每年的年终总结…

密码应用方案测评要点及测评过程

(1)背景 《GBT39786-2021 信息系统密码应用基本要求》中第1-4级密码应用基本要求均包括“应依据相关标准和密码应用需求,制定密码应用方案”。第1-4级密码应用基本要求对于“投入运行前进行密码应用安全性评估”的具体如下。 第一级&#xff…

微信小程序Skyline模式下瀑布长列表优化成虚拟列表,解决内存问题

微信小程序长列表,渲染的越多就会导致内存吃的越多。特别是长列表的图片组件和广告组件。 为了解决内存问题,所以看了很多人的资料,都不太符合通用的解决方式,很多需要固定子组件高度,但是瀑布流是无法固定的&#xf…

SpringBoot常用注解及其使用示例

Spring Boot是一个用于快速构建Java应用程序的框架,它简化了Spring应用程序的创建和部署过程。 Spring Boot提供了很多注解,用于简化开发过程,提高开发效率。本文将介绍几个Spring Boot常用注解的使用案例,包括Controller、Reques…

【Xilinx】FPGA中的HPI/O和HRI/O的说明 (hpio hrio)

Xilinx 一些系列FPGA IO Bank分为HP Bank和HR Bank,HP IO接口电压范围为1.2V~1.8V,可以实现高性能,HR IO接口电压范围为1.2V~3.3V。当HR Bank与2.5V或者3.3V外设互联时,需要考虑接口电平的兼容性。 含义 电平 HP接口为高速接口 …

实验模拟gfs 五大逻辑卷

目录 一 实验环境 二 4台服务端准备工作 1,66,77,88,99 四台机器加4块磁盘 2, scan 刷新磁盘供电接口 并查看 3,改主机名,方便后续操作 4,为加快访问速度 写hosts文件 做映射(55客户机也写&…

13-pyspark的共享变量用法总结

目录 前言广播变量广播变量的作用 广播变量的使用方式 累加器累加器的作用累加器的优缺点累加器的使用方式 PySpark实战笔记系列第四篇 10-用PySpark建立第一个Spark RDD(PySpark实战笔记系列第一篇)11-pyspark的RDD的变换与动作算子总结(PySpark实战笔记系列第二篇))12-pysp…

【AcWing】蓝桥杯集训每日一题Day16|哈希|FloodFill算法|字典序最小|映射|1402.星空之夜(C++)

1402.星空之夜 1402. 星空之夜 - AcWing题库难度:中等时/空限制:1s / 64MB总通过数:3415总尝试数:7434来源:usaco training 5.1算法标签Flood Fill哈希DFSBFS 题目内容 夜空深处,闪亮的星星以星群的形式出…

雅特力AT32引脚复用记录

用作USB的话,PA9不能再用作其他功能了 被复用了。这个关联信号是OTG_FS_VBUS。stm32是能这么复用的。

大型央国企“信创化”与数字化转型建设思路

一、央国企信创化与数字化转型时代背景 1、信创概念普及: 信创,即“信息技术应用创新”。是我国自主信息产业聚焦的核心,旨在通过对IT硬件、软件等各个环节的重构,基于我国自有IT底层架构和标准,形成自有开放生态&am…

阿里云OSS使用流程

准备工作 无论怎么样,你需要准备一个阿里云账号,点击:注册阿里云 输入相关信息,然后注册成功以后,点击 然后注册成功了,实名一下阿里云账号。打开实名入口,选择个人实名或者企业实名。 如果你…

Xinstall:专业的App下载量统计工具,让推广效果可衡量

在移动互联网时代,App的下载量是衡量一个应用受欢迎程度的重要指标。然而,很多开发者和广告主在推广App时,都面临着一个共同的问题:如何准确统计App的下载量?这不仅关系到推广效果的评估,还直接影响到广告R…

【Linux 学习】进程优先级和命令行参数!

1. 什么是优先级? 指定进程获取某种资源(CPU)的先后顺序; Linux 中优先级数字越小,优先级越高; 1.1 优先级和权限的区别? 权限 : 能不能做 优先级: 已经能了,但是获…

Linux初学(十七)防火墙

一、防火墙简介 1.1 防火墙的类别 安全产品 杀毒: 针对病毒,特征篡改系统中的文件杀毒软件针对处理病毒程序防火墙: 针对木马,特征系统窃取防火墙针对处理木马 防火墙分为两种 硬件防火墙软件防火墙 硬件防火墙 各个网络安全…

模型量化——NVIDIA——方案选择(PTQ、 partialPTQ、 QAT)

PTQ、 partialPTQ、 QAT 选择流程 PTQ、 partialPTQ、 QAT 咨询NVIDIA 官方后,他们的校正过程一致,支持的量化算子本质是一样的,那么如果你的算子不是如下几类,那么需要自己编写算子。参考TensorRT/tools/pytorch-quantization/py…

淘宝销量API商品详情页原数据APP接口测试㊣

淘宝/天猫获得淘宝app商品详情原数据 API 返回值说明 item_get_app-获得淘宝app商品详情原数据 公共参数 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_nameString是API接口名称(包括在请求地…