淺談Android控件監(jiān)聽滑動漸變效果


不廢話先看效果圖


scroll.gif

大概效果就是這樣 toolbar和懸浮按鈕隨著viewpager的滾動改變透明度實現(xiàn)淡入淡出的效果


首先設(shè)置viewpager的翻頁監(jiān)聽器

viewPager.addOnPageChangeListener()
里面重寫三個方法
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}
public void onPageSelected(int position){}
public void onPageScrollStateChanged(int state) {}
本文主要用到第一個方法onPageScrolled()
本方法 傳入3個參數(shù)int position, float positionOffset, int positionOffsetPixels
position:當前頁面,即點擊滑動的頁面
positionOffset:當前頁面偏移的百分比
positionOffsetPixels :當前頁面偏移的像素位置

我們?yōu)榱酥庇^一點定義了一個浮點變量aFloat代表viewpager滾動的位置
float aFloat = positionOffset + (float) position;
比如說本例中有3個頁面aFloat值就會在0~2之間變化
如圖log中顯示的1.3幾就表示第二個頁面到第三個之間

設(shè)置控件透明度:

控件實例.getBackground().setAlpha()
得到控件的背景后用setAlpha()方法設(shè)置透明度,其中setAlpha() 傳入0-255的int形參數(shù),255代表不透明,0代表全透明。

判斷滾動位置大于1后,就可以隨著positionOffset 值來調(diào)整透明度
toolbar.getBackground().setAlpha((int) (255f - positionOffset * 255f)); floatingActionButton.getBackground().setAlpha((int) (255f - positionOffset * 255f));

然而你會發(fā)現(xiàn)幾個問題:
  • 搜索框edittext并不會隨著背景變淡很難看

    image.png

    于是我們簡單粗暴設(shè)置它的可見性
    editText.setVisibility(View.INVISIBLE);

  • 雖然搜索框完全透明看不到,但仍可執(zhí)行操作
    這時我們還是需要設(shè)置可見性
    if(aFloat == 2){
    floatingbutton.setVisibility(View.INVISIBLE);
    }
    當然設(shè)置不可見后在滑動回去時還要設(shè)置回可見哦否則該顯示的顯示不出來

  • 光知道位置還不夠,還需要知道是向左還是向右滑動
    這里我們在監(jiān)聽器外面定義一個浮點變量aFloat_first來代表上一次調(diào)用監(jiān)聽方法時的位置來跟本次的比對得到滑動方向
    (aFloat - aFloat_first) > 0表示向右滑動
    (aFloat - aFloat_first) < 0向左

下面貼上監(jiān)聽器全部代碼

private void setPager() {
        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                //aFloat代表viewpager滾動位置
                float aFloat = positionOffset + (float) position;
                Log.d(TAG, "onPageScrolled: " + aFloat);
                //解決在 我的 頁面向右快速滑透明度較高的問題(快速滑動會導(dǎo)致不能實時監(jiān)測aFloat)

                if (aFloat > 1) {
                    //設(shè)置透明度
                    editText.getBackground().setAlpha((int) (255f - positionOffset * 255f));
                    toolbar.getBackground().setAlpha((int) (255f - positionOffset * 255f));
                    floatingActionButton.getBackground().setAlpha((int) (255f - positionOffset * 255f));
                    if (aFloat > 1.7 && aFloat < 1.9 && (aFloat - aFloat_first) > 0) {
                        editText.setVisibility(View.INVISIBLE);
                    }
                    if (aFloat > 1.7 && aFloat < 1.9 && (aFloat - aFloat_first) < 0) {
                        editText.setVisibility(View.VISIBLE);
                    }
                    if (aFloat == 2) {
                        toolbar.setVisibility(View.INVISIBLE);
                        floatingActionButton.setVisibility(View.INVISIBLE);
                    }
                }
                if ( aFloat < 2 && aFloat > 1) {
                    if (toolbar.getVisibility() == View.INVISIBLE) {
                        toolbar.setVisibility(View.VISIBLE);
                        editText.setVisibility(View.INVISIBLE);
                        floatingActionButton.setVisibility(View.VISIBLE);
                    }
                }
                aFloat_first = aFloat;


            }

            @Override
            public void onPageSelected(int position) {

                //監(jiān)聽頁卡位置,實現(xiàn)當前頁卡圖標變色
                if (position==0){
                    found_imgbtn.setImageResource(R.drawable.find_press_icon);
                    lost_imgbtn.setImageResource(R.drawable.find_icon);
                    me_imgbtn.setImageResource(R.drawable.me_icon);
                }if (position==1){
                    found_imgbtn.setImageResource(R.drawable.find_icon);
                    lost_imgbtn.setImageResource(R.drawable.find_press_icon);
                    me_imgbtn.setImageResource(R.drawable.me_icon);
                }if (position==2){
                    found_imgbtn.setImageResource(R.drawable.find_icon);                    lost_imgbtn.setImageResource(R.drawable.find_icon);
                    me_imgbtn.setImageResource(R.drawable.me_press_icon);
                }
            }

            @Override
            public void onPageScrollStateChanged(int state) {
            }
        });```

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

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,034評論 25 709
  • 前言 目前市場上的APP中,輪播圖可以說是很常見的。一個好的輪播圖,基本上適用于所有的APP。是時候打造一個自己的...
    帶心情去旅行閱讀 17,586評論 15 93
  • 本篇包含:實現(xiàn)一屏多頁、自定義PageTransformer、OnPageChangeListener方法參數(shù)的解...
    arvinljw閱讀 3,340評論 13 22
  • 01. 這是秋天的深海,宛若穿著水藍色的云裳。天海一線,深藍深藍。放眼望去如同倒過來的云天,這種被風輕輕吹動的水藍...
    雪落煙閱讀 495評論 0 3
  • 今天我們的小太陽有一節(jié)烹飪課,每次烹飪課都是寶貝們最喜歡,興趣最高漲的課程,因為只要關(guān)于吃的,我們的小饞貓一個個眼...
    HZHSR閱讀 457評論 0 0

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