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

github地址(完整Demo迟赃,歡迎下載)

https://github.com/zhouxu88/ScrollViewTextGradual

最近項目需要,電商項目厂镇,需要仿淘寶商品詳情頁的標(biāo)題欄漸變的效果纤壁。

效果圖:

淘寶.gif

實現(xiàn)

分析:標(biāo)題欄漸變,文字漸變隱藏 透明通知欄捺信,這是通過ScrollView來做的酌媒,我們只需要在ScrollView的滑動監(jiān)聽事件中根據(jù)滑動的距離,手指向上還是向下滑動來做相應(yīng)的透明和顯示操作就可以完成這種效果了迄靠。

1秒咨、ScrollView滑動監(jiān)聽:

Google并沒有給我們提供ScrollView的滑動距離、是否滑動到布局底部梨水、頂部的方法拭荤,但是提供了一個onScrollChanged方法:

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

參數(shù)說明

  • x :當(dāng)前橫向滑動距離
  • y: 當(dāng)前縱向滑動距離
  • oldx: 之前橫向滑動距離
  • oldy :之前縱向滑動距離

但是很遺憾這個方法我們不可以調(diào)用,所以我們不得不重寫ScrollView暴露該方法:

/**
 * 帶滾動監(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);
        }
    }

}

然后我們需要獲取圖片的高度疫诽,并且設(shè)置滾動監(jiān)聽舅世,隨著滾動的距離來設(shè)置標(biāo)題欄的顏色透明度和字體顏色的透明度

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

            }
        });
    }

ScrollView的滑動監(jiān)聽
分析:y <= 0奇徒,還沒有滑動或者手指先向上滑動一會兒滑又向下滑動值到頂部不能再滑動位置雏亚,y > 0 && y <= imageHeight,表示滑動的距離在這個頭部的banner圖的高度范圍之內(nèi)摩钙,也就是說距離是小于banner圖的高度罢低,這種情況又分為2種,手指向上滑和向下滑胖笛,當(dāng)手指向上滑動网持,屏幕內(nèi)容下滑時,3張圖片是從透明漸變變成不透明长踊,當(dāng)手指向下滑動功舀,屏幕內(nèi)容上滑,3張圖片是不透明漸變成透明

@Override
    public void onScrollChanged(GradationScrollView 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);
            tv2.setTextColor(Color.TRANSPARENT);
            tv3.setTextColor(Color.TRANSPARENT);
            tv4.setTextColor(Color.TRANSPARENT);
            dividerView.setVisibility(View.GONE);
        } else if (y > 0 && y <= imageHeight) {
            //滑動距離小于banner圖的高度時身弊,設(shè)置背景和字體顏色顏色透明度漸變
            Log.i(TAG, "滑動距離小于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) {
                // 手指向上滑動辟汰,屏幕內(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) {
                // 手指向下滑動列敲,屏幕內(nèi)容上滑
                backIv.setImageResource(R.mipmap.ic_back);
                shopCartIv.setImageResource(R.mipmap.ic_shopping_cart);
                moreIv.setImageResource(R.mipmap.ic_more);
            }
        } else {
            //滑動到banner下面設(shè)置普通顏色
            Log.i(TAG, "滑動到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);
        }
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市帖汞,隨后出現(xiàn)的幾起案子戴而,更是在濱河造成了極大的恐慌,老刑警劉巖翩蘸,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件所意,死亡現(xiàn)場離奇詭異,居然都是意外死亡鹿鳖,警方通過查閱死者的電腦和手機(jī)扁眯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來翅帜,“玉大人姻檀,你說我怎么就攤上這事±缘危” “怎么了绣版?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長歼疮。 經(jīng)常有香客問我杂抽,道長,這世上最難降的妖魔是什么韩脏? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任缩麸,我火速辦了婚禮,結(jié)果婚禮上赡矢,老公的妹妹穿的比我還像新娘杭朱。我一直安慰自己,他們只是感情好吹散,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布弧械。 她就那樣靜靜地躺著,像睡著了一般空民。 火紅的嫁衣襯著肌膚如雪刃唐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天界轩,我揣著相機(jī)與錄音画饥,去河邊找鬼。 笑死浊猾,一個胖子當(dāng)著我的面吹牛荒澡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播与殃,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼单山,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了幅疼?” 一聲冷哼從身側(cè)響起米奸,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎爽篷,沒想到半個月后悴晰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡铡溪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了泪喊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片棕硫。...
    茶點(diǎn)故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖袒啼,靈堂內(nèi)的尸體忽然破棺而出哈扮,到底是詐尸還是另有隱情,我是刑警寧澤蚓再,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布滑肉,位于F島的核電站,受9級特大地震影響摘仅,放射性物質(zhì)發(fā)生泄漏靶庙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一娃属、第九天 我趴在偏房一處隱蔽的房頂上張望六荒。 院中可真熱鬧,春花似錦膳犹、人聲如沸恬吕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽铐料。三九已至,卻和暖如春豺旬,著一層夾襖步出監(jiān)牢的瞬間钠惩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工族阅, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留篓跛,地道東北人。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓坦刀,卻偏偏與公主長得像愧沟,于是被迫代替她去往敵國和親蔬咬。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,501評論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫沐寺、插件林艘、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,022評論 4 62
  • 你已娶了她,為何還要找我混坞『“如今的她不過是下賤的風(fēng)塵女子瑟瑟,而他的王妃永遠(yuǎn)是那個玉潔冰清的女子究孕∩督矗“因為我想我的瑟...
    梵凡一飛閱讀 237評論 0 0
  • 文/Nichole 管理/職場 認(rèn)識的人很多,找我咨詢營銷和服務(wù)的人很多厨诸,而我不善于拒絕镶殷。 所以,我的焦慮來自于我...
    翁萍閱讀 1,266評論 0 0
  • 誠實與善良的遇見 掌握了生命的航向 理解與寬容的遇見 架起了友誼的橋梁 困難與挫折的遇見 書寫了奮斗的堅強(qiáng) 自信與...
    香自苦寒閱讀 259評論 4 3