首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

自定义 Behavior,实现嵌套滑动、平滑切换周月视图日历

[1240] 使用 CoordinateLayout 可以协调它子布局,实现滑动效果联动,它滑动效果由 Behavior 实现。以前用过小米日历,对它滑动平滑切换日月视图效果印象深刻。...本文尝试用自定义 Behavior 实现一个带有这种效果日历。...简介 先上个小米日历图,让大家知道要做一个什么效果: [strip] 这是小米日历效果,在用户操作列表时候,将日历折叠成周视图,扩大列表显示区域,同时也不影响日历部分功能使用,有趣且实用。...原本想用原生 CalendarView,但是 CalendarView 不支持周视图,可自定义程度也不高。 在 GitHub 搜了一下,决定使用 MaterialCalendarView。...这个库比较流行,它支持周月视图切换,符合 Material Design,也可以自定义显示效果。

3.1K10

iOS字典转模、xib使用自定义视图

文件加载)->实现按钮监听方法 5、使用类方法加载xib,简化代码搭建界面 6、自定义视图使用数据模型装配视图内容 若一个view内部子控件比较多,通常会考虑自定义一个view 把内部子控件创建屏蔽起来...: (NSDictionary *) appDictionary; //返回plist文件对应模型数组 ,使用懒加载 + (NSArray *)appList; 2、使用类方法实例化视图对象,并用数据模型装配视图内容...;数据模型(plist-》字典-》模型)--自定义Plist 通常放置于Supporting Files目录中 #define kAppViewWidth 80 //视图宽度 #define...,让编译器主动推动对象实际类型,以避免使用ID,造成开发中不必要麻烦 1.instancetype 只能使用于返回值类型,不能像id一样用于参数类型;但instancetype比id多一个好处是:...属性不能使用New 开头进行命名 1.6 @synthesize用法 ---- @synthesize 中可以定义 与变量名不相同getter和setter命名,籍此来保护变量不会被不恰当访问

82310
您找到你想要的搜索结果了吗?
是的
没有找到

Android下拉阻尼效果实现原理及简单实例

现在大部分资讯类安卓APP都有一个下拉刷新功能,又如微信联系人列表顶部小程序入口,也使用了这种下拉阻尼效果。...原理 这种效果是通过自定义控件方式来实现,我自定义了一个控件类型,这个自定义控件(PullDownDumperLayout)继承自线性布局(LinearLayout) 。...用户可以下拉弹出那个视图,例如微信小程序列表,开发者只是将这个视图移出了父元素之外,所以不可见,我们暂且称之为隐藏头部,只有下拉到一定程度才会弹出,而主体,例如微信联系人列表,则是可见,布局见下图...这里我和灵感来源那篇博客一样,让自定义控件实现View.OnTouchListener接口,实现内部onTouch方法可以监听来自屏幕所有触摸操作。...R.layout.activity_main); //TODO 读者可在这里初始化参数 PullDownDumperLayout pddl=findViewById(R.id.PullDownDumper); } } 下面是笔者正在使用自定义控件

2.5K10

View事件分发及滑动冲突解决

二、事件传递三个阶段 分发(dispatch) dispatchTouchEvent public boolean dispatchTouchEvent(MotionEvent event) 根据当前视图具体实现逻辑...boolean onTouchEvent(MotionEvent event) true 表示当前视图处理对应事件,事件将不会向上传递给父视图 false 表示当前视图不处理对应事件,事件将会向上传递给父视图...view时,就由最内层onTouchEvent进行处理,如果能处理就返回true消费掉,如果不能处理就返回false,这时事件会重新向外层传递,并由外层onTouchEvent进行处理,依次类推...,如果onTouch返回true,事件将不会继续传递,最后也不会调用onClick方法,如果返回false,事件继续传递 四、viewGroup事件分发 viewGroup作为view控件容器存在,...Android系统默认提供了一系列viewGroup,例如LinearLayout,FrameLayout,RelativeLayout,ListView等 4.1、自定义一个简单MyRelativeLayout

75940

Android开发笔记(四十五)手势事件

