Android UI開發第四十篇——ScrollTricks介紹
ScrollTricks是一個開源控制元件,實現了兩個簡單功能:
1、Quick Return:向上滑動時,View也向上滑動並且消失,當向下滑動時,View馬上出現。例如Google Now的搜尋功能。
2、Sticky:類似的同步滾動,特定的View最多滑動到頂部並保持固定不動。例如大眾點評或美團的“立即購買”功能。
<com.example.android.scrolltricks.ObservableScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/scroll_view" android:layout_width="match_parent" android:layout_height="match_parent"> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <View style="@style/Item.Top" /> <View android:id="@+id/placeholder" android:layout_width="match_parent" android:layout_height="@dimen/sticky_height" /> <View style="@style/Item.Bottom" /> <View style="@style/Item.Bottom.Alt" /> <View style="@style/Item.Bottom" /> <View style="@style/Item.Bottom.Alt" /> <View style="@style/Item.Bottom" /> <View style="@style/Item.Bottom.Alt" /> </LinearLayout> <TextView android:id="@+id/sticky" style="@style/Item.Sticky" /> </FrameLayout> </com.example.android.scrolltricks.ObservableScrollView>
ScrollTricks的兩個效果原理是兩個相同的View同在一個FrameLayout佈局,這裡是android:id="@+id/placeholder",android:id="@+id/sticky"兩個View。監控ScrollView的滑動,根據android:id="@+id/placeholder" View的位置控制android:id="@+id/sticky"View的位置。主要是對ScrollView滾動的Y值得監聽。
看一下sticky的實現:
public class StickyFragment extends Fragment implements ObservableScrollView.Callbacks { private TextView mStickyView; private View mPlaceholderView; private ObservableScrollView mObservableScrollView; public StickyFragment() { } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { ViewGroup rootView = (ViewGroup) inflater .inflate(R.layout.fragment_content, container, false); mObservableScrollView = (ObservableScrollView) rootView.findViewById(R.id.scroll_view); mObservableScrollView.setCallbacks(this); mStickyView = (TextView) rootView.findViewById(R.id.sticky); mStickyView.setText(R.string.sticky_item); mPlaceholderView = rootView.findViewById(R.id.placeholder); mObservableScrollView.getViewTreeObserver().addOnGlobalLayoutListener( new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { onScrollChanged(mObservableScrollView.getScrollY()); } }); return rootView; } @Override public void onScrollChanged(int scrollY) { Log.d("onScroll", "Y:"+scrollY+"|"+mPlaceholderView.getTop()); mStickyView.setTranslationY(Math.max(mPlaceholderView.getTop(), scrollY)); } @Override public void onDownMotionEvent() { } @Override public void onUpOrCancelMotionEvent() { } }
ObservableScrollView的實現:
public class ObservableScrollView extends ScrollView { private Callbacks mCallbacks; public ObservableScrollView(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onScrollChanged(int l, int t, int oldl, int oldt) { super.onScrollChanged(l, t, oldl, oldt); if (mCallbacks != null) { mCallbacks.onScrollChanged(t); } } @Override public boolean onTouchEvent(MotionEvent ev) { if (mCallbacks != null) { switch (ev.getActionMasked()) { case MotionEvent.ACTION_DOWN: mCallbacks.onDownMotionEvent(); break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: mCallbacks.onUpOrCancelMotionEvent(); break; } } return super.onTouchEvent(ev); } @Override public int computeVerticalScrollRange() { return super.computeVerticalScrollRange(); } public void setCallbacks(Callbacks listener) { mCallbacks = listener; } public static interface Callbacks { public void onScrollChanged(int scrollY); public void onDownMotionEvent(); public void onUpOrCancelMotionEvent(); } }
下載:
http://download.csdn.net/detail/xyz_lmn/7064257
相關文章
- Android開發 MeasureSpec介紹Android
- Android開發之WebService介紹AndroidWeb
- Android API 開發包介紹AndroidAPI
- Kotlin on Android 開發環境介紹KotlinAndroid開發環境
- Android開發 - 掌握ConstraintLayout(二)介紹AndroidAI
- 手遊開發Android平臺周邊工具介紹Android
- jQuery UI 1.9介紹jQueryUI
- 開源工具 SAP UI5 Tools 介紹開源工具UI
- ModStartCMS模組開發介紹
- 介紹Android原生開發工具包r14Android
- Android開發環境中的概念和工具介紹Android開發環境
- 陀螺世界商城開發(介紹)
- SJL 開發包1.0介紹
- 第四十九,反射基本介紹反射
- Web專案開發介紹及實戰專案介紹Web
- android AsyncTask介紹Android
- Web開發小工具介紹Web
- Java/JavaWeb/開發環境介紹JavaWeb開發環境
- 微信公眾介面開發介紹
- iOS開發- reloadData方法介紹iOS
- 面向企業級前端應用的開發框架 UI5 的發展簡史介紹前端框架UI
- SAP UI5 的自動化測試套件頁面的開發步驟介紹UI套件
- 介紹一款倍受歡迎的.NET 開源UI庫UI
- 開源工具 @sap/ux-ui5-tooling 介紹開源工具UXUI
- Android與Flutter混合開發-UI互動AndroidFlutterUI
- Android 介面(1):UI 開發控制元件AndroidUI控制元件
- SAP UI5 sap.ui.Device.media 的使用介紹UIdev
- SAP UI5 sap.ui.core.Element 的概要介紹UI
- SAP UI5 sap.ui.export.Spreadsheet API 介紹UIExportAPI
- SAP UI5 Routing 路由介紹UI路由
- SAP UI5 SmartForm 使用技巧介紹UIORM
- SAP UI5 Smart Chart 功能介紹UI
- Flutter混合開發二-FlutterBoost使用介紹Flutter
- 介紹一個軟體開發工具
- VS Code外掛開發介紹(二)
- iOS混合開發庫(GICXMLLayout)一、介紹iOSXML
- SOLIDWORKS二次開發介紹Solid
- Three.js開發指南(1):介紹JS