ScrollTricks是一个开源控件,实现了两个简单功能:

1、Quick Return:向上滑动时,View也向上滑动并且消失,当向下滑动时,View马上出现。例如Google Now的搜索功能。

2、Sticky:类似的同步滚动,特定的View最多滑动到顶部并保持固定不动。例如大众点评或美团的“立即购买”功能。

<com.example.android.scrolltricks.ObservableScrollViewxmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/scroll_view"android:layout_width="match_parent"android:layout_height="match_parent"><FrameLayoutandroid: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() {}@Overridepublic 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() {@Overridepublic void onGlobalLayout() {onScrollChanged(mObservableScrollView.getScrollY());}});return rootView;}@Overridepublic void onScrollChanged(int scrollY) {Log.d("onScroll", "Y:"+scrollY+"|"+mPlaceholderView.getTop());mStickyView.setTranslationY(Math.max(mPlaceholderView.getTop(), scrollY));}@Overridepublic void onDownMotionEvent() {}@Overridepublic void onUpOrCancelMotionEvent() {}
}

ObservableScrollView的实现:

public class ObservableScrollView extends ScrollView {private Callbacks mCallbacks;public ObservableScrollView(Context context, AttributeSet attrs) {super(context, attrs);}@Overrideprotected void onScrollChanged(int l, int t, int oldl, int oldt) {super.onScrollChanged(l, t, oldl, oldt);if (mCallbacks != null) {mCallbacks.onScrollChanged(t);}}@Overridepublic 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);}@Overridepublic 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

/**
* @author 张兴业
* http://blog.csdn.net/xyz_lmn
* 我的新浪微博:@张兴业TBOW

*/

Android UI开发第四十篇——ScrollTricks介绍相关推荐

  1. Android UI开发第三十篇——使用Fragment构建灵活的桌面

    http://www.lupaworld.com/article-222973-1.html 当我们设计应用程序时,希望能够尽最大限度的适配各种设备,包括4寸屏.7寸屏. 10寸屏等等,Android ...

  2. Android UI开发第三十九篇——Tab界面实现汇总及比较

    Tab布局是iOS的经典布局,Android应用中也有大量应用,前面也写过Android中TAb的实现,<Android UI开发第十八篇--ActivityGroup实现tab功能>.这 ...

  3. Android UI开发第四篇——实现像handcent sms或者chomp sms那样的气泡短信样式

    今晚有点时间把断了很长时间的UI开发补一下,这次实现的是像handcent sms或者chomp sms那样的气泡短信样式,也是iphone上的气泡聊天模式.实现这种效果的重点是ListView的di ...

  4. Android UI开发第三十二篇——Creating a Navigation Drawer

    Navigation Drawer是从屏幕的左侧滑出,显示应用导航的视图.官方是这样定义的: The navigation drawer is a panel that displays the ap ...

  5. Android UI开发第三十三篇——Navigation Drawer For Android API 7

    Creating a Navigation Drawer中使用的Navigation Drawer的android:minSdkVersion="14",现在Android API ...

  6. 电子海图开发第四十篇 , s63电子海图的概述(共一百篇)

    s63不是一种新的格式的海图,他是s57格式的电子海图加密形式,主要是为了保护电子海图不被随意的复制,和船舶传统的数据保护方案倾向于通过协议或合同的形式约束数据发布方和数据使用方之间的相互责任,但这并 ...

  7. Android UI开发第二十五篇——分享一篇自定义的 Action Bar

    Action Bar是android3.0以后才引入的,主要是替代3.0以前的menu和tittle bar.在3.0之前是不能使用Action Bar功能的.这里引入了自定义的Action Bar, ...

  8. Android UI开发第四十一篇——墨迹天气3.0引导界面及动画实现

    周末升级了墨迹天气,看着引导界面做的不错,模仿一下,可能与原作者的代码实现不一样,但是实现的效果还是差不多的.先分享一篇以前的文章,android动画的基础知识,<Android UI开发第十二 ...

  9. Android UI开发——AppCompat实现Action Bar

    http://blog.csdn.net/xyz_lmn/article/details/12623609 每一位Android开发者对Action Bar这种设计都不陌生了,毕竟它已经发布了至少两年 ...

最新文章

  1. 【 Verilog HDL 】赋值冲突问题
  2. dubbo 服务压测_全链路压测资料汇总——业内大厂解决方案
  3. 第一章 Java快速入门
  4. 征战蓝桥 —— 2013年第四届 —— C/C++A组第3题——振兴中华
  5. 15原型模式(Prototype)
  6. 一个准毕业生的2012年总结
  7. docker 基础之数据管理
  8. 2.2 CSS3基本语法 + 选择器
  9. ubuntu自带截图工具
  10. 中国网游,是福?还是祸?
  11. 3月21日短线黑马牛股公开验证
  12. mapreduce 论文 - 阅读笔记
  13. 基于互联网+居民健康管理平台技术方案
  14. Mybatis缓存机制(一级缓存、二级缓存、三级缓存)
  15. 如何导出、导入mysql数据
  16. spss数据处理—数据输入
  17. MQL4内置函数--总结汇总
  18. 群晖NAS | 新技能Get,ABB套件文件服务器的安全备份攻略
  19. 蒙特卡洛射线追踪_什么是射线追踪?
  20. PAYING MORE ATTENTION TO ATTENTION:

热门文章

  1. HTTP请求常见错误大全
  2. linux忘记root密码怎么修改密码和多台linux相互使用密钥连接
  3. Linu的sftp环境搭建
  4. mysql修改密码、找回密码
  5. android AIDL 入门讲解非常好的文章(网页代码着色给力)
  6. leetcode140. Word Break II
  7. 字幕在看着你:利用恶意字幕文件劫持计算机
  8. C#编程(二十五)----------接口
  9. 重新认识一个强大的 Gson
  10. 在opencv3中的机器学习算法