/** * ScrollView的滚动方向 */ enum class Direction { NONE, VERTICAL, HORIZONTAL, BOTH }; /** * ScrollView的滚动事件类型 */ enum class EventType { SCROLL_TO_TOP, // 向上滚动 SCROLL_TO_BOTTOM, // 向下滚动 SCROLL_TO_LEFT, // 向左滚动 SCROLL_TO_RIGHT, // 向右滚动 SCROLLING, // 滚动中 BOUNCE_TOP, // 向上反弹 BOUNCE_BOTTOM, // 向下反弹 BOUNCE_LEFT, // 向左反弹 BOUNCE_RIGHT, // 向右反弹 CONTAINER_MOVED // 容器移动 }; /** * 构造函数 * @js ctor * @lua new */ ScrollView(); /** * 创建一个空ScrollView * @return 返回一个ScrollView */ static ScrollView* create(); /** * 设置ScrollView的滚动方向 * @param dir 查看枚举 Direction */ virtual void setDirection(Direction dir); /** * 获取ScrollView的滚动方向 * @return 返回Direction枚举 */ Direction getDirection()const; /** * 获取ScrollView内的基容器,是一个ScrollView的子视图(继承关系) * @return 返回ScrollView内的子容器 */ Layout* getInnerContainer()const; /** * 将ScrollView滚动到底部 * @param timeInSec 滚动时长 * @param attenuated 是否进行减速 */ void scrollToBottom(float timeInSec, bool attenuated); /** * 将ScrollView滚动到顶部 * @param timeInSec 滚动时长 * @param attenuated 是否进行减速 */ void scrollToTop(float timeInSec, bool attenuated); /** * 将ScrollView滚动到左侧 * @param timeInSec 滚动时长 * @param attenuated 是否进行减速 */ void scrollToLeft(float timeInSec, bool attenuated); /** * 将ScrollView滚动到右侧 * @param timeInSec 滚动时长 * @param attenuated 是否进行减速 */ void scrollToRight(float timeInSec, bool attenuated); /** * 将ScrollView滚动到顶部左侧 * @param timeInSec 滚动时长 * @param attenuated 是否进行减速 */ void scrollToTopLeft(float timeInSec, bool attenuated); /** * 将ScrollView滚动到顶部右侧 * @param timeInSec 滚动时长 * @param attenuated 是否进行减速 */ void scrollToTopRight(float timeInSec, bool attenuated); /** * 将ScrollView滚动到底部左侧 * @param timeInSec 滚动时长 * @param attenuated 是否进行减速 */ void scrollToBottomLeft(float timeInSec, bool attenuated); /** * 将ScrollView滚动到底部右侧 * @param timeInSec 滚动时长 * @param attenuated 是否进行减速 */ void scrollToBottomRight(float timeInSec, bool attenuated); /** * 将ScrollView以垂直方向滚动到指定百分比位置 * @param percent 百分值 0-100 * @param timeInSec 滚动时长 * @param attenuated 是否进行减速 */ void scrollToPercentVertical(float percent, float timeInSec, bool attenuated); /** * 将ScrollView以水平方向滚动到指定百分比位置 * @param percent 百分值 0-100 * @param timeInSec 滚动时长 * @param attenuated 是否进行减速 */ void scrollToPercentHorizontal(float percent, float timeInSec, bool attenuated); /** * 将ScrollView以水平和垂直方向滚动到指定百分比位置 * @param percent 百分值 0-100 * @param timeInSec 滚动时长 * @param attenuated 是否进行减速 */ void scrollToPercentBothDirection(const Vec2& percent, float timeInSec, bool attenuated); /** * 跳到ScrollView底部 */ virtual void jumpToBottom(); /** * 跳到ScrollView顶部 */ virtual void jumpToTop(); /** * 跳到ScrollView左侧 */ virtual void jumpToLeft(); /** * 跳到ScrollView右侧 */ virtual void jumpToRight(); /** * 跳到ScrollView左上 */ virtual void jumpToTopLeft(); /** * 跳到ScrollView右上 */ virtual void jumpToTopRight(); /** * 跳到ScrollView左下 */ virtual void jumpToBottomLeft(); /** * 跳到ScrollView右下 */ virtual void jumpToBottomRight(); /** * 以垂直方向跳到ScrollView指定的百分比位置 * @param percent 百分值 0-100 */ virtual void jumpToPercentVertical(float percent); /** * 以水平方向跳到ScrollView指定的百分比位置 * @param percent 百分值 0-100 */ virtual void jumpToPercentHorizontal(float percent); /** * 以水平和垂直方向跳到ScrollView指定的百分比位置 * @param percent 百分值 0-100 */ virtual void jumpToPercentBothDirection(const Vec2& percent); /** * 设置ScrollView的滚动范围大小 * @param size 滚动范围 */ void setInnerContainerSize(const Size &size); /** * 获取ScrollView的滚动范围大小 * @return Size 滚动范围 */ const Size& getInnerContainerSize() const; /** * 设置ScrollView的滚动位置 * @param pos 坐标 */ void setInnerContainerPosition(const Vec2 &pos); /** * 获取ScrollView的滚动位置 * @return Vec2 坐标 */ const Vec2 getInnerContainerPosition() const; /** * ScrollView即将滚动时调用的回调 */ typedef std::function<void(Ref*, EventType)> ccScrollViewCallback; /** * 添加ScrollView的滚动事件回调 * @param callback 查看ccScrollViewCallback */ virtual void addEventListener(const ccScrollViewCallback& callback); /** * 添加子节点 * @param child 子节点 * @param localZOrder 层级树中的位置 * @param tag 节点tag值 * @param name 节点名 */ virtual void addChild(Node* child)override; virtual void addChild(Node * child, int localZOrder)override; virtual void addChild(Node* child, int localZOrder, int tag) override; virtual void addChild(Node* child, int localZOrder, const std::string &name) override; /** * 移除所有子节点 */ virtual void removeAllChildren() override; /** * 移除所有子节点并清除动作及回调函数 */ virtual void removeAllChildrenWithCleanup(bool cleanup) override; /** * 移除指定节点 * @param child 子节点 * @param cleaup 是否清除动作及回调函数 */ virtual void removeChild(Node* child, bool cleaup = true) override; /** * 获取子节点 */ virtual Vector<Node*>& getChildren() override; virtual const Vector<Node*>& getChildren() const override; /** * 获取所有子节点的总数 */ virtual ssize_t getChildrenCount() const override; /** * 通过tag获取子节点 * @param tag 节点tag值 */ virtual Node * getChildByTag(int tag) const override; /** * 通过name获取子节点 * @param name 节点name值 */ virtual Node* getChildByName(const std::string& name)const override; /** * ScrollView交互事件 */ virtual bool onTouchBegan(Touch *touch, Event *unusedEvent) override; virtual void onTouchMoved(Touch *touch, Event *unusedEvent) override; virtual void onTouchEnded(Touch *touch, Event *unusedEvent) override; virtual void onTouchCancelled(Touch *touch, Event *unusedEvent) override; /** * ? */ virtual void update(float dt) override; /** * 设置ScrollView回弹效果 * @param enabled 是否可以回弹 */ void setBounceEnabled(bool enabled); /** * 获取ScrollView是否回弹 * @return 是否可以回弹 */ bool isBounceEnabled() const; /** * 设置ScrollView的惯性滚动(即快速拖动后,会继续滚动一段距离并逐渐停下) * @param enabled 是否设置惯性滚动 */ void setInertiaScrollEnabled(bool enabled); /** * 获取ScrollView是否惯性滚动 * @return 是否支持惯性滚动 */ bool isInertiaScrollEnabled() const; /** * 设置ScrollView是否显示滚动条 * @param enabled 是否显示滚动条 */ void setScrollBarEnabled(bool enabled); /** * 获取ScrollView是否显示滚动条 * @return 是否显示滚动条 */ bool isScrollBarEnabled() const; /** * 从左下角(水平)和右上角(垂直)设置滚动条位置 * @param positionFromCorner 坐标位置 */ void setScrollBarPositionFromCorner(const Vec2& positionFromCorner); /** * 从右上角设置垂直滚动条位置 * @param positionFromCorner 坐标位置 */ void setScrollBarPositionFromCornerForVertical(const Vec2& positionFromCorner); /** * 从右上角获取垂直滚动条的位置 * @return positionFromCorner 坐标位置 */ Vec2 getScrollBarPositionFromCornerForVertical() const; /** * 从左下角设置水平滚动条的位置 * @param positionFromCorner 坐标位置 */ void setScrollBarPositionFromCornerForHorizontal(const Vec2& positionFromCorner); /** * 从右上角获取水平滚动条的位置 * @return positionFromCorner 坐标位置 */ Vec2 getScrollBarPositionFromCornerForHorizontal() const; /** * 设置滚动条的宽度 * @param width 滚动条的宽度 */ void setScrollBarWidth(float width); /** * 获取滚动条的宽度 * @return 滚动条的宽度 */ float getScrollBarWidth() const; /** * 设置滚动条的颜色 * @param color 滚动条颜色 */ void setScrollBarColor(const Color3B& color); /** * 获取滚动条的颜色 * @return 滚动条颜色 */ const Color3B& getScrollBarColor() const; /** * 设置滚动条的透明度 * @param opacity 透明度 0-100 */ void setScrollBarOpacity(GLubyte opacity); /** * 获取滚动条的透明度 * @return 透明度 0-100 */ GLubyte getScrollBarOpacity() const; /** * 设置滚动条自动隐藏状态 * @param autoHideEnabled 是否自动隐藏 */ void setScrollBarAutoHideEnabled(bool autoHideEnabled); /** * 获取滚动条自动隐藏状态 * @return 是否自动隐藏 */ bool isScrollBarAutoHideEnabled() const; /** * 设置滚动条自动隐藏时间 * @param autoHideTime 自动隐藏的时间 */ void setScrollBarAutoHideTime(float autoHideTime); /** * 获取滚动条自动隐藏时间 * @return 自动隐藏的时间 */ float getScrollBarAutoHideTime() const; enum class Type { ABSOLUTE, VERTICAL, HORIZONTAL, RELATIVE }; /** * 设置ScrollView的布局类型 * @param type 类型枚举(查阅Layout::Type) */ virtual void setLayoutType(Type type) override; /** * 设置ScrollView的布局类型 * @param type 类型枚举(查阅Layout::Type) */ virtual Type getLayoutType() const override; /** * 获得ScrollView控件描述 */ virtual std::string getDescription() const override; /** * @lua NA */ virtual void onEnter() override; /** * 当一个小部件在一个布局中时,你可以调用这个方法来在指定的方向上获得下一个焦点部件。 * 如果小部件不在布局中,它将自行返回 *@param direction 在布局中查找下一个重点小部件的方向 *@param current 当前重点小部件 *@return 布局中的下一个重点小部件 */ virtual Widget* findNextFocusedWidget(FocusDirection direction, Widget* current) override;
ScrollView示例
// 初始化 var scrollView = new ccui.ScrollView(); // 设置方向 scrollView.setDirection(ccui.ScrollView.DIR_VERTICAL); // 允许交互 scrollView.setTouchEnabled(true); // 设置回弹 scrollView.setBounceEnabled(true); // 设置滑动的惯性 scrollView.setInertiaScrollEnabled(true); // 设置滚动内容的范围 scrollView.setContentSize(cc.size(size.width, size.height)); // 设置容器的大小 scrollView.setInnerContainerSize(cc.size(size.width, size.height*4)); // 添加触摸事件监听器 scrollView.addEventListener(this.scrollViewCall, this); // 锚点 scrollView.setAnchorPoint(cc.p(0,0)); // 位置坐标 scrollView.setPosition(cc.p(0,0)); // 滚动至底部 scrollView.jumpToBottom(); // 0-3滑动到上下左右触发,4滑动一直触发,5-8惯性滑动到上下左右触发 scrollViewCall:function(sender, type){ switch (type){ case ccui.ScrollView.EVENT_SCROLL_TO_TOP:break; case ccui.ScrollView.EVENT_SCROLL_TO_BOTTOM:break; case ccui.ScrollView.EVENT_SCROLL_TO_LEFT:break; case ccui.ScrollView.EVENT_SCROLL_TO_RIGHT:break; case ccui.ScrollView.EVENT_SCROLLING:break; case ccui.ScrollView.EVENT_BOUNCE_TOP:break; case ccui.ScrollView.EVENT_BOUNCE_BOTTOM:break; case ccui.ScrollView.EVENT_BOUNCE_LEFT:break; case ccui.ScrollView.EVENT_BOUNCE_RIGHT:break; default:break; } }, this.addChild(scrollView);
ScrollView制作表情列表
var emojiView = new ccui.ScrollView(); // 初始化 var emojiList = game.emojiList; // 表情数组(保存emoji表情,如��) var width = emojiView.width; // 滚动视图宽度 var rowCount = 7; // 每行个数 var emojiWidth = width / rowCount; // 表情按钮大小 var maxRow = Math.ceil(emojiList.length / rowCount); // 最大行 var scrollViewHeight = maxRow * emojiWidth; // 滚动视图内容高度 emojiView.setInnerContainerSize(cc.size(emojiView.width, scrollViewHeight)); // 设置滚动范围 // 将emoji表情添加到滚动列表上 for (var i = 0; i < emojiList.length; i++) { var row = parseInt(i / rowCount); // 当前行 var col = i % rowCount; // 当前列 // 按钮 var emojiBtn = new ccui.Button("",""); emojiBtn.setAnchorPoint(0.5, 0.5) emojiBtn.setPosition(emojiWidth * col + emojiWidth / 2, scrollViewHeight - (emojiWidth * row + emojiWidth / 2)); emojiBtn.setTitleText(emojiList[i]);//在按钮上方添加一个label. emojiBtn.setTitleFontSize(40); emojiView.addChild(emojiBtn); }