0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在鸿蒙系统的撸引导页代码的经验

OpenHarmony技术社区 来源:中软国际 作者:焦俊盈 2021-09-06 09:25 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

手机 APP 的引导页是一个常见的功能,今天和大家一起分享在鸿蒙系统的撸引导页代码的经验。

应用引导页的功能

①为什么要做应用的引导功能?

几乎所有的 App 都会有做一些界面引导,有的是页面交互的引导,有的是为了介绍新功能。

②通用的功能性引导大概分哪些呢?

主功能引导、新功能引导和功能转移或改名引导。

③通用的应用引导,需要注意哪些?

引导的内容文字不宜太长,适当加入一些图案可以方便用户理解。言归正传吧,开始咱们今天的主题,如何实现应用的引导功能吧!

实现应用的引导功能

具体步骤如下:

首先来看看讨论的引导功能的效果吧!点击引导页,向上滑动过程,第一个界面图案和文字渐变消失的过程。

而第二页界面的图片和文字渐渐清晰可见。底部 Next 图标会下滑隐藏再弹出的动画效果。

开发准备

搭建鸿蒙开发环境,这里就不做介绍了,如果没有环境没有搭建好的同学可以进入学习安装环境, 安装好环境以后接下来我们就可以进行开发工作了。

①设计思路

首先我们做的是公用的组件,我们需要使用组件化思想去搭建我们的项目框架,接下来根据组件的需求我们先去设计一下界面。

设计好之后我们需要对页面添加数据,添加完数据之后组件的大体界面已经展示给我们,下来就是在滑动 page 的时候添加底部 button 的回弹动画,并且在此时我们需要操作 page 的子 view。最后我们要去使用我们的组件。

②设计步骤

(1)设计界面

根据我们要实现的功能,我们可以使用 PageSlider 控件去实现界面布局文件,实现代码为:

《PageSlider

ohos:id=“$+id:vertical_view_pager”

ohos:width=“match_parent”

ohos:height=“match_parent” 》《/PageSlider》

添加数据、初始化数据:

public void setData() {

super.setData();

pageColors = new ArrayList《》();

pageColors.add(getString(ResourceTable.Color_colorAccent));

pageColors.add(getString(ResourceTable.Color_color2));

pageColors.add(getString(ResourceTable.Color_colorPrimary));

pageColors.add(getString(ResourceTable.Color_color3));

pageMoudles = getData();

}

private List《PageMoudle》 getData() {

String textValue = “Lorem Ipsum is simply dummy text of the printing and typesetting industry.”;

PageMoudle pageMoudleOne = new PageMoudle();

pageMoudleOne.setRecoureId(ResourceTable.Graphic_intro_second_vector);

pageMoudleOne.setBackGroudRgbColor(RgbColor.fromArgbInt(Color.getIntColor(pageColors.get(0))));

pageMoudleOne.setTitle(“Lorem Ipsum Lorem Ipsum”);

pageMoudleOne.setText(textValue + textValue + textValue);

pageMoudleOne.setTitleSize(17);

pageMoudleOne.setTextSize(14);

List《PageMoudle》 datas = new ArrayList《》();

datas.add(pageMoudleOne);

PageMoudle pageMoudleTwo = new PageMoudle();

pageMoudleTwo.setRecoureId(ResourceTable.Graphic_four);

pageMoudleTwo.setBackGroudRgbColor(RgbColor.fromArgbInt(Color.getIntColor(pageColors.get(1))));

pageMoudleTwo.setTitle(“Lorem Ipsum Lorem Ipsum ”);

pageMoudleTwo.setText(textValue + textValue);

datas.add(pageMoudleTwo);

PageMoudle pageMoudleThree = new PageMoudle();

pageMoudleThree.setRecoureId(ResourceTable.Graphic_ohos);

pageMoudleThree.setBackGroudRgbColor(RgbColor.fromArgbInt(Color.getIntColor(pageColors.get(2))));

pageMoudleThree.setTitle(“Lorem Ipsum”);

pageMoudleThree.setText(textValue);

datas.add(pageMoudleThree);

PageMoudle pageMoudleFour = new PageMoudle();

pageMoudleFour.setRecoureId(ResourceTable.Media_new_intro);

pageMoudleFour.setBackGroudRgbColor(RgbColor.fromArgbInt(Color.getIntColor(pageColors.get(3))));

pageMoudleFour.setTitle(“Lorem Ipsum”);

pageMoudleFour.setText(textValue + textValue + textValue);

datas.add(pageMoudleFour);

return datas;

}

