Unity--實(shí)現(xiàn)ViewPager

參考自 http://www.it610.com/article/5168883.htm

1. 建一個(gè)Image,設(shè)置寬高比為300*400,并添加Scroll Rect 和 Mask組件,并修改名稱為ViewPager。
2. 在ViewPager下添加 horizontal Layout Group 和 Scrollbar

? Scrollbar: 用于控制滑動(dòng),位置在Layout正下方,不會(huì)顯示
? horizontal Layout Group: 作為item的父布局,設(shè)置寬高比為1500*400,然后新建5個(gè)Image,大小都為300*400。


? 反選ViewPager中Mask組件后,可以看到item的情況如下:

3. 修改參數(shù)

? 1. 將layout于ViewPager中Scroll Rect的Content屬性綁定
? 2. 將Scrollbar與ViewPager中Horizontal Scrollbar綁定,反選Vertical屬性


4. 掛載腳本

? 腳本內(nèi)容如下:

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class CustomViewPage : MonoBehaviour
{

    public Scrollbar m_Scrollbar;
    public ScrollRect m_ScrollRect;

    private float mTargetValue;

    private bool mNeedMove = false;

    private const float MOVE_SPEED = 1F;

    private const float SMOOTH_TIME = 0.2F;

    private float mMoveSpeed = 0f;

    public void OnPointerDown()
    {
        mNeedMove = false;
    }

    public void OnPointerUp()
    {
        // 判斷當(dāng)前位于哪個(gè)區(qū)間,設(shè)置自動(dòng)滑動(dòng)至的位置
        if (m_Scrollbar.value <= 0.125f)
        {
            mTargetValue = 0;
        }
        else if (m_Scrollbar.value <= 0.375f)
        {
            mTargetValue = 0.25f;
        }
        else if (m_Scrollbar.value <= 0.625f)
        {
            mTargetValue = 0.5f;
        }
        else if (m_Scrollbar.value <= 0.875f)
        {
            mTargetValue = 0.75f;
        }
        else
        {
            mTargetValue = 1f;
        }

        mNeedMove = true;
        mMoveSpeed = 0;
    }

 
    void Update()
    {
        if (mNeedMove)
        {
            if (Mathf.Abs(m_Scrollbar.value - mTargetValue) < 0.01f)
            {
                m_Scrollbar.value = mTargetValue;
                mNeedMove = false;
                return;
            }
            m_Scrollbar.value = Mathf.SmoothDamp(m_Scrollbar.value, mTargetValue, ref mMoveSpeed, SMOOTH_TIME);
        }

    }

}
5. 在ViewPager上,添加Event Trigger組件,并且添加Pointer Up時(shí)間監(jiān)聽

以上就是左右步驟啦?。?br> 不過item的點(diǎn)擊事件,有點(diǎn)小瑕疵,我嘗試了新建5個(gè)Button,但是Button的點(diǎn)擊事件和滑動(dòng)會(huì)產(chǎn)生沖突,正常ScrollView中添加Item,并且添加點(diǎn)擊事件,是不會(huì)出現(xiàn)這種情況的,這里出現(xiàn)沖突的原因,應(yīng)該是掛載Event Trigger的原因。
正在想解決辦法,頭疼啊。。。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容