NGUI翻页

  1 using UnityEngine;
  2 using System.Collections;
  3
  4 public class TurnPage : MonoBehaviour
  5 {
  6     public UIButton btn_leftOrTop;
  7     public UIButton btn_rightOrButtom;
  8     public int m_RowOrLineNum; // 当前界面显示的行数或者列数
  9     public float strength = 8f;
 10
 11     private UIScrollView m_scrollView;
 12     private Vector2 m_initialPosition; // scroll初始位置
 13     private UIGrid grid;
 14     private Bounds itemBounds;
 15
 16     private float allRowsNum; // 总共有多少列(行)
 17     private float allPagesNum; // 总共有多少页
 18     private float pageOffset; // 每页的偏移量
 19
 20     private void Start()
 21     {
 22         UIManager.SetButtonEventHandler(btn_leftOrTop.gameObject, EnumButtonEvent.OnClick, OnTurnLeftOrTop, 0, 0);
 23         UIManager.SetButtonEventHandler(btn_rightOrButtom.gameObject, EnumButtonEvent.OnClick, OnTurnRightOrButtom, 0, 0);
 24         btn_leftOrTop.enabled = false;
 25         btn_rightOrButtom.enabled = false;
 26     }
 27     public IEnumerator DelayInit()
 28     {
 29         yield return new WaitForSeconds(0.5f);
 30         OnInit();
 31     }
 32     public void OnInit()
 33     {
 34         m_initialPosition = transform.localPosition; // 记录开始位置
 35         m_scrollView = this.GetComponent<UIScrollView>();// 取到scroll
 36
 37         // 处理UIGrid
 38         grid = this.GetComponentInChildren<UIGrid>();
 39         if (grid == null)
 40             return;
 41
 42         float cutSize = 0;
 43         switch (m_scrollView.movement)
 44         {
 45             case UIScrollView.Movement.Horizontal:
 46                 // 计算总共有多少列
 47                 itemBounds = NGUIMath.CalculateRelativeWidgetBounds(grid.GetChild(1).gameObject.transform); // 默认取第一个的子物体
 48                 cutSize = grid.cellWidth - itemBounds.size.x;
 49                 allRowsNum = (m_scrollView.bounds.size.x + cutSize) / grid.cellWidth;
 50                 allPagesNum = allRowsNum / m_RowOrLineNum;// 计算总共有多少页
 51                 pageOffset = (m_scrollView.bounds.size.x + cutSize) / allRowsNum * m_RowOrLineNum; // 计算每页的偏移量
 52                 break;
 53             case UIScrollView.Movement.Vertical:
 54                 // 计算总共有多少行
 55                 itemBounds = NGUIMath.CalculateRelativeWidgetBounds(grid.GetChild(1).gameObject.transform); // 默认取第一个的子物体
 56                 cutSize = grid.cellHeight - itemBounds.size.y;
 57                 allRowsNum = (m_scrollView.bounds.size.y + cutSize) / grid.cellHeight;
 58                 allPagesNum = allRowsNum / m_RowOrLineNum;// 计算总共有多少页
 59                 pageOffset = (m_scrollView.bounds.size.y + cutSize) / allRowsNum * m_RowOrLineNum; // 计算每页的偏移量
 60                 break;
 61             default:
 62                 break;
 63         }
 64
 65         btn_leftOrTop.enabled = true;
 66         btn_rightOrButtom.enabled = true;
 67     }
 68
 69     private void OnTurnLeftOrTop(ButtonScript obj, object args, int param1, int param2)
 70     {
 71         Turn(false);
 72     }
 73     private void OnTurnRightOrButtom(ButtonScript obj, object args, int param1, int param2)
 74     {
 75         Turn(true);
 76     }
 77     private void Turn(bool forward)
 78     {
 79         float currPage;
 80         float tempAllPage;
 81         switch (m_scrollView.movement)
 82         {
 83             case UIScrollView.Movement.Horizontal:
 84                 currPage = GetCurrPage(forward, transform.localPosition.x);
 85                 tempAllPage = allPagesNum;
 86                 tempAllPage -= currPage;
 87
 88                 if (tempAllPage < 1)
 89                 {
 90                     float movedX = (allRowsNum - m_RowOrLineNum) * (grid.cellWidth);
 91                     Vector3 toPositionX = new Vector3(-movedX, m_scrollView.transform.localPosition.y, m_scrollView.transform.localPosition.z);
 92                     SpringPanel.Begin(m_scrollView.panel.cachedGameObject, toPositionX, strength);
 93                     m_scrollView.panel.clipOffset.Set(-transform.localPosition.x, m_scrollView.panel.clipOffset.y);
 94                 }
 95                 else
 96                 {
 97                     float movedX = currPage * grid.cellWidth * m_RowOrLineNum;
 98                     Vector3 toPositionX = new Vector3(-movedX, m_scrollView.transform.localPosition.y, m_scrollView.transform.localPosition.z);
 99                     SpringPanel.Begin(m_scrollView.panel.cachedGameObject, toPositionX, strength);
100                     m_scrollView.panel.clipOffset.Set(-transform.localPosition.x, m_scrollView.panel.clipOffset.y);
101                 }
102
103                 break;
104             case UIScrollView.Movement.Vertical:
105                 currPage = GetCurrPage(forward, transform.localPosition.y);
106                 tempAllPage = allPagesNum;
107                 tempAllPage -= currPage;
108                 if (tempAllPage < 1)
109                 {
110                     float movedY = (allRowsNum - m_RowOrLineNum) * (grid.cellHeight);
111                     Vector3 toPositionY = new Vector3(m_scrollView.transform.localPosition.x, movedY, m_scrollView.transform.localPosition.z);
112                     SpringPanel.Begin(m_scrollView.panel.cachedGameObject, toPositionY, strength);
113                     m_scrollView.panel.clipOffset.Set(transform.localPosition.x, -m_scrollView.panel.clipOffset.y);
114                 }
115                 else
116                 {
117                     float movedY = currPage * grid.cellHeight * m_RowOrLineNum;
118                     Vector3 toPositionY = new Vector3(m_scrollView.transform.localPosition.x, movedY, m_scrollView.transform.localPosition.z);
119                     SpringPanel.Begin(m_scrollView.panel.cachedGameObject, toPositionY, strength);
120                     m_scrollView.panel.clipOffset.Set(transform.localPosition.x, -m_scrollView.panel.clipOffset.y);
121                 }
122
123                 break;
124         }
125
126
127     }
128     private float GetCurrPage(bool forward, float positionValue)
129     {
130         float currPageNum = Mathf.Abs(positionValue / pageOffset);
131
132         if (forward)
133             currPageNum += 1;
134         else
135         {
136             currPageNum -= 1;
137             if (currPageNum < 0)
138                 currPageNum = 0;
139         }
140         return currPageNum;
141     }
142     private void OnDestroy()
143     {
144         UIManager.RemoveButtonEventHandler(btn_leftOrTop.gameObject, EnumButtonEvent.OnClick);
145         UIManager.RemoveButtonEventHandler(btn_rightOrButtom.gameObject, EnumButtonEvent.OnClick);
146     }
147 }
时间: 2024-10-12 02:47:59

