|  |  |  |  | using UnityEngine; | 
					
						
							|  |  |  |  | using FairyGUI; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | public class ScrollPaneMain : MonoBehaviour | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  |     GComponent _mainView; | 
					
						
							|  |  |  |  |     GList _list; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     void Awake() | 
					
						
							|  |  |  |  |     { | 
					
						
							|  |  |  |  |         Application.targetFrameRate = 60; | 
					
						
							|  |  |  |  |         Stage.inst.onKeyDown.Add(OnKeyDown); | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     void Start() | 
					
						
							|  |  |  |  |     { | 
					
						
							|  |  |  |  |         _mainView = this.GetComponent<UIPanel>().ui; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         _list = _mainView.GetChild("list").asList; | 
					
						
							|  |  |  |  |         _list.itemRenderer = RenderListItem; | 
					
						
							|  |  |  |  |         _list.SetVirtual(); | 
					
						
							|  |  |  |  |         _list.numItems = 1000; | 
					
						
							|  |  |  |  |         _list.onTouchBegin.Add(OnClickList); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         _mainView.GetChild("box").asCom.onDrop.Add(OnDrop); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         LongPressGesture gesture = new LongPressGesture(_list); | 
					
						
							|  |  |  |  |         gesture.once = true; | 
					
						
							|  |  |  |  |         gesture.trigger = 1f; | 
					
						
							|  |  |  |  |         gesture.onAction.Add(OnLongPress); | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     void RenderListItem(int index, GObject obj) | 
					
						
							|  |  |  |  |     { | 
					
						
							|  |  |  |  |         GButton item = obj.asButton; | 
					
						
							|  |  |  |  |         item.title = "Item " + index; | 
					
						
							|  |  |  |  |         item.scrollPane.posX = 0; //reset scroll pos | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         //Be carefull, RenderListItem is calling repeatedly, dont call 'Add' here! | 
					
						
							|  |  |  |  |         //请注意,RenderListItem是重复调用的,不要使用Add增加侦听! | 
					
						
							|  |  |  |  |         item.GetChild("b0").onClick.Set(OnClickStick); | 
					
						
							|  |  |  |  |         item.GetChild("b1").onClick.Set(OnClickDelete); | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     void OnClickList(EventContext context) | 
					
						
							|  |  |  |  |     { | 
					
						
							|  |  |  |  |         //find out if there is an item in edit status | 
					
						
							|  |  |  |  |         //查找是否有项目处于编辑状态 | 
					
						
							|  |  |  |  |         int cnt = _list.numChildren; | 
					
						
							|  |  |  |  |         for (int i = 0; i < cnt; i++) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             GButton item = _list.GetChildAt(i).asButton; | 
					
						
							|  |  |  |  |             if (item.scrollPane.posX != 0) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 //Check if clicked on the button | 
					
						
							|  |  |  |  |                 if (item.GetChild("b0").asButton.IsAncestorOf(GRoot.inst.touchTarget) | 
					
						
							|  |  |  |  |                     || item.GetChild("b1").asButton.IsAncestorOf(GRoot.inst.touchTarget)) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     return; | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                 item.scrollPane.SetPosX(0, true); | 
					
						
							|  |  |  |  |                 //avoid scroll pane default behavior | 
					
						
							|  |  |  |  |                 //取消滚动面板可能发生的拉动。 | 
					
						
							|  |  |  |  |                 item.scrollPane.CancelDragging(); | 
					
						
							|  |  |  |  |                 _list.scrollPane.CancelDragging(); | 
					
						
							|  |  |  |  |                 break; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     void OnLongPress(EventContext context) | 
					
						
							|  |  |  |  |     { | 
					
						
							|  |  |  |  |         //find out which item is under finger | 
					
						
							|  |  |  |  |         //逐层往上知道查到点击了那个item | 
					
						
							|  |  |  |  |         GObject obj = GRoot.inst.touchTarget; | 
					
						
							|  |  |  |  |         GObject p = obj.parent; | 
					
						
							|  |  |  |  |         while (p != null) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             if (p == _list) | 
					
						
							|  |  |  |  |                 break; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             p = p.parent; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         if (p == null) | 
					
						
							|  |  |  |  |             return; | 
					
						
							|  |  |  |  |         Debug.Log(obj.text); | 
					
						
							|  |  |  |  |         DragDropManager.inst.StartDrag(obj, obj.icon, obj.text); | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     void OnDrop(EventContext context) | 
					
						
							|  |  |  |  |     { | 
					
						
							|  |  |  |  |         _mainView.GetChild("txt").text = "Drop " + (string)context.data; | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     void OnClickStick(EventContext context) | 
					
						
							|  |  |  |  |     { | 
					
						
							|  |  |  |  |         _mainView.GetChild("txt").text = "Stick " + (((GObject)context.sender).parent).text; | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     void OnClickDelete(EventContext context) | 
					
						
							|  |  |  |  |     { | 
					
						
							|  |  |  |  |         _mainView.GetChild("txt").text = "Delete " + (((GObject)context.sender).parent).text; | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     void OnKeyDown(EventContext context) | 
					
						
							|  |  |  |  |     { | 
					
						
							|  |  |  |  |         if (context.inputEvent.keyCode == KeyCode.Escape) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             Application.Quit(); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | } |