HarmonyOS 关于Scroll中如何实现 横向+纵向滚动的功能

Column() {  
  Scroll() {  
    Image($r('app.media.test'))  
      .width(800)  
      .height(2000)  
  }.scrollable(ScrollDirection.Horizontal)  
  .scrollable(ScrollDirection.Vertical)  
  .width('100%')  
  .height(1000)  
}

如何指定croll的滚动属性才可以实现横向加竖向的滚动方式。另外Scroll是否支持双指放大缩小的功能。

HarmonyOS
2024-09-29 11:59:04
浏览
1
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
put_get
1

1、Scroll只能单向滚动;目前只能通过嵌套的方式做到横向+纵向的滚动。

2、缩放的能力通过gesture实现。哪个组件设置了gesture,哪个组件就会随着手势放缩,其内部的子组件也会随之缩放,例如下述示例代码中外层的Scroll和Image都绑定了gesture,两个分别都会响应放缩的手势。

代码如下:

@Entry  
@Component  
struct Index {  
  private scrollController: Scroller = new Scroller();  
  private scrollControllerOut: Scroller = new Scroller();  
  message: string = "12314567123145671231456712314567"  
  @State scaleValue: number = 1;  
  @State pinchValue: number = 1;  
  @State pinchX: number = 0;  
  @State pinchY: number = 0;  
  build() {  
    Column() {  
      Scroll(this.scrollControllerOut) {  
        Scroll(this.scrollController) {  
          Column() {  
            Image($r("app.media.startIcon")).width(100)  
              .scale({ x: this.scaleValue, y: this.scaleValue, z: 1 })  
              .gesture(  
                PinchGesture({ fingers: 2 }).onActionStart((event: GestureEvent | undefined) => {  
                  console.info('Pinch start');  
                })// 当捏合手势触发时,可以通过回调函数获取缩放比例,从而修改组件的缩放比例  
                  .onActionUpdate((event: GestureEvent | undefined) => {  
                    if (event) {  
                      this.scaleValue = this.pinchValue * event.scale;  
                      this.pinchX = event.pinchCenterX;  
                      this.pinchY = event.pinchCenterY;  
                    }  
                  })  
                  .onActionEnd(() => {  
                    this.pinchValue = this.scaleValue;  
                    console.info('Pinch end');  
                  })  
              )  
          }  
        }  
        .scrollable(ScrollDirection.Horizontal)  
        .nestedScroll({ scrollForward: NestedScrollMode.PARALLEL, scrollBackward: NestedScrollMode.PARALLEL })  
      }  
      .width(300)  
      .height(300)  
      .scrollable(ScrollDirection.Vertical)  
      .scale({ x: this.scaleValue, y: this.scaleValue, z: 1 })  
      .gesture(  
        PinchGesture({ fingers: 2 }).onActionStart((event: GestureEvent | undefined) => {  
          console.info('Pinch start');  
        })// 当捏合手势触发时,可以通过回调函数获取缩放比例,从而修改组件的缩放比例  
          .onActionUpdate((event: GestureEvent | undefined) => {  
            if (event) {  
              this.scaleValue = this.pinchValue * event.scale;  
              this.pinchX = event.pinchCenterX;  
              this.pinchY = event.pinchCenterY;  
            }  
          })  
          .onActionEnd(() => {  
            this.pinchValue = this.scaleValue;  
            console.info('Pinch end');  
          })  
      )  
    }  
    .height('100%')  
    .width('100%')  
  }  
}
分享
微博
QQ
微信
回复
2024-09-29 17:30:34
相关问题
HarmonyOS 自动横向滚动List
136浏览 • 1回复 待解决
HarmonyOS Scroll组件滚动控制
55浏览 • 1回复 待解决
如何实现纵向且逆向滑动Slider?
437浏览 • 1回复 待解决
HarmonyOS scroll和list滚动冲突
413浏览 • 1回复 待解决
HarmonyOS Scroll组件滚动问题
587浏览 • 1回复 待解决
如何获取Scroll组件的当前滚动偏移量
2180浏览 • 1回复 待解决