自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

ViewPager頁面滑動效果,自定義PageTransformer實(shí)現(xiàn)想要的變換效果

開發(fā) 前端
創(chuàng)建一個類并實(shí)現(xiàn)PageTransformer接口,重寫transformPage(View page, float position)?方法。根據(jù)position?參數(shù)的值來更改page視圖的屬性,如透明度、大小、旋轉(zhuǎn)角度等,以達(dá)到自定義的滑動效果。

PageTransformer是ViewPager內(nèi)部定義的一個接口,用于控制ViewPager中頁面(item view)的滑動效果。PageTransformer可以在頁面滑動過程中自定義頁面的變換效果,如透明度漸變、縮放、旋轉(zhuǎn)等。

接口定義

PageTransformer接口定義了一個方法transformPage(View page, float position)

  • page:表示當(dāng)前正在滑動的頁面視圖。
  • position:表示頁面相對于當(dāng)前中心頁面的位置,值是一個浮點(diǎn)數(shù),范圍根據(jù)滑動方向有所不同。例如,當(dāng)向左滑動時,當(dāng)前頁面的position值變化為[0~-1],右邊頁面的position值變化為[1~0];向右滑動時,當(dāng)前頁面的position值變化為[0~1],左邊頁面的position值變化為[-1~0]。

常見使用場景

  • 「透明度漸變」:在頁面滑動過程中改變頁面的透明度,實(shí)現(xiàn)淡入淡出效果。
  • 「縮放」:在頁面滑動過程中改變頁面的大小,實(shí)現(xiàn)縮放效果。
  • 「旋轉(zhuǎn)」:在頁面滑動過程中改變頁面的旋轉(zhuǎn)角度,實(shí)現(xiàn)旋轉(zhuǎn)效果。

實(shí)現(xiàn)方式

創(chuàng)建一個類并實(shí)現(xiàn)PageTransformer接口,重寫transformPage(View page, float position)方法。根據(jù)position參數(shù)的值來更改page視圖的屬性,如透明度、大小、旋轉(zhuǎn)角度等,以達(dá)到自定義的滑動效果。

示例代碼

透明漸變效果

public class AlphaPageTransformer implements ViewPager.PageTransformer {
    @Override
    public void transformPage(@NonNull View page, float position) {
        page.setAlpha(1 - Math.abs(position));
    }
}

在transformPage方法中,根據(jù)position的絕對值來設(shè)置頁面的透明度,使頁面在滑動過程中透明度發(fā)生變化。

透明旋轉(zhuǎn)翻頁效果

public class RotatePageTransformer implements ViewPager.PageTransformer {
    @Override
    public void transformPage(@NonNull View page, float position) {
        int pagerWidth = mViewPager.getWidth();
        float horizontalOffsetBase = (pagerWidth - pagerWidth * 1.2f) / 2 / offscreenPageLimit + 45;

        if (position >= offscreenPageLimit || position <= -1) {
            page.setVisibility(View.GONE);
        } else {
            page.setVisibility(View.VISIBLE);
        }

        if (position >= 0) {
            float translationX = (horizontalOffsetBase - page.getWidth()) * position;
            page.setTranslationX(translationX);
        }
        if (position > -1 && position < 0) {
            float rotation = position * 30;
            page.setRotation(rotation);
            page.setAlpha((position * position * position + 1));
        } else if (position > offscreenPageLimit - 1) {
            page.setAlpha((float) (1 - position + Math.floor(position)));
        } else {
            page.setRotation(0);
            page.setAlpha(1);
        }
        if (position == 0) {
            page.setScaleX(1.2f);
            page.setScaleY(1.2f);
        } else {
            float scaleFactor = Math.min(1.2f - position * 0.1f, 1.2f);
            page.setScaleX(scaleFactor);
            page.setScaleY(scaleFactor);
        }

        ViewCompat.setElevation(page, (offscreenPageLimit - position) * 5);
    }
}

調(diào)用ViewPager的setPageTransformer(boolean reverseDrawingOrder, PageTransformer transformer)方法,設(shè)置實(shí)現(xiàn)的PageTransformer效果。

ViewPager viewPager = findViewById(R.id.view_pager);
viewPager.setPageTransformer(true, new RotatePageTransformer());

圖片圖片

責(zé)任編輯:武曉燕 來源: 沐雨花飛蝶
相關(guān)推薦

2013-01-06 10:43:54

Android開發(fā)View特效

2013-03-28 10:58:30

自定義Android界android

2012-06-14 15:49:59

Slider

2010-04-28 11:14:20

Windows 7桌面

2009-09-03 16:50:35

C#鼠標(biāo)形狀

2017-04-21 14:27:21

Android控件QQ未讀消息

2021-09-14 15:13:18

鴻蒙HarmonyOS應(yīng)用

2011-02-17 10:54:59

CSS3變換 簡單快捷

2009-09-23 17:19:19

jQuery頁面漸顯效

2013-01-14 17:18:43

Android開發(fā)TextView跑馬燈效果

2010-01-13 16:52:03

VB.NET導(dǎo)出數(shù)據(jù)

2012-06-01 10:12:39

2023-10-11 08:14:43

iPhoneTabs標(biāo)簽頁

2015-01-22 16:04:06

iPhone

2024-05-11 08:25:43

自定義分隔線背景效果

2011-05-31 09:23:58

Android Activity

2009-09-07 22:00:15

LINQ自定義

2011-07-08 10:15:15

IPhone 動畫

2015-02-12 15:33:43

微信SDK

2022-12-07 08:56:27

SpringMVC核心組件
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號