注意Fragment不能操作基本手势方法,只能通过实现OnTouchListener接口来响应手势事件。...上面可以看出,只有容器类才能操作onInterceptTouchEvent方法,这是因为该方法用于拦截发往下层视图事件,而控件类已经位于底层只有被拦截份没有拦截别人份,同样页面类本身并不拥有下层视图...这样多个控件争相响应同一个手势事件,就会产生滑动冲突,如果没处理好冲突,页面上某些控件便无法正常使用。避免滑动冲突处理办法,主要有以下三个: 1、对不同手势事件,要返回正确布尔值。...下面示例代码演示了ScrollView拦截垂直滑动而放过水平滑功能: import android.annotation.SuppressLint; import android.content.Context...View滑动方法 虽然Scroller提供了滑动相关计算函数,但是Scroller本身并不能直接滑动控件。

1.2K30

Android自定义控件总结

自定义控件分类: 1、使用系统控件,实现自定义效果 2、自己定义一个类继承View ,如textView、ImageView等,通过重写相关方法来实现新效果 3、自己定义一个类继承ViewGroup...2.确定是使用组合控件形式还是全新自定义形式,组合控件即使用多个系统控件来合成一个新控件,你比如titilebar,这种形式相对简单。...如果希望视图绘制流程(三步)可以完完整整地重新走一遍,就不能使用invalidate()方法,而应该调用requestLayout()了。...(只有在自定义ViewGroup中才用到),这个坐标是相对于当前视图视图而言。...方法执行完,就可以用它获取到宽高,在自定义view内使用view.measure(0,0)方法可以主动通知系统去测量,然后就可以直接使用它获取宽高。

93411

Android自定义控件总结

自定义控件分类: 1、使用系统控件,实现自定义效果 2、自己定义一个类继承View ,如textView、ImageView等,通过重写相关方法来实现新效果 3、自己定义一个类继承ViewGroup...2.确定是使用组合控件形式还是全新自定义形式,组合控件即使用多个系统控件来合成一个新控件,你比如titilebar,这种形式相对简单。...如果希望视图绘制流程(三步)可以完完整整地重新走一遍,就不能使用invalidate()方法,而应该调用requestLayout()了。...(只有在自定义ViewGroup中才用到),这个坐标是相对于当前视图视图而言。...方法执行完,就可以用它获取到宽高,在自定义view内使用view.measure(0,0)方法可以主动通知系统去测量,然后就可以直接使用它获取宽高。

1.2K80

Android触摸事件传递机制

前言:在Android开发中,经常会遇到触摸事件冲突,比如ViewPager轮播图跟Fragment划动事件冲突,或者轮播图跟下拉事件冲突,自定义view事件处理等,本文章将会详细介绍Activity...该方法中判断事件是被消费( return true ),还是继续分发给子视图处理( return super.dispatchTouchEvent ),如果当前视图是ViewGroup或者其子类,则会调用...OnTouchEvent 方法判断,是被消费( return true ),还是不处理( return false )并将事件传递给父视图 OnTouchEvent 方法进行处理。...View 事件控制顺序先执行 onTouch 再执行 onClick ,如果 onTouch 返回 true 消费,则不会继续传递,也不会执行 onClick 方法。...为了更好观察,我们需要自定义 MyRelativeLayout 继承 RelativeLayout 。

1.1K10

Windows 8.1 应用再出发 - 几种更新控件

FlipView 更新 翻转视图控件,在应用中常用作图片等内容翻页/滑动显示。用户可以浏览多个项目,每次显示一个。...在上面的图中,我们看到,翻转视图中有三个项目:1/2/3,每次滑动或点击左右键可以切换显示一个项目。那么Windows 8.1 针对它更新是什么呢?...在Windows 8中,当用户通过滑动触控切换项目时,FlipView项目切换会进行平滑滚动。而通过点击或编程时,不会出现平滑滚动,内容只是简单切换显示。...多种控件添加Header属性 有些控件在使用中通常会附带标题,来描述控件中值意义。...NavigateToLocalStreamUri 方法,用于通过自定义解析程序加载本地内容。 (7).

1.7K80

Android 动画总结(7) - ViewGroup 子元素间动画

