banner手势滑动,点击效果;自动滚动

This commit is contained in:
CaiYanPeng 2021-12-31 14:39:04 +08:00
parent 7f7318fb36
commit 537ae2d6ed
3 changed files with 151 additions and 50 deletions

View File

@ -27,11 +27,81 @@ public class BannerController : MonoBehaviour
{
transform.Find("1").localPosition,transform.Find("2").localPosition,transform.Find("3").localPosition
};
AddTouchEvent();
Debug.Log(standardPositions[0]);
Debug.Log(standardPositions[1]);
Debug.Log(standardPositions[2]);
}
TKPanRecognizer pan;
private void AddTouchEvent()
{
pan = new TKPanRecognizer();
var panList = new List<CanvasGroup>();
pan.gestureRecognizedEvent += (r) =>
{
if (!App.currentPageIsHome) return;
int center = GetCenterIndex(),
left = GetSideIndex(true),
right = GetSideIndex(false);
if (!(center == -1 || left == -1 || right == -1) && panList.Count == 0)
{
panList.Add(itemList[left]);
panList.Add(itemList[center]);
panList.Add(itemList[right]);
}
if (panList.Count == 0) return;
var startPoint = r.startTouchLocation();
if (((RectTransform)transform).isPointInTransfrom(startPoint))
{
foreach (var item in panList)
{
item.GetComponent<Button>().onClick.RemoveAllListeners();
}
var offset = pan.deltaTranslation;
if (panList[1].transform.localPosition.x == 0)
{
panList[1].transform.DOScale(0.8f, 0.5f);
}
if (offset.x > 0)
{
//-43 0 43
//后面的 如果往左,需要回到-43再往右
panList[0].transform.localPosition += new Vector3(1, 0, 0);
panList[1].transform.localPosition += new Vector3(1, 0, 0);
panList[2].transform.localPosition += new Vector3(-1, 0, 0);
}
else if (offset.x < 0)
{
panList[0].transform.localPosition += new Vector3(1, 0, 0);
panList[1].transform.localPosition += new Vector3(-1, 0, 0);
//后面的 如果往右需要回到43再往左
panList[2].transform.localPosition += new Vector3(-1, 0, 0);
}
}
else
{
panList.Clear();
}
};
pan.gestureCompleteEvent += (r) =>
{
if (!App.currentPageIsHome) return;
if (panList.Count == 0) return;
if (panList[1].transform.localPosition.x < 0)
{
DOLeft(panList[0], panList[1], panList[2]);
}
else
{
DORight(panList[0], panList[1], panList[2]);
}
panList.Clear();
};
TouchKit.addGestureRecognizer(pan);
}
private void Start()
{
GetList();
@ -60,9 +130,9 @@ public class BannerController : MonoBehaviour
{
var area = list[index++];
c.GetComponent<NewRouteItemController>().Initial(area);
c.GetComponent<Button>().onClick.RemoveAllListeners();
if (c.alpha != 1)
{
c.GetComponent<Button>().onClick.RemoveAllListeners();
if (c.transform.localPosition.x < 0)
{
c.GetComponent<Button>().onClick.AddListener(Right);
@ -72,6 +142,10 @@ public class BannerController : MonoBehaviour
c.GetComponent<Button>().onClick.AddListener(Left);
}
}
else
{
c.GetComponent<Button>().onClick.AddListener(()=>GoDetail(c));
}
}
currentIndex = 1;
this.list = list;
@ -82,30 +156,31 @@ public class BannerController : MonoBehaviour
left = GetSideIndex(true),
right = GetSideIndex(false);
if (center == -1 || left == -1 || right == -1) return;
itemList[center].DOFade(0.5f, 0.5f);
itemList[center].GetComponent<RectTransform>().DOScale(Vector3.one * 0.8f, 0.5f);
itemList[center].GetComponent<RectTransform>().DOLocalMoveX(43, 0.5f);
itemList[right].GetComponent<RectTransform>().DOLocalMoveX(-43, 0.5f);
var area = list[((currentIndex++) + list.Count) % list.Count];
itemList[right].GetComponent<NewRouteItemController>().Initial(area);
if (currentIndex >= list.Count) currentIndex = 0;
itemList[left].DOFade(1, 0.5f);
itemList[left].GetComponent<RectTransform>().DOScale(Vector3.one, 0.5f);
itemList[left].GetComponent<RectTransform>().DOLocalMoveX(0, 0.5f);
itemList[left].transform.SetAsLastSibling();
//事件改变
itemList[left].GetComponent<Button>().onClick.RemoveAllListeners();
itemList[left].GetComponent<Button>().onClick.AddListener(()=>
{
if (itemList[left].transform.localPosition.x == 0)
{
UIManager.ShowNewRouteDetailPanel(itemList[left].GetComponent<NewRouteItemController>().Area);
DOTween.CompleteAll();
DORight(itemList[left], itemList[center], itemList[right]);
}
});
itemList[center].GetComponent<Button>().onClick.RemoveAllListeners();
itemList[center].GetComponent<Button>().onClick.AddListener(Left);
itemList[right].GetComponent<Button>().onClick.RemoveAllListeners();
itemList[right].GetComponent<Button>().onClick.AddListener(Right);
void DORight(CanvasGroup left, CanvasGroup center, CanvasGroup right)
{
Sequence se = DOTween.Sequence();
se.Join(center.DOFade(0.5f, 0.5f));
se.Join(center.GetComponent<RectTransform>().DOScale(Vector3.one * 0.8f, 0.5f));
se.Join(center.GetComponent<RectTransform>().DOLocalMoveX(43, 0.5f));
se.Join(right.GetComponent<RectTransform>().DOLocalMoveX(-43, 0.5f));
var area = list[((currentIndex++) + list.Count) % list.Count];
right.GetComponent<NewRouteItemController>().Initial(area);
if (currentIndex >= list.Count) currentIndex = 0;
se.Join(left.DOFade(1, 0.5f));
se.Join(left.GetComponent<RectTransform>().DOScale(Vector3.one, 0.5f));
se.Join(left.GetComponent<RectTransform>().DOLocalMoveX(0, 0.5f));
se.Play();
left.transform.SetAsLastSibling();
//事件改变
left.GetComponent<Button>().onClick.RemoveAllListeners();
left.GetComponent<Button>().onClick.AddListener(() => GoDetail(left));
center.GetComponent<Button>().onClick.RemoveAllListeners();
center.GetComponent<Button>().onClick.AddListener(Left);
right.GetComponent<Button>().onClick.RemoveAllListeners();
right.GetComponent<Button>().onClick.AddListener(Right);
}
private void Left()
@ -114,33 +189,33 @@ public class BannerController : MonoBehaviour
left = GetSideIndex(true),
right = GetSideIndex(false);
if (center == -1 || left == -1 || right == -1) return;
itemList[center].DOFade(0.5f, 0.5f);
itemList[center].GetComponent<RectTransform>().DOScale(Vector3.one*0.8f, 0.5f);
itemList[center].GetComponent<RectTransform>().DOLocalMoveX(-43, 0.5f);
itemList[left].GetComponent<RectTransform>().DOLocalMoveX(43, 0.5f);
DOTween.CompleteAll();
DOLeft(itemList[left], itemList[center], itemList[right]);
}
void DOLeft(CanvasGroup left, CanvasGroup center, CanvasGroup right)
{
Sequence se = DOTween.Sequence();
se.Join(center.DOFade(0.5f, 0.5f));
se.Join(center.GetComponent<RectTransform>().DOScale(Vector3.one * 0.8f, 0.5f));
se.Join(center.GetComponent<RectTransform>().DOLocalMoveX(-43, 0.5f));
se.Join(left.GetComponent<RectTransform>().DOLocalMoveX(43, 0.5f));
var area = list[((currentIndex--) + list.Count) % list.Count];
var centerArea = list[currentIndex + 1];
itemList[left].GetComponent<NewRouteItemController>().Initial(area);
left.GetComponent<NewRouteItemController>().Initial(area);
if (currentIndex < 0) currentIndex = list.Count - 1;
itemList[right].DOFade(1, 0.5f);
itemList[right].GetComponent<RectTransform>().DOScale(Vector3.one, 0.5f);
itemList[right].GetComponent<RectTransform>().DOLocalMoveX(0, 0.5f);
itemList[right].transform.SetAsLastSibling();
se.Join(right.DOFade(1, 0.5f));
se.Join(right.GetComponent<RectTransform>().DOScale(Vector3.one, 0.5f));
se.Join(right.GetComponent<RectTransform>().DOLocalMoveX(0, 0.5f));
se.Play();
right.transform.SetAsLastSibling();
//事件改变
itemList[right].GetComponent<Button>().onClick.RemoveAllListeners();
itemList[right].GetComponent<Button>().onClick.AddListener(() =>
{
if (itemList[right].transform.localPosition.x == 0)
{
UIManager.ShowNewRouteDetailPanel(itemList[right].GetComponent<NewRouteItemController>().Area);
right.GetComponent<Button>().onClick.RemoveAllListeners();
right.GetComponent<Button>().onClick.AddListener(() => GoDetail(right));
center.GetComponent<Button>().onClick.RemoveAllListeners();
center.GetComponent<Button>().onClick.AddListener(Right);
left.GetComponent<Button>().onClick.RemoveAllListeners();
left.GetComponent<Button>().onClick.AddListener(Left);
}
});
itemList[center].GetComponent<Button>().onClick.RemoveAllListeners();
itemList[center].GetComponent<Button>().onClick.AddListener(Right);
itemList[left].GetComponent<Button>().onClick.RemoveAllListeners();
itemList[left].GetComponent<Button>().onClick.AddListener(Left);
}
int GetCenterIndex()
{
return itemList.FindIndex(x => x.transform.localPosition.x == 0);
@ -149,9 +224,34 @@ public class BannerController : MonoBehaviour
{
return itemList.FindIndex(x => left ? x.transform.localPosition.x < 0 : x.transform.localPosition.x > 0);
}
void GoDetail(CanvasGroup c)
{
if (c.transform.localPosition.x == 0)
{
var se = DOTween.Sequence();
se.Append(c.transform.DOScale(1.05f * Vector3.one, 0.15f));
se.Append(c.transform.DOScale(1f * Vector3.one, 0.15f));
se.Play().onComplete = ()=>
{
UIManager.ShowNewRouteDetailPanel(c.GetComponent<NewRouteItemController>().Area);
};
}
}
float autoTime = 5;
// Update is called once per frame
void Update()
{
autoTime -= Time.deltaTime;
if (autoTime < 0)
{
Left();
autoTime += 5;
}
}
private void OnDestroy()
{
Debug.Log(248+"毁灭");
TouchKit.removeGestureRecognizer(pan);
}
}

View File

@ -48,6 +48,7 @@ public class NewRouteDetailController : PFUIPanel
public override void Show()
{
base.Show();
transform.MyDOFade();
if (App.TextureCache.ContainsKey("rotateImage"))
{
transform.Find("RawImage").GetComponent<RawImage>().texture = App.TextureCache["rotateImage"];

View File

@ -13,7 +13,7 @@
</packages>
<files />
<settings>
<setting name="androidAbis" value="armeabi-v7a" />
<setting name="androidAbis" value="arm64-v8a,armeabi-v7a" />
<setting name="bundleId" value="com.ZhiXingPai.PowerFunUnity" />
<setting name="explodeAars" value="True" />
<setting name="gradleBuildEnabled" value="True" />