最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Unity工具類ScrollView實現(xiàn)拖拽滑動翻頁

 更新時間:2020年04月17日 10:05:21   作者:真像大白阿  
這篇文章主要為大家詳細介紹了Unity工具類ScrollView實現(xiàn)拖拽滑動翻頁,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

簡介:

在進行UI設計的時候,經常會使用Unity中UI提供的ScrollView,類似Android中的ScrollView,在進行圖片預覽,多個翻頁的時候,能實現(xiàn)很好的效果。

該類中根據(jù)Unity的EventSystems中拖拽事件,實現(xiàn)對頁碼的滑動監(jiān)聽,在使用的時候,新建UI--->ScrollView,把該類組件添加到ScrollView上,把對應的content加入該腳本中的content,調整ScrollView和Content,設置單個滑動頁的寬度,拖拽的閾值,即可監(jiān)聽到拖拽,如果是動態(tài)實例化ScrollView中的child,需設置當前最大頁碼數(shù)。SetCurIndex可以實現(xiàn)直接定位到當前頁碼對應的滑動頁,代碼比較簡單,直接貼出來。

public class ScrollViewListener : MonoBehaviour, IDragHandler, IBeginDragHandler, IEndDragHandler
  {
 //滑動方向
    public enum MoveDirection
    {
      None = 0,
      Left,
      Right,
    }
    public float SingleItemWidth;//單個滑動頁的寬度
    public RectTransform content;//當前ScrollView的Content
    public float DragMinValue = 5f;//拖動過程中允許的最小的拖拽值,低于此值就不算拖拽,不執(zhí)行翻頁事件
    private MoveDirection direction = MoveDirection.None;
    private int CurIndex = 0;//當前頁碼
    private int MaxIndex = 0;//最大頁碼
    public bool canMove = true;//是否能移動
    private Vector3 originalPos;
    private float maxDeltaX = 0f;//取整個拖動過程中的最大值
    public Action<int> OnPageChange;//對外提供頁碼修改的回調
 
    /// <summary>
    /// 滑到下一頁
    /// </summary>
    private void MoveToNext()
    {      
      if (direction == MoveDirection.Left)
      {
        if (CurIndex < MaxIndex)
        {          
          CurIndex++;
          canMove = false;
          content.DOLocalMoveX(content.localPosition.x - SingleItemWidth, 1f).OnComplete(() =>
          {
            if (null != OnPageChange)
            {
              OnPageChange(CurIndex);
            }
            canMove = true;
          });
        }
      }
      else if (direction == MoveDirection.Right)
      {
        if (CurIndex > 0)
        {
          CurIndex--;
          canMove = false;
          content.DOLocalMoveX(content.localPosition.x + SingleItemWidth, 1f).OnComplete(() =>
          {
            if (null != OnPageChange)
            {
              OnPageChange(CurIndex);
            }
            canMove = true;
          });
        }
      }
    }
 
    /// <summary>
    /// 設置當前滑動列表的頁數(shù)的最大值
    /// </summary>
    /// <param name="max"></param>
    public void SetMaxIndex(int max)
    {
      MaxIndex = max - 1;//最大下標值為頁數(shù)減1
    }
 
    /// <summary>
    /// 設置當前頁
    /// </summary>
    /// <param name="index"></param>
    public void SetCurIndex(int index)
    {
      CurIndex = index;
      float x = content.localPosition.x - SingleItemWidth * CurIndex;
      content.localPosition = new Vector3(x, content.localPosition.y, content.localPosition.z);
    }
 
    public void ResetPosition()
    {
      content.localPosition = originalPos;
    }
 
    private void Awake()
 {
      CurIndex = 0;
      originalPos = content.localPosition;
    }
 
    public void OnDrag(PointerEventData eventData)
    {
      if (Mathf.Abs(eventData.delta.x) > maxDeltaX)
      {
        maxDeltaX = Mathf.Abs(eventData.delta.x);
      }
    }
 
    public void OnBeginDrag(PointerEventData eventData)
    {
      if (eventData.delta.x > 0)
      {
        direction = MoveDirection.Right;
      }
      else if (eventData.delta.x < 0)
      {
        direction = MoveDirection.Left;
      }
      else
      {
        direction = MoveDirection.None;
      }
      if (Mathf.Abs(eventData.delta.x) > maxDeltaX)
      {
        maxDeltaX = Mathf.Abs(eventData.delta.x);
      }
    }
 
    public void OnEndDrag(PointerEventData eventData)
    {
      if (Mathf.Abs(eventData.delta.x) > maxDeltaX)
      {
        maxDeltaX = Mathf.Abs(eventData.delta.x);
      }
      if (maxDeltaX > DragMinValue)
      {
        //計算下一頁的目的點 然后移動
        if (canMove)
        {
          MoveToNext();
        }        
      }
      maxDeltaX = 0f;
    }
  }

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • C#自定義控件VS用戶控件

    C#自定義控件VS用戶控件

    這篇文章主要為大家詳細介紹了C#中自定義控件VS用戶控件的區(qū)別,介紹了開發(fā)自己的控件的幾種方法、自定義控件與用戶控件區(qū)別,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • c#菜單動態(tài)合并的實現(xiàn)方法

    c#菜單動態(tài)合并的實現(xiàn)方法

    這篇文章主要介紹了c#菜單動態(tài)合并的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-10-10
  • C#使用TimeSpan對象實現(xiàn)獲取時間間隔

    C#使用TimeSpan對象實現(xiàn)獲取時間間隔

    TimeSpan對象代表兩個時間段的間隔或跨度,使用TimeSpan對象可以方便地獲取兩個時間段的間隔,下面我們就來看看C#使用TimeSpan對象實現(xiàn)獲取時間間隔的具體操作吧
    2024-01-01
  • unity avprovideo插件的使用詳解

    unity avprovideo插件的使用詳解

    這篇文章主要介紹了unity avprovideo插件的使用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • ftp服務器搭建部署與C#實現(xiàn)ftp文件的上傳的示例

    ftp服務器搭建部署與C#實現(xiàn)ftp文件的上傳的示例

    本文主要介紹了ftp服務器搭建部署與C#實現(xiàn)ftp文件的上傳的示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • C#調用pyd的方法

    C#調用pyd的方法

    這篇文章主要介紹了C#調用pyd的方法,幫助大家在項目中實現(xiàn)c#代碼與python代碼交互,在C#中調用python,也可以在python中調用C#.
    2020-11-11
  • C#根據(jù)年月日計算星期幾的函數(shù)小例子

    C#根據(jù)年月日計算星期幾的函數(shù)小例子

    這篇文章介紹了C#根據(jù)年月日計算星期幾的函數(shù)小例子,有需要的朋友可以參考一下
    2013-07-07
  • C#中添加窗口的步驟詳解

    C#中添加窗口的步驟詳解

    下面小編就為大家?guī)硪黄狢#中添加窗口的步驟詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • C#連接數(shù)據(jù)庫和更新數(shù)據(jù)庫的方法

    C#連接數(shù)據(jù)庫和更新數(shù)據(jù)庫的方法

    這篇文章主要介紹了C#連接數(shù)據(jù)庫和更新數(shù)據(jù)庫的方法,需要的朋友可以參考下
    2015-08-08
  • C#給PDF文件添加水印

    C#給PDF文件添加水印

    這篇文章主要為大家詳細介紹了C#給PDF文件添加水印的相關代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03

最新評論

白朗县| 海宁市| 庆云县| 丹棱县| 海晏县| 黔西县| 康马县| 霍林郭勒市| 夏河县| 高青县| 怀宁县| 鄂尔多斯市| 达拉特旗| 武宁县| 宁明县| 牡丹江市| 延边| 思茅市| 绵阳市| 甘洛县| 图们市| 井冈山市| 新邵县| 体育| 镇宁| 南汇区| 萍乡市| 哈巴河县| 荆门市| 南城县| 宣汉县| 邯郸县| 邵东县| 织金县| 淄博市| 枞阳县| 茌平县| 宜都市| 龙海市| 邮箱| 华容县|