你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
输入关键字进行搜索
搜索:
没有找到相关结果
a1436921873 - 90后
赞同来自:
EvilShuU
要回复问题请先登录或注册
2 个回复
a1436921873 - 90后
赞同来自:
EvilShuU
赞同来自:
list.scrollPane.onScroll.Add(DoCircle);
private void DoCircle() {
//动态算出当前滑动圆心
float listCenterX = list.scrollPane.posX + list.viewWidth / 2;
circleCenter.x = listCenterX;
for (int i = 0; i < list.numChildren; i++) {
GObject item = list.GetChildAt(i);
Vector2 posItem = new Vector2(item.x + item.width / 2, item.y);
Vector2 dir = circleCenter - posItem;
float angle = Vector2.Angle(Vector2.up, dir);
float cosY = Mathf.Cos(angle / 180 * Mathf.PI);
float posTarY = cosY * radius;
//Debug.Log(list.ChildIndexToItemIndex(i) + " : angle: " + angle + "; cosY : " + cosY);
float offsetY = radius - cosY * radius;
//Debug.Log(list.ChildIndexToItemIndex(i) + " : offsetY: " + offsetY);
item.y = offsetY;
}
}
private void DoEnd() {
int indexItem = 0;
float minDistance = 0;
//动态算出当前滑动圆心
float listCenterX = list.scrollPane.posX + list.viewWidth / 2;
for (int i = 0; i < list.numChildren; i++) {
GObject item = list.GetChildAt(i);
float itemCenter = item.x + item.width / 2;
float itemWidth = item.width;
float distance = Mathf.Abs(listCenterX - itemCenter);
if (i == 0) {
minDistance = distance;
indexItem = list.ChildIndexToItemIndex(i);
}
else {
if (distance < minDistance) {
minDistance = distance;
indexItem = list.ChildIndexToItemIndex(i);
}
}
}
//转换到显示对象索引
ScrollToView(indexItem, true);
}
private void OnClickItem(EventContext context) {
GButton item = ((GObject)context.data).asButton;
if (item == null)
return;
if (item.grayed) {
list.selectedIndex = -1;
return;
}
int indexChild = list.GetChildIndex(item);
int indexItem = list.ChildIndexToItemIndex(indexChild);
Debug.Log("indexItem: " + indexItem);
ScrollToView(indexItem, true);
}
private void ScrollToView(int index, bool ani = false) {
int targetIndex = index - 1;
if (targetIndex < 0) {
list.ScrollToView(0, ani);
}
else {
list.ScrollToView(targetIndex, ani);
}
}