修改RecyclerView

This commit is contained in:
陈思海 2025-04-02 14:53:08 +08:00
parent 52bc0b3319
commit bbee53ccf6
2 changed files with 36 additions and 7 deletions

View File

@ -7,6 +7,7 @@ namespace AlicizaX.UI.RecyclerView
public class RecyclerView : MonoBehaviour
{
[SerializeField] private Direction direction;
public Direction Direction
{
get => direction;
@ -14,6 +15,7 @@ namespace AlicizaX.UI.RecyclerView
}
[SerializeField] private Alignment alignment;
public Alignment Alignment
{
get => alignment;
@ -21,6 +23,7 @@ namespace AlicizaX.UI.RecyclerView
}
[SerializeField] private Vector2 spacing;
public Vector2 Spacing
{
get => spacing;
@ -28,6 +31,7 @@ namespace AlicizaX.UI.RecyclerView
}
[SerializeField] private Vector2 padding;
public Vector2 Padding
{
get => padding;
@ -35,6 +39,7 @@ namespace AlicizaX.UI.RecyclerView
}
[SerializeField] private bool scroll;
public bool Scroll
{
get => scroll;
@ -42,6 +47,7 @@ namespace AlicizaX.UI.RecyclerView
}
[SerializeField] private bool snap;
public bool Snap
{
get => snap;
@ -49,6 +55,7 @@ namespace AlicizaX.UI.RecyclerView
}
[SerializeField, Range(1f, 50f)] private float scrollSpeed = 7f;
public float ScrollSpeed
{
get => scrollSpeed;
@ -56,6 +63,7 @@ namespace AlicizaX.UI.RecyclerView
}
[SerializeField, Range(10f, 50f)] private float wheelSpeed = 30f;
public float WheeelSpeed
{
get => wheelSpeed;
@ -63,6 +71,7 @@ namespace AlicizaX.UI.RecyclerView
}
[SerializeField] private ViewHolder[] templates;
public ViewHolder[] Templates
{
get => templates;
@ -76,6 +85,7 @@ namespace AlicizaX.UI.RecyclerView
private int startIndex, endIndex;
private int currentIndex;
public int CurrentIndex
{
get => currentIndex;
@ -85,6 +95,7 @@ namespace AlicizaX.UI.RecyclerView
public bool CanScroll => true;
private RectTransform content;
public RectTransform Content
{
get
@ -93,6 +104,7 @@ namespace AlicizaX.UI.RecyclerView
{
content = transform.GetChild(0).GetComponent<RectTransform>();
}
return content;
}
}
@ -118,6 +130,7 @@ namespace AlicizaX.UI.RecyclerView
ConfigScroller();
}
}
return scroller;
}
}
@ -136,6 +149,7 @@ namespace AlicizaX.UI.RecyclerView
scrollbar.gameObject.AddComponent<ScrollbarEx>().OnDragEnd = OnScrollbarDragEnd;
}
}
return scrollbar;
}
}
@ -236,6 +250,14 @@ namespace AlicizaX.UI.RecyclerView
}
}
private void Awake()
{
for (int i = 0; i < templates.Length; i++)
{
templates[i].gameObject.SetActive(false);
}
}
private void OnDestroy()
{
viewProvider?.Dispose();
@ -248,6 +270,7 @@ namespace AlicizaX.UI.RecyclerView
{
scroller.Position = 0;
}
if (scrollbar != null)
{
scrollbar.SetValueWithoutNotify(0);
@ -330,12 +353,8 @@ namespace AlicizaX.UI.RecyclerView
else
{
Scrollbar.gameObject.SetActive(true);
Scrollbar.direction = direction == Direction.Vertical ?
Scrollbar.Direction.TopToBottom :
Scrollbar.Direction.LeftToRight;
Scrollbar.size = direction == Direction.Vertical ?
Scroller.ViewSize.y / Scroller.ContentSize.y :
Scroller.ViewSize.x / Scroller.ContentSize.x;
Scrollbar.direction = direction == Direction.Vertical ? Scrollbar.Direction.TopToBottom : Scrollbar.Direction.LeftToRight;
Scrollbar.size = direction == Direction.Vertical ? Scroller.ViewSize.y / Scroller.ContentSize.y : Scroller.ViewSize.x / Scroller.ContentSize.x;
}
}
}

View File

@ -25,6 +25,8 @@ namespace AlicizaX.UI.RecyclerView
public string Name { get; set; }
public int Index { get; set; }
public bool ChoiseState { private set; get; }
public Vector2 SizeDelta => RectTransform.sizeDelta;
public virtual void OnStop()
@ -42,9 +44,17 @@ namespace AlicizaX.UI.RecyclerView
}
}
public virtual void BindChoiceState(bool state)
protected internal void BindChoiceState(bool state)
{
if (ChoiseState != state)
{
ChoiseState = state;
OnBindChoiceState(state);
}
}
protected internal virtual void OnBindChoiceState(bool state)
{
}
}
}