请教个异形遮罩(Mask)的问题,scrollView的边界渐变


实际效果是这种的,这是Android原生的demo
ListView ,就简单的使用了几行代码就可以了
android:fadingEdge=“vertical”
android:fadingEdgeLength=“150dp”
android:requiresFadingEdge=“vertical”
我也去Android里看了源码,View.draw方法里,以顶部渐变遮罩为例
if (drawTop) {
matrix.setScale(1, fadeHeight * topFadeStrength);
matrix.postTranslate(left, top);
fade.setLocalMatrix(matrix);
p.setShader(fade);
if (solidColor == 0) {
canvas.restoreUnclippedLayer(topSaveCount, p);
} else {
canvas.drawRect(left, top, right, top + length, p);
}
}
差不多知道原生的实现是画了一块渐变的区域用来实现渐变遮罩的效果,
但是在Cocos里实在是想不出来怎么实现在scrollView里添加这种效果,

******简单的用一张渐变图片的方法我也试过了,但是如果最底部背景变化的话就穿帮了
现在我们使用的就是这种效果,一张渐变图,贴在scrollview的边界处,再加上最底部的背景色贴合就不穿帮了,
image

有大佬能看看么?

scrollview里面的所有节点用同一个shader
在frag里面通过渲染内容的世界坐标,做出对应处理就可以了。
或者用相机,配合RenderTexture,生成一张新纹理,然后对纹理做处理

不用shder的话,就用item坐标Y去跟视图上下边界做比例计算透明度

自己再根据上一帧的Y和这一帧的Y判断是上滑还是下滑,切换上下的透明度逻辑。

不用shader怎么设置渐变透明度?整个节点设置透明度?还是修改顶点数据里面的颜色属性? :rofl: :rofl: :rofl:

单个节点有渐变啊,那就只能shader了,不过原理一样,shader根据参数改对应uv.y的透明度就行啦

现在sprite的顶点数据里面没有颜色了,只有uv和坐标了,修改颜色只能通过uniform传过去了。除非你重写一个Assembler。3.x版本的还没用过,不知道在3.x有没有顶点数据。