<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Android仿淘寶商品詳情的標(biāo)題欄漸變

          共 3027字,需瀏覽 7分鐘

           ·

          2021-12-17 09:12

          最近電商項(xiàng)目需要實(shí)現(xiàn)類似淘寶商品詳情頁的標(biāo)題欄漸變的效果,我們先來看看淘寶的效果圖。


          淘寶效果圖:



          實(shí)現(xiàn)最終效果圖:



          ?

          實(shí)現(xiàn)過程:


          分析:從淘寶效果圖我們可以看到標(biāo)題欄漸變效果,文字漸變隱藏,透明通知欄,這些毫無疑問是通過ScrollView來實(shí)現(xiàn)的,我們需要根據(jù)滑動(dòng)的距離,手指向上還是向下滑動(dòng)來做相應(yīng)的透明和顯示操作就可以完成這種效果了。


          1、ScrollView滑動(dòng)監(jiān)聽:


          然而Google并沒有提供ScrollView的滑動(dòng)距離、是否滑動(dòng)到布局底部、頂部的方法,但提供了onScrollChanged方法:

              @Override    protected void onScrollChanged(int x, int y, int oldx, int oldy) {????????????super.onScrollChanged(x,?y,?oldx,?oldy);??        }    }


          參數(shù)說明:


          • x :當(dāng)前橫向滑動(dòng)距離

          • y:當(dāng)前縱向滑動(dòng)距離

          • oldx:之前橫向滑動(dòng)距離

          • oldy :之前縱向滑動(dòng)距離


          但是很遺憾這個(gè)方法我們不可以調(diào)用,所以我們就得重寫ScrollView暴露該方法,我們來看看實(shí)現(xiàn)過程:

          /** * 帶滾動(dòng)監(jiān)聽的scrollview * */public class GradationScrollView extends ScrollView {
          public interface ScrollViewListener {
          void onScrollChanged(GradationScrollView scrollView, int x, int y, int oldx, int oldy);
          }
          private ScrollViewListener scrollViewListener = null;
          public GradationScrollView(Context context) { super(context); }
          public GradationScrollView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); }
          public GradationScrollView(Context context, AttributeSet attrs) { super(context, attrs); }
          public void setScrollViewListener(ScrollViewListener scrollViewListener) { this.scrollViewListener = scrollViewListener; }
          @Override protected void onScrollChanged(int x, int y, int oldx, int oldy) { super.onScrollChanged(x, y, oldx, oldy); if (scrollViewListener != null) { scrollViewListener.onScrollChanged(this, x, y, oldx, oldy); }????}}


          通過這個(gè)方法,我們可以獲取圖片的高度,并且設(shè)置滾動(dòng)監(jiān)聽,隨著滾動(dòng)的距離來設(shè)置標(biāo)題欄的顏色透明度和字體顏色的透明度。

           private void initListener() {        // 獲取頂部圖片高度后,設(shè)置滾動(dòng)監(jiān)聽        ViewTreeObserver treeObserver = headerIv.getViewTreeObserver();        treeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {            @Override            public void onGlobalLayout() {                headerIv.getViewTreeObserver().removeOnGlobalLayoutListener(this);                imageHeight = headerIv.getHeight();                Log.i(TAG, "imageHeight:-------->" + imageHeight);                scrollView.setScrollViewListener(MainActivity.this);            }        });    }


          2、設(shè)置ScrollView的滑動(dòng)監(jiān)聽


          分析:


          1、當(dāng)y <= 0時(shí),這個(gè)時(shí)候還沒有滑動(dòng)或者手指先向上滑動(dòng)一會(huì)兒滑又向下滑動(dòng)值到頂部不能再滑動(dòng)位置。


          2、當(dāng)y > 0 && y <= imageHeight時(shí),這個(gè)時(shí)候表示滑動(dòng)的距離在這個(gè)頭部的banner圖的高度范圍之內(nèi)滑動(dòng),也就是說距離是小于banner圖的高度,這種情況又分為2種,手指向上滑和向下滑,當(dāng)手指向上滑動(dòng),屏幕內(nèi)容下滑時(shí),3張圖片是從透明漸變變成不透明,當(dāng)手指向下滑動(dòng),屏幕內(nèi)容上滑,3張圖片是不透明漸變成透明,具體實(shí)現(xiàn)過程如下:

              @Override    public void onScrollChanged(ObservableScrollView scrollView, int x, int y, int oldx, int oldy) {        Log.i(TAG, "y:-------->" + y);        Log.i(TAG, "oldy:-------->" + oldy);        if (y <= 0) {            //設(shè)置漸變的頭部的背景顏色            Log.i(TAG, "y <= 0:----------->");            headLayout.setBackgroundColor(Color.argb((int) 0, 255, 255, 255));            tv1.setTextColor(Color.TRANSPARENT);//設(shè)置透明            tv2.setTextColor(Color.TRANSPARENT);            tv3.setTextColor(Color.TRANSPARENT);            tv4.setTextColor(Color.TRANSPARENT);            dividerView.setVisibility(View.GONE);        } else if (y > 0 && y <= imageHeight) {            //滑動(dòng)距離小于banner圖的高度時(shí),設(shè)置背景和字體顏色顏色透明度漸變            Log.i(TAG, "滑動(dòng)距離小于banner圖的高度---->" + imageHeight);            float scale = (float) y / imageHeight;            int alpha = (int) (scale * 255);            headLayout.setBackgroundColor(Color.argb((int) alpha, 255, 255, 255));            tv1.setTextColor(Color.argb(alpha, 1, 24, 28));            tv2.setTextColor(Color.argb(alpha, 1, 24, 28));            tv3.setTextColor(Color.argb(alpha, 1, 24, 28));            tv4.setTextColor(Color.argb(alpha, 1, 24, 28));            backIv.getBackground().setAlpha(255 - alpha);            shopCartIv.getBackground().setAlpha(255 - alpha);            moreIv.getBackground().setAlpha(255 - alpha);            if (oldy < y) {                // 手指向上滑動(dòng),屏幕內(nèi)容下滑                backIv.setImageResource(R.mipmap.ic_back_dark);                shopCartIv.setImageResource(R.mipmap.ic_shopping_dark);                moreIv.setImageResource(R.mipmap.ic_more_dark);            } else if (oldy > y) {                // 手指向下滑動(dòng),屏幕內(nèi)容上滑                backIv.setImageResource(R.mipmap.ic_back);                shopCartIv.setImageResource(R.mipmap.ic_shopping_cart);                moreIv.setImageResource(R.mipmap.ic_more);            }        } else {            //滑動(dòng)到banner下面設(shè)置普通顏色            Log.i(TAG, "滑動(dòng)到banner下面---->" + imageHeight);            headLayout.setBackgroundColor(Color.WHITE);            tv1.setTextColor(Color.BLACK);            tv2.setTextColor(Color.BLACK);            tv3.setTextColor(Color.BLACK);            tv4.setTextColor(Color.BLACK);            dividerView.setVisibility(View.VISIBLE);        }    }


          到這里就實(shí)現(xiàn)啦。


          需要源碼的童鞋【龍旋】公眾號對話框回復(fù)關(guān)鍵字:淘寶漸變?,即可獲取下載鏈接地址。

          瀏覽 64
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  成人伊人综合 | 天天干天天舔 | 骚货被操视频 | 屁屁影院—线路①屁屁影院 | 国产乱妇高潮无乱码 |