HarmonyOS NEXT星河版之模拟图片选择器(下)---使用Swiper实现图片滑动预览

文章目录

    • 一、目标
    • 二、开撸
      • 2.1 改造图片预览Dialog
      • 2.2 改造主页面
      • 2.3 主页面完整代码
    • 三、小结

一、目标

在前面的介绍中,查看选中的图片都是单张预览,接下来要改造成多张可滑动预览,如下:
在这里插入图片描述

二、开撸

2.1 改造图片预览Dialog

@CustomDialog
export struct SinglePreviewDialog {// 弹窗控制器 mustcontroller: CustomDialogController// 展示图片URL列表imgUrlList: ResourceStr[] = []// 当前点击索引selectIndex: number = 0build() {if (this.imgUrlList && this.imgUrlList.length) {Column() {// 使用Swiper组件Swiper() {ForEach(this.imgUrlList, (item: ResourceStr) => {Image(item).width('100%')})}// 绑定当前index.index(this.selectIndex)}.width('100%').height('100%').justifyContent(FlexAlign.Center).backgroundColor(Color.Black).onClick(() => {// 关闭弹窗this.controller.close()})}}
}

2.2 改造主页面

声明当前点击图片索引:

// 当前图片索引
selectIndex: number = 0

点击图片时,给索引赋值:

