Android仿淘寶view滑動(dòng)至屏幕頂部會(huì)一直停留在頂部的位置
在剛剛完成的項(xiàng)目中,在一個(gè)頁(yè)面中,用戶體驗(yàn)師提出引用戶操作的入住按鈕要一直保留在頁(yè)面當(dāng)中,不管頁(yè)面能滾動(dòng)多長(zhǎng)都得停留在頁(yè)面的可視區(qū)域。最終實(shí)現(xiàn)效果如下圖所示:


如圖中的紅色框中的view始終會(huì)停留在頁(yè)面中,如果滑動(dòng)至頁(yè)面的頂部,會(huì)一直保留在頂部。
下面來說下具體的實(shí)現(xiàn)思路:

思路:其實(shí)整個(gè)頁(yè)面當(dāng)中一共有兩個(gè)視覺效果一樣的View,通過滑動(dòng)的位置來進(jìn)行View的隱藏和顯示來達(dá)到這種效果。整個(gè)頁(yè)面的在上下滑動(dòng)的過程中可以總結(jié)為兩個(gè)狀態(tài),狀態(tài)A(如圖1所示),view2在可視區(qū)域內(nèi)時(shí),view1不可見。狀態(tài)B(如圖2所示),view2滑過了可視區(qū)域,此種狀態(tài)view1可見,view2不可見。
view顯示和隱藏的時(shí)機(jī):1、當(dāng)頁(yè)面向上滑動(dòng)時(shí),從狀態(tài)A轉(zhuǎn)變到狀態(tài)B的瞬間,view1正好滑動(dòng)至頂部與view2重合的瞬間,將view1顯示;
2、當(dāng)頁(yè)面向下滑動(dòng),從狀態(tài)B轉(zhuǎn)變到狀態(tài)A的瞬間,view2正好和view1重合的瞬間,將view1隱藏。
ViewAllShowLinearLayout類
package org.sunday.uiext;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.ScrollView;
/**
* @author sunday
* 2013-12-5
* 郵箱:zhengchao1937@163.com
* QQ:804935743
*/
public class ViewAllShowLinearLayout extends LinearLayout {
private View mView; // 頂部的View
private ViewSwitchListener viewSwitchListener; // 對(duì)外鉤子接口
private ScrollView mScrollView;
private boolean isFlag = true; //輔助判斷變量
public void initData(View view, ScrollView scrollview,
ViewSwitchListener viewSwitchListener) {
this.mView = view;
this.mScrollView = scrollview;
this.viewSwitchListener = viewSwitchListener;
}
public ViewAllShowLinearLayout(Context context) {
super(context);
init();
}
public ViewAllShowLinearLayout(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init() {
setOrientation(LinearLayout.VERTICAL);
}
@Override
public void computeScroll() {
if (mView != null && mScrollView != null && viewSwitchListener != null) {
int y = mScrollView.getScrollY();
if (isFlag) {
int top = mView.getTop();
if (y >= top) {
viewSwitchListener.onViewShow();
isFlag = false;
}
}
if (!isFlag) {
int bottom = mView.getBottom();
if (y <= bottom - mView.getHeight()) {
viewSwitchListener.onViewGone();
isFlag = true;
}
}
}
}
public interface ViewSwitchListener {
public void onViewShow();
public void onViewGone();
}
}
項(xiàng)目中的使用效果:



以上所述是小編給大家介紹的Android仿淘寶view滑動(dòng)至屏幕頂部會(huì)一直停留在頂部的位置,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
Android BadgeView紅點(diǎn)更新信息提示示例代碼
本篇文章主要介紹了Android BadgeView紅點(diǎn)更新信息提示示例代碼,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-01-01
Android拼圖游戲 玩轉(zhuǎn)從基礎(chǔ)到應(yīng)用手勢(shì)變化
這篇文章主要介紹了Android拼圖游戲的實(shí)現(xiàn)方法,教大家玩轉(zhuǎn)從基礎(chǔ)到應(yīng)用手勢(shì)變化,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10
Android仿微信列表滑動(dòng)刪除之可滑動(dòng)控件(一)
這篇文章主要為大家詳細(xì)介紹了Android仿微信列表滑動(dòng)刪除之可滑動(dòng)控件,具有一定的實(shí)用性和參考價(jià)值,感興趣的小伙伴們可以參考一下2016-08-08
深入Android Handler,MessageQueue與Looper關(guān)系
這篇文章主要介紹了深入Android Handler,MessageQueue與Looper關(guān)系,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-08-08
android TextView中識(shí)別多個(gè)url并分別點(diǎn)擊跳轉(zhuǎn)方法詳解
在本篇文章里小編給大家整理的是關(guān)于android TextView中識(shí)別多個(gè)url并分別點(diǎn)擊跳轉(zhuǎn)方法詳解,需要的朋友們可以學(xué)習(xí)參考下。2019-08-08
android 實(shí)現(xiàn)類似微信緩存和即時(shí)更新好友頭像示例
本篇文章主要介紹了android 實(shí)現(xiàn)類似微信緩存和即時(shí)更新好友頭像示例,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-01-01
使用 Swift 語(yǔ)言編寫 Android 應(yīng)用入門
為了能順利使用這份向?qū)В阈枰? 1. 可以編譯Swift源碼的Linux環(huán)境。stdlib目前只能在Linux環(huán)境下編譯成安卓可用版本。在嘗試為安卓構(gòu)建之前,確保你能夠參考Swift項(xiàng)目的README為L(zhǎng)inux做編譯。2016-04-04