目前系统支持以下 5 种状态变化,可以为任意一种状态设置自定义动画: APPEARING:容器中出现一个视图 DISAPPEARING:容器中消失一个视图 CHANGING:布局改变导致某个视图随之改变...,例如调整大小,但不包括添加或者移除视图 CHANGE_APPEARING:其他视图出现导致某个视图改变 CHANGE_DISAPPEARING:其他视图消失导致某个视图改变 <?...LayoutTransition() // 为 ViewGroup 容器绑定 LayoutTransition 对象 rootView.layoutTransition = transition // 使用翻转进入动画代替默认...LayoutTransition.APPEARING) * 10) transition.setAnimator(LayoutTransition.APPEARING, appearAnim) // 使用滑动动画代替默认布局改变动画...// 这个动画会让视图滑动进入并短暂地缩小一半,具有平滑和缩放效果 val pvhSlide = PropertyValuesHolder.ofFloat("y", 0f, 1f)

1.1K10

View事件拦截机制浅析

我记得有人问我当初是怎么接触自定义view这东西。因为他们觉得自定义view这个东西很难。我就回了如下几句话:自定义view你把paint和canvas。弄懂了基本也就差不多了。...简单来说,Window是一个抽象类,是所有视图最顶层容器,视图外观和行为都归他管,不论是背景显示,标题栏还是事件处理都是他管理范畴,虽然能管事情看似很多,但是没实权,因为抽象类不能直接使用。...下面我们来说说DecorView: 这样,我们做个假设,一个跟布局高度是wrap控件,我们运行之后可以发现,除了那个控件,留下了大量空白区域,由于我们手机屏幕不能透明,所以这些空白区域肯定要显示一些东西...分发(dispatch)–>拦截(onIntercept)–>消费(ontouch) public boolean dispatchTouchEvent(MotionEvent ev) 用来进行事件分发...那么此方法一定会调用,返回结果受当前Viewontouch和下级dispatchtouchevent影响,表示是否消耗当前事件。

57160

自定义View必备知识-View绘制流程

可以调用setEnable()方法来改变视图可用状态,传入true表示可用,传入false表示不可用。 它们之间最大区别在于,不可用视图是无法响应onTouch事件。...而现在Android手机几乎都没有键盘了,因此基本上只可以使用requestFocus()这个办法来让视图获得焦点了。...而requestFocus()方法也不能保证一定可以让视图获得焦点,它会有一个布尔值返回值,如果返回true说明获得焦点成功,返回false说明获得焦点失败。...从View测量、布局和绘制原理来看,要实现自定义View,根据自定义View种类不同,可能分别要自定义实现不同方法。...如果你有一个复杂UI,你应该考虑写一个自定义ViewGroup来执行他layout操作。

1.6K30

【Android】手把手教你上滑解锁效果

实现思路 这个效果实现思路主要围绕手指触屏事件展开,注意点如下: 以ACTION_DOWN和ACTION_UPY轴距离差与自定义滑动阈值作比较来判断是否上滑 借助Scroller类,触发LinearLayout...流畅滑动效果 使用GestureListener实现阻尼滑动效果 未解锁状态禁止向下滑动 详细设计 基于上述几个注意点,考虑细节分别如下: 有效上滑 ?...方法后刷新视图,以此来达到流畅滑动效果,其实ViewPager、ScrollView等控件都是通过Scroller来实现流畅滑动。...(伪)代码实现 首先按自定义控件套路来,new一个类,继承LinearLayout,填充写好布局,重写onTouch方法: public class PagerLayout extends LinearLayout...使用控件有: XRecyclerView 自定义控件引导页控件PagerLayout(上述实现控件) 封装PagerLayoutshow和hide方法: // 显示视图 public void

2.6K20

Android触摸事件_简述兴奋在突触传递过程

比如在使用SliddingMenu菜单时候,可能会与ViewPager或者其他一些带有滑动事件View相冲突,再比如ScrollView嵌套ListView相冲突等等。...因为所有的事件操作都发生在触摸屏上,而在屏幕上与用户交互就是各种各样视图组件(View),在Android中,所有的视图都继承于View,另外通过各种布局组件(ViewGroup)来对View进行布局...这是ViewGroup特有的方法,因为ViewGroup中可能还有子View,而在Android中View中是不能再包含子View。...运行程序,点击自定义Button,输出如下(感觉Android Log输出比java System方便观看,之后使用Log): ACTION_DOWN以及ACTION_UP事件传递流程图如下...于是难题出现了,你若把Touch Event都想办法给传到上层了(只能通过返回false来传到上层),那么下层各种子View就不能处理后续事件了。