Image(item.imgUrl).aspectRatio(1).onClick(() => {// this.selectImgUrl = item.imgUrlthis.selectIndex = indexthis.singlePreviewDialog.open()})

对预览Dialog在初始化时,更改传参:

singlePreviewDialog: CustomDialogController = new CustomDialogController({builder: SinglePreviewDialog({imgUrlList: this.selectImgList.map(item => item.imgUrl),selectIndex: this.selectIndex}),customStyle: true //使用自定义Dialog的样式
})

2.3 主页面完整代码

import { PhotoAlbumView } from './components/PhotoAlbumView';
import { SelectImageItem } from './models';
import { promptAction } from '@kit.ArkUI';
import { SinglePreviewDialog } from './dialog/SinglePreviewDialog';@Entry
@Component
struct PhotoAlbumDemoPage {@State message: string = 'Hello World';@State showPhotoAlbum: boolean = false@State selectImgList: SelectImageItem[] = []// 当前选中图片selectImgUrl: ResourceStr = ''// 当前图片索引selectIndex: number = 0// 单图预览dialogsinglePreviewDialog: CustomDialogController = new CustomDialogController({builder: SinglePreviewDialog({imgUrlList: this.selectImgList.map(item => item.imgUrl),selectIndex: this.selectIndex}),customStyle: true //使用自定义Dialog的样式})@BuildersheetPhotoAlbum() {Column() {PhotoAlbumView({maxNumber: 5,cancel: () => {this.showPhotoAlbum = false},confirm: (selectImgList: SelectImageItem[]) => {this.showPhotoAlbum = falsethis.selectImgList = [...this.selectImgList, ...selectImgList]}})}}build() {Column() {Button('打开相册').onClick(() => {this.showPhotoAlbum = true})Text('已选择图片:').width('100%').textAlign(TextAlign.Start)if (this.selectImgList && this.selectImgList.length) {Grid() {ForEach(this.selectImgList, (item: SelectImageItem, index: number) => {GridItem() {Stack() {Image(item.imgUrl).aspectRatio(1).onClick(() => {// this.selectImgUrl = item.imgUrlthis.selectIndex = indexthis.singlePreviewDialog.open()})}}}, (item: SelectImageItem) => JSON.stringify(item))}.columnsTemplate('1fr 1fr 1fr').columnsGap(5).rowsGap(5).padding(10).layoutWeight(1)}// if (this.showPhotoAlbum) {//   PhotoAlbumView({//     maxNumber: 5,//     cancel: () => {//       this.showPhotoAlbum = false//     },//     confirm: (selectImgList: SelectImageItem[]) => {//       this.showPhotoAlbum = false//       this.selectImgList = [...this.selectImgList, ...selectImgList]//     }//   })// }}.width('100%').height('100%').bindSheet($$this.showPhotoAlbum, this.sheetPhotoAlbum(), {showClose: false, // 是否显示右上角关闭按钮height: '70%' // 显示高度占比})}
}

三、小结

  • Swiper组件基本使用

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

事务的基础

📝个人主页:五敷有你 🔥系列专栏:面经 ⛺️稳中求进,晒太阳 事务的基础 1)事务 事务是:一组操作的集合 ,他是不可分割的工作单位。事务会把所有操作作为一个整体一起向系统提…

Debian安装Redis、RabbitMQ、Nacos

安装Redis: 启动Redis、开机自启动 sudo systemctl start redis-server #启动sudo systemctl enable redis-server #开机自启 Redis状态(是否在运行) sudo systemctl status redis-server #查看运行状态 redis-cli ping # 客户端尝试连接 安装RabbitMQ,…

电商秒杀系统设计

业务流程 系统架构 系统挑战 高并发:秒杀活动会在短时间内吸引大量用户,系统需要能够处理高峰时期的大量并发请求 库存同步:在秒杀中,面临的一个严重系统挑战是如何确保在数以万计的用户同时抢购有限的商品时,如何正确、实时地扣减库存,以防止超卖现象。 防止恶意抢购和…

https://是怎么实现的?

默认的网站建设好后都是http访问模式,这种模式对于纯内容类型的网站来说,没有什么问题,但如果受到中间网络劫持会让网站轻易的跳转钓鱼网站,为避免这种情况下发生,所以传统的网站改为https协议,这种协议自己…

QT学习(2)——qt的菜单和工具栏

目录 引出qt的菜单栏工具栏菜单栏,工具栏状态栏,浮动窗口 属性设计ui编辑控件添加图片 总结 引出 QT学习(2)——qt的菜单和工具栏 qt的菜单栏工具栏 菜单栏,工具栏 1QMainWindow 1.1菜单栏最多有一个 1.1.1 QMenuBar…

【吊打面试官系列】Java高并发篇 - 同步方法和同步块,哪个是更好的选择?

大家好,我是锋哥。今天分享关于 【同步方法和同步块,哪个是更好的选择?】面试题,希望对大家有帮助; 同步方法和同步块,哪个是更好的选择? 同步块是更好的选择,因为它不会锁住整个对象…

flutter开发实战-人脸识别相机使用

flutter开发实战-人脸识别相机使用 当需要拍摄的时候,需要检测到人脸再进行后续的操作,这里使用的是face_camera 一、引入face_camera 在工程的pubspec.yaml中引入插件 # 检测人脸face_camera: ^0.0.8iOS端需要设置相关权限 在info.plist文件中&…

Jmeter使用While控制器

1.前言 对于性能测试场景中,需要用”执行某个事物,直到一个条件停止“的概念时,While控制器控制器无疑是首选,但是在编写脚本时,经常会出现推出循环异常,获取参数异常等问题,下面总结两种常用的写法 2.${flag}直接引用判断 1.在预处理器中定义一个flag 或者在用户定…

AR人像滤镜SDK解决方案,专业调色,打造个性化风格

视觉内容已成为企业传达品牌价值和吸引用户眼球的重要载体,为满足企业对于高质量、多样化视觉内容的迫切需求,美摄科技凭借先进的AR技术和深厚的图像处理经验,推出了业界领先的AR人像滤镜SDK解决方案。 一、一站式解决方案,覆盖多…

Linux服务器常用巡检命令,查看日志

查看日志 3.1 通过journalctl命令查看系统日志 命令&#xff1a;journalctl 3.2 通过tail查看系统日志 查看日志文件多少行代码&#xff1a;tail -n [行数] [日志文件] 4. 服务状态 4.1 查看指定服务的状态 命令&#xff1a;systemctl status <service> 比如查看防火墙…

arm架构下安装conda

一、参考文章&#xff1a;感谢这位网友的分享&#xff0c;搬过来以备过几天使用&#xff0c;这种小众系统真的有些麻烦解决方案&#xff1a;ARM架构下安装Miniconda 离线配置Conda环境的全流程及踩坑避坑指南 - 技术栈 二、步骤 2.1 确认系统架构 uname -m 2.2 根据架构下载…

免疫优化算法(Immune Optimization Algorithm)

注意&#xff1a;本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 &#xff08;[www.aideeplearning.cn]&#xff09; 算法背景 免疫算法是一种模拟生物免疫系统的智能优化算法。想象一下&#xff0c;当我们的身体遇到病毒或细菌侵袭时&#xff0c;免疫系统会启动…