跳到主要内容

ScrollView 滚动视图

ScrollView 即为滚动视图,开启一个滚动窗口,可以在里面添加显示内容,内容可以在此固定大小的窗口内左右上下滑动。ScrollView 和其他显示对象一样,需要添加到显示列表中才能被显示出来。下面介绍如何使用 ScrollView 并演示其效果。

egret.ScrollView 类位于game库当中,如果使用的话需要确保项目中引用了game库。方法操作可以参考:模块化配置和第三方库的使用方法

1.创建滚动视图

创建 ScrollView 实例的方法如下:


const myscrollView: egret.ScrollView = new egret.ScrollView();


这里创建了一个空的myscrollView,给ScrollView添加一个滚动显示的"内容"代码如下:


myscrollView.setContent(内容显示对象);


如果不设置滚动视图的宽和高,myscrollView的宽和高将被内容撑大,看不到滚动的效果。所以一般需要手动设置滚动视图的宽和高:


myscrollView.width =;

myscrollView.height =;


最后把myscrollView显示对象添加到显示列表当中:



容器.addChild(myscrollView);


myscrollView里面的"内容"是不需要添加到显示列表中的,放到ScorllView里面即可。

2.ScrollView 的其他设置

上面的程序的完整代码如下:


class ScrollViewDemo extends egret.DisplayObjectContainer {

public constructor() {

super();

this.once(egret.Event.ADDED_TO_STAGE, this.onAddToStage, this);

}

private onAddToStage() {

//创建内容,边长为50 * 50 的格子 9 * 9个。

const content: egret.Shape = this.createGird(50, 50, 9, 9);

//创建ScrollView

const myscrollView: egret.ScrollView = new egret.ScrollView();

myscrollView.setContent(content);

myscrollView.width = 200;

myscrollView.height = 300;

myscrollView.x = this.stage.stageWidth / 2;

myscrollView.y = this.stage.stageHeight / 2;

myscrollView.anchorOffsetX = myscrollView.width / 2;

myscrollView.anchorOffsetY = myscrollView.height / 2;

this.addChild(myscrollView);

//背景图,用来展现ScrollView 的边界

const background: egret.Shape = new egret.Shape();

background.graphics.lineStyle(1, 0x1102cc);

background.graphics.drawRect(0, 0, 200, 300);

background.graphics.endFill();

background.x = this.stage.stageWidth / 2;

background.y = this.stage.stageHeight / 2;

background.anchorOffsetX = background.width / 2;

background.anchorOffsetY = background.height / 2;

this.addChild(background);

}

//创建格子函数,根据输入的宽和高来创建一个 row * line的格子图。并返回Shape对象。

private createGird(w: number, h: number, row: number, line: number): egret.Shape {

const shape: egret.Shape = new egret.Shape();

for (let i = 0; i < row; i++) {

for (let j = 0; j < line; j++) {

if ((j + row * i) % 2 === 0) {

shape.graphics.beginFill(0xF9C20B);

shape.graphics.drawRect(j * w, i * h, w, h);

shape.graphics.endFill();

}

else {

shape.graphics.beginFill(0x2A9FFF);

shape.graphics.drawRect(j * w, i * h, w, h);

shape.graphics.endFill();

}

}

}

return shape;

}

}


创建一个由 50 50 的格子组成的 9 9的图形模拟ScrollView的内容。再创建了一个 ScrollVeiw,并把他放到屏幕中间设置他的宽和高为 200 * 300,这样内容的区域比 ScollView 的区域大,可以看到滚动的效果。最后添加一个跟 ScrollView 同样大小的边框,来显示 ScollView 的边界。可以看到下面的效果:

2.1.启用回弹

ScrollViewbounces 是否启用回弹,当启用回弹后,ScrollView中内容在到达边界后允许继续拖动,在用户拖动操作结束后,将反弹回边界位置。 默认情况下是启用回弹的,下面关闭回弹查看效果效果。 在上面代码中this.addChild(myscrollView);这一行后面加入


myscrollView.bounces = false;


2.2.滚动策略

ScrollView 可以设置两种滚动策略,水平滚动策略(horizontalScrollPolicy)和垂直滚动策略(verticalScrollPolicy)。各有三个具体的值,on,offauto,默认为auto。 以水平滚动策略为例,如果设置为on,表示 ScrollView 里面的"内容"可以水平拖动,相反如果设置为off将不能拖动。设置为auto时有所不同,只有当"内容"大于ScrollView的宽度时才可以拖动。具体可以看下面的代码,我们先把格子缩小,修改其宽度,然后设置ScrollView的水平滚动策略为auto,垂直滚动策略为on,来看看效果。 修改content的代码如下,格子为 3*3:

//创建内容,边长为50 * 50 的格子 3 * 3个。

const content: egret.Shape = this.createGird(50, 50, 3, 3);


在上面代码中this.addChild(myscrollView);这一行后面加入


//垂直滚动设置为 on

myscrollView.verticalScrollPolicy = "on";

//水平滚动设置为 auto

myscrollView.horizontalScrollPolicy = "auto";


可以看到只能在垂直方向滚动,而水平方向不能滚动。

2.3.监听事件

当拖动 ScrollView 里面的内容时会抛出 egret.Event.CHANGE 事件。完成一次拖动在下一次开始之前会抛出egret.Event.COMPLETE,继续添加下面代码:


myscrollView.addEventListener(egret.Event.COMPLETE, this.onComplete, this);

myscrollView.addEventListener(egret.Event.CHANGE, this.onChange, this);


并在ScrollViewDemo类里添加监听处理函数:


private function onComplete(event: egret.Event) {

console.log("on Complete");

}

private function onChange(event: egret.Event) {

console.log("on Change");

}


可以看到下面效果:

其他效果可以参考API:ScrollView