using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using System.Collections;
using System.Collections.Generic;
using System;
using GameLogic;
///
/// UGUI ScrollRect 滑动元素居中
///
public class UUICenterOnChild : MonoBehaviour, IBeginDragHandler, IEndDragHandler
{
public float scrollSpeed = 8f;
public Transform uUIGrid;
private ScrollRect scrollRect;
private float[] pageArray;
private float targetPagePosition = 0f;
private bool isDrag = false;
private int pageCount;
private int currentPage = 0;
private List items = new List();
Sprite dian_01;
Sprite dian_02;
GameObject ScrollView_Tip_Grid;
float Timer = 5f;
// Use this for initialization
void Awake()
{
scrollRect = GetComponent();
InitPageArray();
dian_01 = App.ResMgr.LoadAsset ("Dian_01");
dian_02 = App.ResMgr.LoadAsset("Dian_02");
ScrollView_Tip_Grid = transform.parent.Find("ScrollView_Tip/Grid").gameObject;
}
void OnEnable()
{
InitPageArray();
}
void Start()
{
}
void InitPageArray()
{
var activeCount = 0;
foreach (Transform item in uUIGrid)
{
if (item.gameObject.active)
{
items.Add(item);
activeCount++;
}
}
pageCount = activeCount;
pageArray = new float[pageCount];
for (int i = 0; i < pageCount; i++)
{
pageArray[i] = (1f / (pageCount - 1)) * i;
}
}
// Update is called once per frame
void Update()
{
if (!isDrag)
{
scrollRect.horizontalNormalizedPosition = Mathf.Lerp(scrollRect.horizontalNormalizedPosition, targetPagePosition, scrollSpeed * Time.deltaTime);
}
ChangePageByTime();
}
void ChangePageByTime()
{
Timer = Timer - Time.deltaTime;
if (Timer <= 0f)
{
Timer = 5f;
ToMove();
}
}
public void OnBeginDrag(PointerEventData eventData)
{
isDrag = true;
}
public void OnEndDrag(PointerEventData eventData)
{
isDrag = false;
float posX = scrollRect.horizontalNormalizedPosition;
int index = 0;
if (pageArray.Length > index)
{
float offset = Math.Abs(pageArray[index] - posX);
for (int i = 1; i < pageArray.Length; i++)
{
float _offset = Math.Abs(pageArray[i] - posX);
if (_offset < offset)
{
index = i;
offset = _offset;
}
}
targetPagePosition = pageArray[index];
currentPage = index;
}
// print(currentPage);
// print(ScrollView_Tip_Grid.transform.GetChild(currentPage).gameObject.name);
ShowChangePage(currentPage);
}
//想左移动一个元素
public void ToLeft()
{
if (currentPage > 0)
{
currentPage = currentPage - 1;
targetPagePosition = pageArray[currentPage];
}
}
//void OnGUI()
//{
// if (GUI.Button(new Rect(10, 10, 150, 100), "ToLeft"))
// ToLeft();
// if (GUI.Button(new Rect(160, 10, 150, 100), "ToRight"))
// ToMove();
//}
//想右移动一个元素
public void ToRight()
{
if (currentPage < pageCount - 1)
{
currentPage = currentPage + 1;
targetPagePosition = pageArray[currentPage];
}
}
bool AbleToRight = true;
public void ToMove()
{
if (currentPage < pageCount - 1 && AbleToRight==true)//右移
{
currentPage = currentPage + 1;
targetPagePosition = pageArray[currentPage];
}
else
{
AbleToRight = false;
if (currentPage > 0)//左移
{
currentPage = currentPage - 1;
targetPagePosition = pageArray[currentPage];
}
else
{
AbleToRight = true;
}
}
// print(currentPage);
// print(ScrollView_Tip_Grid.transform.GetChild(currentPage).gameObject.name);
ShowChangePage(currentPage);
}
void ShowChangePage(int page)
{
if (ScrollView_Tip_Grid.transform.childCount > (page + 1))
{
ScrollView_Tip_Grid.transform.GetChild(page + 1).GetComponent().sprite = dian_02;
}
int childCount = ScrollView_Tip_Grid.transform.childCount;
for (int i = 0; i < childCount; i++)
{
if (currentPage + 1 != i)
{
ScrollView_Tip_Grid.transform.GetChild(i).GetComponent().sprite = dian_01;
}
}
}
public int GetCurrentPageIndex()
{
return currentPage;
}
public void SetCurrentPageIndex(int index)
{
currentPage = index;
targetPagePosition = pageArray[currentPage];
}
public int GetTotalPages()
{
return pageCount;
}
}