设置 provider:

pageSlider = (PageSlider) findComponentById(ResourceTable.Id_vertical_view_pager);

pageSlider.setOrientation(Component.VERTICAL);

pageSlider.addPageChangedListener(this);

pageSlider.setTouchEventListener(this::onTouchEvent);

adapter = new VerticalIntroPagerAdapter(this, pageMoudles);

pageSlider.setProvider(adapter);

(2)添加动画

这里我们使用属性动画去完成底部 button 的上弹和下弹操作,上弹和下弹是和我们手指滑动的方向是有关系的。

所以这里我们必须实现手指的触摸事件,在触摸事件中获取我们手机滑动的距离,如果距离大于 0 则是下滑,如果小于 0 则是下滑。

获取是上滑还是下滑代码如下:

@Override

public boolean onTouchEvent(Component component, TouchEvent touchEvent) {

int action = touchEvent.getAction();

switch (action) {

case TouchEvent.PRIMARY_POINT_DOWN:

pageSlider.setSlidingPossible(true);

startPointY = getTouchY(touchEvent, 0, component);

return true;

case TouchEvent.POINT_MOVE:

movePointY = getTouchY(touchEvent, touchEvent.getIndex(), component) - startPointY;

if (page != 0 && movePointY 》 0) {

WindowManager.getInstance().getTopWindow().get().setStatusBarColor(getColorByString(pageColors.get(page - 1)));

}

return true;

case TouchEvent.PRIMARY_POINT_UP:

return true;

default:

}

return false;

}

获取到上滑还是下滑后,接下来就去给底部 button 设置动画。动画用的是属性动画,属性动画大体实现是初始化动画,设置动画持续时间,实现动画属性值变化监听事件,最后启动动画。

大体代码如下:

private void startChangeButtonBg(int direction, int duration) {

if (animatorValue == null) {

animatorValue = new AnimatorValue();

}

animatorValue.setCurveType(Animator.CurveType.LINEAR);

animatorValue.setDuration(duration);

animatorValue.setValueUpdateListener(new AnimatorValue.ValueUpdateListener() {

@Override

public void onUpdate(AnimatorValue animatorValue, float v) {

if (direction 《= 0) {

double value = ((1 - (double)v) * nextHeight) * direction;

next.setMarginBottom((int) value);

} else {

float value = -(v * nextHeight);

next.setMarginBottom((int) value);

if (v 》 0.9) {

if (page == 3) {

skip.setVisibility(Component.INVISIBLE);

next.setText(“DONE”);

next.setNormalColor(pageColors.get(1));

} else {

skip.setVisibility(Component.VISIBLE);

next.setText(“NEXT”);

next.setNormalColor(pageColors.get(page + 1));

}

next.setMarginBottom(0);

}

}

}

});

setAnimStateChangeList(direction);

animatorValue.start();

}

private void setAnimStateChangeList(int direction) {

animatorValue.setStateChangedListener(new Animator.StateChangedListener() {

@Override

public void onStart(Animator animator) {

if (direction 《= 0) {

if (page == 3) {

skip.setVisibility(Component.INVISIBLE);

next.setText(“DONE”);

next.setNormalColor(pageColors.get(1));

} else {

skip.setVisibility(Component.VISIBLE);

next.setText(“NEXT”);

next.setNormalColor(pageColors.get(page + 1));

}

}

}

@Override

public void onStop(Animator animator) {

}

@Override

public void onCancel(Animator animator) {

}

@Override

public void onEnd(Animator animator) {

movePointY = 0;

}

@Override

public void onPause(Animator animator) {

}

@Override

public void onResume(Animator animator) {

}

});

}

(3)操作子 view

如何去操作子 view 呢?首先我们先去看看 PageSlider 是否有子 view 的操作监听接口,查看 api 后没有这样的接口获取方法,那就得我们自己去考虑怎么实现呢。

我这里的实现思路是在 PageSlider 设置 provider 的时候保存所有的子 view 对象,然后再使用的时候拿出子 view 再进行操作。

