zoukankan      html  css  js  c++  java
  • Android: TODO 应用交互的两种实现方法(Behavior)

    最近在写 TODO app,涉及到 Calendar 和 RecyclerView 的交互,

    需求:

    1. 往上滑动, Calendar 显示为周

    2. 周显示模式下,往下滑动,显示为月

    3. 列表下滑到第一个 item 的位置, Calendar 显示为周的时候,这时候改变为显示月

    4. 列表上滑,Calendar 缩起来,显示为周,假如已经缩起来了,让列表滑动,显示更多的 item。

    方法一:目前采用的是把 Calendar 和 RecyclerView 放在一个 LinearLayout 中,然后在 dispatchTouchEvent() 方法中根据上下滑动的手势进行了判断,然后让 Calendar 和 RecyclerView 进行交互。

    方法二:目前看到另外一个新的解决办法是,使用 CoordinatorLayout 布局,然后自定义 Behavior,实现 Calendar 和 RecyclerView 的交互。

    CalendarBehavior:

     1 public class CalendarBehavior extends CoordinatorLayout.Behavior<MonthPager> {
     2     private int mTop;
     3 
     4     @Override
     5     public boolean layoutDependsOn(CoordinatorLayout parent, MonthPager child, View dependency) {
     6         return dependency instanceof RecyclerView;
     7     }
     8 
     9     @Override
    10     public boolean onLayoutChild(CoordinatorLayout parent, MonthPager child, int layoutDirection) {
    11         parent.onLayoutChild(child, layoutDirection);
    12         child.offsetTopAndBottom(mTop);
    13         return true;
    14     }
    15 
    16     private int dependentViewTop = -1;
    17 
    18     @Override
    19     public boolean onDependentViewChanged(CoordinatorLayout parent, MonthPager child, View dependency) {
    20         if (dependentViewTop != -1) {
    21             int dy = dependency.getTop() - dependentViewTop;    //dependency对其依赖的view(本例依赖的view是RecycleView)
    22             int top = child.getTop();
    23             if (dy > -top) {
    24                 dy = -top;
    25             }
    26 
    27             if (dy < -top - child.getTopMovableDistance()) {
    28                 dy = -top - child.getTopMovableDistance();
    29             }
    30 
    31             child.offsetTopAndBottom(dy);
    32         }
    33         dependentViewTop = dependency.getTop(); //dependency
    34         mTop = child.getTop();
    35         return true;
    36     }
    37 }

    关于自定义 Behavior ,入门参考:http://blog.csdn.net/tabolt/article/details/51821933

    链接:一文让你搞懂design设计的CoordinatorLayout和AppbarLayout联动,让Design设计更简单~:http://www.cnblogs.com/liushilin/p/6170735.html

  • 相关阅读:
    python--第十天总结(Select/Poll/Epoll使用 )
    python--第九天总结
    数据库文件*.sdf文件定时备份,但是大小的增量在不断增长的问题排查
    打开和创建SqlCe(.sdf文件)
    C# 在RichTextBox中滚动鼠标时滚动的是父窗口的滚动条
    Foxmail 7.0破解版,拷贝到新机器后,发送邮件乱码问题
    C# RichTextBox设置行间距
    winform在鼠标操作时要判断是否按下Ctrl键
    vs2015 制作安装包额外需要安装的软件VSI_bundle
    vs 2015工具栏添加Tab Order
  • 原文地址:https://www.cnblogs.com/liyiran/p/6197042.html
Copyright © 2011-2022 走看看