HarmonyOS 需要一个图片预览组件

需要一个图片点击放大,包含手势缩放的组件。

HarmonyOS
2024-10-28 09:57:08
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Heiang

请参考如下demo:

@Entry  
@Component  
struct Index {  
  @State visible: Visibility = Visibility.None  
  @State scaleValue: number = 1  
  @State pinchValue: number = 1  
  @State pinchX: number = 0  
  @State pinchY: number = 0  
  @State count: number = 0  
  @State offsetX: number = 0  
  @State offsetY: number = 0  
  @State positionX: number = 0  
  @State positionY: number = 0  
  
  
  build() {  
    Stack() {  
      Row() {  
        Column() {  
          Image($r('app.media.icon'))  
            .width(100)  
            .height(100)  
            .onClick(() => {  
              console.log("hit me!")  
              if (this.visible == Visibility.Visible) {  
                this.visible = Visibility.None  
              } else {  
                this.visible = Visibility.Visible  
              }  
            })  
        }  
        .width('100%')  
        .justifyContent(FlexAlign.Center)  
        .alignItems(HorizontalAlign.Center)  
      }  
      .height('100%')  
  
  
      Text('')  
        .onClick(() => {  
          if (this.visible == Visibility.Visible) {  
            this.visible = Visibility.None  
          } else {  
            this.visible = Visibility.Visible  
          }  
        })  
        .width('100%')  
        .height('100%')// 透明度可以自己调节一下  
        .opacity(0.16)  
        .backgroundColor(0x000000)  
        .visibility(this.visible)  
  
      Column() {  
        Image($r('app.media.icon'))  
          .width(300)  
          .height(300)  
          .draggable(false)  
          .visibility(this.visible)  
          .scale({ x: this.scaleValue, y: this.scaleValue, z: 1 })  
          .translate({ x: this.offsetX, y: this.offsetY, z: 0 })  
  
          .gesture(  
            GestureGroup(GestureMode.Parallel,  
              PinchGesture({fingers:2})  
                .onActionStart((event?: GestureEvent) => {  
                  console.info('Pinch start')  
                })  
                .onActionUpdate((event?: GestureEvent) => {  
                  if (event) {  
                    this.scaleValue = this.pinchValue * event.scale  
                    this.pinchX = event.pinchCenterX  
                    PanGesture()  
                      .onActionUpdate((event?: GestureEvent) => {  
                        if (event) {  
                          this.offsetX = this.positionX + event.offsetX  
                          this.offsetY = this.positionY + event.offsetY  
                        }  
                        console.info('pan update')  
                      })  
                      .onActionEnd(() => {  
                        this.positionX = this.offsetX  
                        this.positionY = this.offsetY  
                        console.info('pan end')  
                      })  
                    )  
                    )  
                  }  
                }  
      }  
    }
分享
微博
QQ
微信
回复
2024-10-28 16:45:46
相关问题
HarmonyOS 需要一个筛选页面的demo
324浏览 • 1回复 待解决
需要一个NFC读取的demo
589浏览 • 1回复 待解决
需要一个获取当前省份的方法
372浏览 • 1回复 待解决
HarmonyOS使用Web组件预览PDF和图片
685浏览 • 1回复 待解决
想要实现一个图片裁剪的功能
339浏览 • 1回复 待解决
如何实现一个折叠组件
966浏览 • 1回复 待解决
如何为图片添加一个模糊的效果?
426浏览 • 2回复 待解决
鸿蒙 如何实现一个渐变的圆形图片
12568浏览 • 2回复 已解决