美文网首页
鸿蒙Banner图一多适配不同屏幕

鸿蒙Banner图一多适配不同屏幕

作者: 龙儿筝 | 来源:发表于2024-11-03 17:24 被阅读0次

认识一多

随着终端设备形态日益多样化,分布式技术逐渐打破单一硬件边界,一个应用或服务,可以在不同的硬件设备之间随意调用、互助共享,让用户享受无缝的全场景体验。而作为应用开发者,广泛的设备类型也能为应用带来广大的潜在用户群体。但是如果一个应用需要在多个设备上提供同样的内容,则需要适配不同的屏幕尺寸和硬件,开发成本较高。HarmonyOS系统面向多终端提供了“一次开发,多端部署”(后文中简称为“一多”)的能力,让开发者可以基于一种设计,高效构建多端可运行的应用。

[图片上传失败...(image-290c83-1730712263540)]

“一多”建议从最初的设计阶段开始就拉通多设备综合考虑。考虑实际智能终端设备种类繁多,设计师无法针对每种具体设备各自出一份UX设计图。“一多”建议从设备屏幕宽度的维度,将设备划分为六大类。设计师只需要针对这六大类设备做设计,而无需关心具体的设备形态。

Banner图一多适配

我们在使用Banner图时,会发现在中大屏设备上,Banner的宽度太大,当我们将高度固定时,在大屏设备上,高度又太小,图片裁剪严重。若宽高采用比例设置,高度又太大,在不同的屏幕上要么太小或太大,显示效果都不是很理想。

Banner有一个属性displayCount,用来控制一屏显示多少个组件,我们在小屏设备上显示一张图片,在中大屏设备上一屏显示2张图片。再使用aspectRatio设置合适的宽高比,就能达到我们想要的效果了。

我们现在只需要判断设备是小屏还是中大屏就可以了,这里借助GridRow栅格组件的断点能力,针对小屏和非小屏设备,设置不同的displayCount和aspectRatio就可以了,实现小源码如下。

@ComponentV2
struct Index {
  @Local breakPoint: string = 'unknown'
  @Local images: string[] = []

  @Computed
  get isSm(): boolean {
    return this.breakPoint === 'sm'
  }

  build() {
    Column() {
          GridRow({
            columns: 1,
            breakpoints: { reference: BreakpointsReference.WindowSize }
          }) {
            GridCol() {
              Swiper() {
                Repeat(this.images).each((data: Readonly<RepeatItem<string>>) => {
                  Image(data.item)
                }).key((item) => item)
              }
              .width('100%')
              .height('100%')
              .loop(false)
              .duration(1000)
              .autoPlay(false)
              .indicatorInteractive(true)
              .itemSpace(this.isSm ? 0 : 32)
              .displayCount(this.isSm ? 1 : 2)
              .indicator(new DotIndicator().itemWidth(8)
                .itemHeight(8)
                .selectedItemWidth(12)
                .selectedItemHeight(8)
                .color($r('app.color.divider_color'))
                .selectedColor($r('app.color.brand_color')))
            }
          }.width('100%').aspectRatio(this.isSm ? 2.5 : 4.5).onBreakpointChange((point) => {
            this.breakPoint = point
          })
        }.width('100%').justifyContent(FlexAlign.Start)
  }
}

在不同设备的显示效果如下。


a3.png

相关文章

  • Android屏幕适配

    Android屏幕适配 概述 屏幕适配的主要目标有两个,不同屏幕尺寸的适配和不同像素密度的适配。随着手机行业发展异...

  • 屏幕适配

    基本概念 适配 概念:适合兼容各种不同的情况系统适配:针对不同系统版本进行适配屏幕适配:针对不同大小的屏幕尺寸进行...

  • Android之屏幕适配与第三方集成科大讯飞

    屏幕适配 原型图和设计图800*480 ---> 向下兼容1280*720 ---> 向上兼容 图片适配:根据屏幕...

  • Android屏幕适配

    自理的屏幕适配思维导图 关于屏幕适配,我们先来看下官方文档上说了些什么! ??????屏幕适配:文档上翻译为屏幕兼...

  • 2018-05-31 两种H5页面适配方法 rem em

    什么是适配? 适配就是将设计图原封不动的展示到不同的手机上。所以可以得到公式 手机屏幕宽 / 设计图的宽(750)...

  • 微信小游戏屏幕适配

    作者: 何永峰;标签: 屏幕适配 屏幕适配 适配都是老生常谈,移动端要根据手机屏幕适配,PC端也有时候根据不同的...

  • iOS屏幕尺寸适配

    屏幕适配方法 针对不同屏幕尺寸的适配,主要有3种方式:1.不同屏幕尺寸下,元素的尺寸是固定的;2.不同屏幕尺寸下,...

  • 016--cc.Widget与屏幕适配

    屏幕适配 1: 一款游戏能适应不同的手机分辨率,我们把这个称为屏幕适配;2: creator屏幕适配策略: 固定...

  • iOS学习笔记24-不断进化的屏幕适配

    一、屏幕适配 iOS的屏幕适配可以分为3大块,代表着不同时期的屏幕适配主流: AutoResizing:在iOS6...

  • 屏幕适配

    适配 什么是适配?适应、兼容各种不同的情况 iOS开发中的适配?系统适配针对不同版本的操作系统进行适配屏幕适配针对...

网友评论

      本文标题:鸿蒙Banner图一多适配不同屏幕

      本文链接:https://www.haomeiwen.com/subject/kfendjtx.html