NGUI翻页的相关文章

NGUI 滑动翻页效果

using UnityEngine; using System.Collections; public class PageView : MonoBehaviour { const int ITEM_NUM = 2; //总页数 const int PAGE_WIDTH = 2048; //页宽 const float DRAG_SPEED = 0.5f; //翻页时间 const int DRAG_OFFECT = 30; //滑动的起点和终点的差需大于这个数才能触发翻页效果 float be

XtraGrid滚轮翻页

滚轮翻页与传动的翻页更为方便,经过本人一番探讨与琢磨终于在XtraGrid的GridView中实现了鼠标滚轮翻页. 我新建了一个组件继承原本的GridControl,在组件中添加了一个ImageList,专门存放一些资源图片.用于实现动态图的效果. 添加一个自定义委托的参数与枚举,委托参数用于传递分页的信息.     public class PagingEventArgs : EventArgs     {        public int PageSize { get; set; }   

自定义 ViewGroup 支持无限循环翻页之三(响应回调事件)

大家如果喜欢我的博客,请关注一下我的微博,请点击这里(http://weibo.com/kifile),谢谢 转载请标明出处,再次感谢 ####################################################################### 自定义 ViewGroup 支持无限循环翻页系列 自定义 ViewGroup 支持无限循环翻页之一(重写 onLayout以及 dispatchDraw) 自定义 ViewGroup 支持无限循环翻页之二(处理触摸事件)

多个ImageView组成界面实现上下滑动翻页

============问题描述============ 上面这个就是我的手机界面,我想实现用手上下滑动翻页,翻页过后再来更新这10张照片的内容(图片从服务器GET下来已经实现),现在我就是想晓得这个滑动翻页该用什么组件来实现哦,小弟菜鸟一枚,希望大家多给提点哈 ============解决方案1============ 用fragment吧,改一下fragment里面的数据就行了 ============解决方案2============ 搜一下图片播放器吧

ViewPager实现翻页步骤

之前觉得滑动翻页的效果挺炫的,目前初学android,所以自己在项目中尝试实现了这个效果.数据是动态的.实现效果主要有几个步骤: 1.创建两个布局文件,一个布局文件定义viewPager组件,如  <android.support.v4.view.ViewPager         android:id="@+id/vp_articles"        android:layout_width="match_parent"        android:la

bootstrap(5)分页,翻页,徽章效果

一 : 分页效果 我们可以看到在网站上的翻页效果如下: 使用bootstrap如何实现的呢? 代码如下: <nav aria-label="Page navigation"> <ul class="pagination"> <li> <a href="#" aria-label="Previous"> <span aria-hidden="true"&g

datatables之翻页、搜索、排序事件

$(document).ready(function() { $('#table').on('order.dt', function() { console.log('排序'); }).on('search.dt', function() { console.log('搜索'); }).on('page.dt', function() { console.log('翻页'); }).dataTable(); });

js 翻页

翻页功能是js很基础的一个算法,且用得很多,所以必须掌握此项技能. 我们要想清楚在实现翻页的过程中需要哪几个步骤: 1.我们首先需要的变量有哪些,必须的有一个存放当前页码的变量nowPage.一个存放最大页数的变量maxPage,再一个存放每一页显示多少行的常量 PAGECELL: 2.我们需要哪些函数来实现,实现哪些功能,肯定要有的是 向上翻页.向下翻页 3.过程中要注意什么,要翻到下一页,就必须清楚当页的内容,不然会在当前页下面加载 其实就这么简单,考虑清楚后就可以进行代码的实现了. 以上思

oracle清屏翻页配置

在oracle数据库刚安装好时,输入命令时不能跟mysql数据库一样,清楚屏幕上执行过的命令和翻页重复执行上次执行过的命令,输错命令是也不能移动光标进行修改,那么这在工作中是很不方便的.那这篇文档就是安装工具,使oracle能够支持清屏翻页及自由移动光标. 首先下载三个源码包 1)IO-Tty-1.07.tar.gz 2)Term-ReadLine-Gnu-1.16.tar.gz 3)uniread-1.01.tar.gz 2.安装 1)解压缩至本地 [[email protected] Des