62520

CSS Transitions

这意味着元素在旋转或翻转时,只有正面可见,背面将被隐藏起来,不会呈现在屏幕上。 backface-visibility通常与3D变换一起使用,以控制元素在旋转或翻转外观。...例如,可以在3D场景中创建卡片翻转效果,然后使用backface-visibility将背面隐藏,以确保只有正面可见。...到最后,它就像一只慢慢爬行乌龟。 我们用坐标轴来描述元素随时间位移图,它会看起来像这样: ❝那什么时候会使用ease-out?它最常用于某些东西从「屏幕外部进入视图」(例如,弹窗出现)情况。...❞ 自定义曲线 如果提供内置选项不符合我们需求,我们可以使用三次贝塞尔(cubic bézier)时间函数来定义自己自定义缓动曲线!...像margin-top这样属性不能进行子像素渲染,这意味着它们需要四舍五入到最接近像素,从而创建出一个阶梯状、不流畅效果。

23930

记录下帮助一位网友解决关于android子控件onTouch或onClick和父OnTouch 冲突问题。

问题原型: 父控件是自定义 LinearLayout,目的是实现下拉刷新,这个自定义View实现下拉操作思想是通过检测 onTouch 事件,然后,子控件有一个 scrollView,它是完全为了实现下滚和滚到底部实现加载更多监听...在 scrollView 里面的第一层View里面有很多一样自定义 View,每个有具备自身 onClick 和 onTouch 事件,目的是为了在用户点击时候实现变色和相应。      ...问题来了,根据他说,每次点击,总是先实现 自定义View onTouch down,然后是 onClick,而 父 Linearlayout onTouch是最后实现,而且,父 action_down...解决方法: 既然传统解决方法解决不了,我当时想到是:      1:子View 使用父类 onTouch 接口来实现点击和改变颜色,总之就是子View不要自己再实现 onClick和onTouch...这样所会产生问题:      因为它这个父View是整个使用onTouch来实现下拉,所以:      1:用户点击后会产生两次 onTouch执行,一次是子 View,第二次是 父View。

1.2K50

Android十八章:设计模式SOLID五大原则

再比如手机电池是一个类,电池只为手机提供电源职责。 在Android开发中,adapter类职责只负责视图显示,这时候你会说adapter里面还有很多方法比如创建视图,显示视图,提供视图数量等。...就是说adapter创建和显示视图是这个类职责,而不应该包括视图显示内容计算逻辑,我只要知道结果就行了。...处理了视图逻辑,应该把时间格式化操作放在UserOrder类中。...开闭原则 开闭原则就是在每次有新需求都不能在原来代码中做修改。你可以一开始时候就用多态和接口来实现架构,让你代码更容易扩展,而不是修改。...总结:通常我们为了更简单实例化抽象类,我们推荐使用dagger2。

59120

FloatWindowUtils 实现及事件冲突解决详解

悬浮窗 悬浮窗即可以显示在宿主应用之外 View 视图,理论上任何 View 都能以悬浮窗形式展示在宿主应用之外甚至锁屏界面,一般在工具类应用中使用比较多,通过悬浮窗可以很方便从外界与宿主应用进行交互...Android 中所有视图都是通过 Window 来呈现,不管是 Activity、Dialog、还是 Toast,它们视图实际上都是附加在 Window 上。...WindowManager.LayoutParams 通过名字就可以看出来 它是WindowManager一个内部类,专门用来描述 view 属性 比如大小、透明度 、初始位置、视图层级等。...现在这个 Button 虽然可以跟着你手指移动了,但是你会发现当你拖动一段较小距离时会有很大几率响应它 Click 事件,这显然不能接受,在拖动这个 Button 整个过程中会依次触发 ACTION_DOWN...ValueAnimator来平滑计算起始X坐标到结束X坐标之间值,并更新悬浮窗位置 ValueAnimator animator = ValueAnimator.ofFloat

2.7K20
领券