Unity工具类ScrollView实现拖拽滑动翻页
简介:
在进行UI设计的时候,经常会使用Unity中UI提供的ScrollView,类似Android中的ScrollView,在进行图片预览,多个翻页的时候,能实现很好的效果。
该类中根据Unity的EventSystems中拖拽事件,实现对页码的滑动监听,在使用的时候,新建UI--->ScrollView,把该类组件添加到ScrollView上,把对应的content加入该脚本中的content,调整ScrollView和Content,设置单个滑动页的宽度,拖拽的阈值,即可监听到拖拽,如果是动态实例化ScrollView中的child,需设置当前最大页码数。SetCurIndex可以实现直接定位到当前页码对应的滑动页,代码比较简单,直接贴出来。
publicclassScrollViewListener:MonoBehaviour,IDragHandler,IBeginDragHandler,IEndDragHandler { //滑动方向 publicenumMoveDirection { None=0, Left, Right, } publicfloatSingleItemWidth;//单个滑动页的宽度 publicRectTransformcontent;//当前ScrollView的Content publicfloatDragMinValue=5f;//拖动过程中允许的最小的拖拽值,低于此值就不算拖拽,不执行翻页事件 privateMoveDirectiondirection=MoveDirection.None; privateintCurIndex=0;//当前页码 privateintMaxIndex=0;//最大页码 publicboolcanMove=true;//是否能移动 privateVector3originalPos; privatefloatmaxDeltaX=0f;//取整个拖动过程中的最大值 publicActionOnPageChange;//对外提供页码修改的回调 /// ///滑到下一页 /// privatevoidMoveToNext() { if(direction==MoveDirection.Left) { if(CurIndex{ if(null!=OnPageChange) { OnPageChange(CurIndex); } canMove=true; }); } } elseif(direction==MoveDirection.Right) { if(CurIndex>0) { CurIndex--; canMove=false; content.DOLocalMoveX(content.localPosition.x+SingleItemWidth,1f).OnComplete(()=> { if(null!=OnPageChange) { OnPageChange(CurIndex); } canMove=true; }); } } } /// ///设置当前滑动列表的页数的最大值 /// ///publicvoidSetMaxIndex(intmax) { MaxIndex=max-1;//最大下标值为页数减1 } /// ///设置当前页 /// ///publicvoidSetCurIndex(intindex) { CurIndex=index; floatx=content.localPosition.x-SingleItemWidth*CurIndex; content.localPosition=newVector3(x,content.localPosition.y,content.localPosition.z); } publicvoidResetPosition() { content.localPosition=originalPos; } privatevoidAwake() { CurIndex=0; originalPos=content.localPosition; } publicvoidOnDrag(PointerEventDataeventData) { if(Mathf.Abs(eventData.delta.x)>maxDeltaX) { maxDeltaX=Mathf.Abs(eventData.delta.x); } } publicvoidOnBeginDrag(PointerEventDataeventData) { if(eventData.delta.x>0) { direction=MoveDirection.Right; } elseif(eventData.delta.x<0) { direction=MoveDirection.Left; } else { direction=MoveDirection.None; } if(Mathf.Abs(eventData.delta.x)>maxDeltaX) { maxDeltaX=Mathf.Abs(eventData.delta.x); } } publicvoidOnEndDrag(PointerEventDataeventData) { if(Mathf.Abs(eventData.delta.x)>maxDeltaX) { maxDeltaX=Mathf.Abs(eventData.delta.x); } if(maxDeltaX>DragMinValue) { //计算下一页的目的点然后移动 if(canMove) { MoveToNext(); } } maxDeltaX=0f; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。