我们这里例子是改变子 view 的透明度。代码实现如下:

保存子 view:

public class VerticalIntroPagerAdapter extends PageSliderProvider {

LinkedHashMap《Integer, Component》 pageComonents;

public VerticalIntroPagerAdapter(Context context, List《PageMoudle》 datas) {

this.context = context;

this.datas = datas;

pageComonent = new ArrayList《》();

// 初始化用来添加子view的集合,注意这里是一个有序集合

pageComonents = new LinkedHashMap《Integer, Component》();

}

//添加子view

@Override

public Object createPageInContainer(ComponentContainer componentContainer, int i) {

if (!pageComonents.containsValue(component)) {

pageComonents.put(i, component);

}

}

}

操作子 view:

private void setPageApale(int currentPage, int targetPage, float offset) {

if (adapter.pageComonents != null && adapter.pageComonents.get(currentPage) != null

&& adapter.pageComonents.get(targetPage) != null) {

float alpha = new BigDecimal(1.0f).subtract(new BigDecimal(offset).multiply(new BigDecimal(2))).floatValue();

if (offset 》= 0.4 && offset 《= 0.9) {

offset = new BigDecimal(offset).subtract(new BigDecimal( 0.4f)).floatValue();

} else if (offset 《 0.4) {

offset = 0.0f;

} else {

offset = 1.0f;

}

setApale(currentPage, targetPage, alpha, offset);

}

}

到这里我们的竖直引导工具组件就已经封装好了。

(4)使用组件

如何去使用我们的组件呢?这里我们用的是组件化思想。所以我们呢只需要在我们的项目中引入我们的组件,然后在我们的 ablity 中集成我们封装好的 VerticalIntroSlice 对象就行。

最后我们再把封装一个添加数据的接口,把我们的数据变成动态添加的就行。

结语

到此我们的整个设计流程就完了,通过上面的操作,相信小伙伴们就可以实现应用引导功能了。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • APP
    APP
    +关注

    关注

    33

    文章

    1592

    浏览量

    76119
  • 鸿蒙系统
    +关注

    关注

    183

    文章

    2642

    浏览量

    70113
  • HarmonyOS
    +关注

    关注

    80

    文章

    2157

    浏览量

    36287

原文标题:在鸿蒙手机上撸一个APP引导页!

文章出处:【微信号:gh_834c4b3d87fe,微信公众号:OpenHarmony技术社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    [VirtualLab] 激光引导无焦系统的分析与设计

    摘要 对于天文望远镜,激光引导星通常用于校正大气畸变。这种人造恒星图像通常由高功率激光束几十公里之外拍摄。为了精确地设计光学系统以产生和控制激光引导星的尺寸,必须考虑激光束的衍射效
    发表于 04-21 08:21

    2小时搞定鸿蒙应用!零基础做出你的鸿蒙“处女作”

    当下,低门槛开发正成为生态扩张的最强推力,而鸿蒙生态的快速壮大,也让越来越多零基础小白蠢蠢欲动,想加入开发大军。但繁琐的配置流程、深奥的代码,也让很多人打起了退堂鼓。近日,鸿蒙开发者官网全新上线
    的头像 发表于 04-17 14:04 87次阅读
    2小时搞定<b class='flag-5'>鸿蒙</b>应用!零基础做出你的<b class='flag-5'>鸿蒙</b>“处女作”

    深开鸿开源鸿蒙社区主干代码贡献量破650万行

    ,1500多款产品通过兼容性测评,构建起覆盖千行百业的庞大生态体系。近日,作为开源鸿蒙社区的核心贡献者之一,深圳开鸿数字产业发展有限公司(简称“深开鸿”)社区主干代码贡献量超650万行,以显著的
    的头像 发表于 01-07 10:22 688次阅读

    鸿蒙系统对手机市场会产生怎样的影响?现在汽车是不是也用上鸿蒙系统了?

    鸿蒙系统对手机市场会产生怎样的影响?现在汽车是不是也用上鸿蒙系统了?
    发表于 12-04 20:47

    鸿蒙星光盛典见证生态硕果!深开鸿斩获开源鸿蒙双项荣誉

    近日,鸿蒙星光盛典生态论坛深圳隆重举办。作为开源鸿蒙生态的核心共建者,深开鸿受邀出席这一盛会,与众多生态伙伴共话技术创新,共绘生态未来。开源鸿蒙
    的头像 发表于 12-02 15:17 823次阅读
    <b class='flag-5'>鸿蒙</b>星光盛典见证生态硕果!深开鸿斩获开源<b class='flag-5'>鸿蒙</b>双项荣誉

    关于系统启动引导程序(startup_hbirdv2.S)

    一、队伍介绍 本篇为蜂鸟E203系列分享第三篇,本篇介绍的内容是系统启动引导程序(startup_hbirdv2.S。 二、什么是系统启动引导程序?
    发表于 10-30 07:47

    知乎开源“智能预渲染框架” 几行代码实现鸿蒙应用页面“秒开”

    近日,知乎Gitee平台开源了其自研的鸿蒙“智能预渲染框架”,并将该框架的Har包上架到OpenHarmony三方库中心仓。该框架在鸿蒙平台首创“智能预渲染”技术,旨在破解应用复杂页面加载缓慢
    的头像 发表于 08-29 14:32 710次阅读
    知乎开源“智能预渲染框架” 几行<b class='flag-5'>代码</b>实现<b class='flag-5'>鸿蒙</b>应用页面“秒开”

    开源系统适配:聚徽分享国产工控平板 Linux / 鸿蒙系统下的技术优化

    工业自动化与智能化加速推进的当下,国产工控平板的系统适配成为提升设备性能与竞争力的关键环节。Linux 和鸿蒙作为开源系统,凭借其高度的开放性与可定制性,为国产工控平板带来新的发展机
    的头像 发表于 06-13 16:29 1290次阅读

    鸿蒙5开发宝藏案例分享---优化应用包体积大小问题

    ;] 无用代码剔除 :开启ProGuard(仅保留运行时用到的类)。 ?** 结语** 包体积优化不是“高级技巧”,而是直接影响用户留存的关键操作!以上这些方法都是鸿蒙官方团队验证过的实战经验,赶紧试试吧
    发表于 06-13 10:09

    鸿蒙5开发宝藏案例分享---Swiper组件性能优化实战

    案例确实让人眼前一亮!实际接入后,我们的图库帧率从 45fps→58fps **,效果拔群。大家遇到复杂列表/轮播场景时,一定要试试这些方案。如果有其他坑或经验,欢迎评论区交流呀 **? **觉得有用记得点赞收藏! **?
    发表于 06-12 17:53

    鸿蒙5开发宝藏案例分享---应用并发设计

    到性能调优,这些案例都是华为工程师的血泪经验结晶。下面用最直白的语言+代码示例,带你玩转HarmonyOS并发开发! ?一、ArkTS并发模型:颠覆传统的设计 传统模型痛点 graph LR A[共享
    发表于 06-12 16:19

    VirtualLab:激光引导无焦系统的分析与设计

    摘要 对于天文望远镜,激光引导星通常用于校正大气畸变。这种人造恒星图像通常由高功率激光束几十公里之外拍摄。为了精确地设计光学系统以产生和控制激光引导星的尺寸,必须考虑激光束的衍射效
    发表于 05-22 08:49

    国产操作系统加速崛起——鸿蒙电脑补齐鸿蒙生态最重要拼图

    国产操作系统加速崛起——鸿蒙电脑补齐鸿蒙生态最重要拼图 5月19日,首次应用鸿蒙操作系统的个人电脑(PC)
    的头像 发表于 05-21 11:41 784次阅读

    鸿蒙电脑拿什么和Windows竞争

    5月8日,鸿蒙电脑技术与生态沟通会上,鸿蒙操作系统(HarmonyOS 5)首次电脑端亮相;这是华为首款
    的头像 发表于 05-09 11:41 1585次阅读

    鸿蒙操作系统首登电脑端,华为开启鸿蒙办公新时代

    2025年5月8日,华为深圳举办了鸿蒙电脑技术与生态沟通会,鸿蒙操作系统首次电脑端亮相。这既是中国电子信息产业的历史性时刻,也是华为
    发表于 05-08 14:20 6201次阅读
    <b class='flag-5'>鸿蒙</b>操作<b class='flag-5'>系统</b>首登电脑端,华为开启<b class='flag-5'>鸿蒙</b>办公新时代