LayoutManager

深入探索Java设计模式(二)之策略模式

淺唱寂寞╮ 提交于 2020-04-18 00:16:59
抽丝剥茧 细说架构那些事——【优锐课】 策略设计模式是Java API库中常见的模式之一。这与另一个设计模式(称为状态设计模式)非常相似。本文是在学习完优锐课JAVA架构VIP课程—【框架源码专题】中《学习源码中的优秀设计模式》后写下的学习感悟。简要介绍了该思想,并提供了有关如何在Java中实现该思想的示例。 深入探索Java设计模式(一)之单例模式 总览 策略模式也称为策略模式。它被归类为行为软件设计模式,其中重点是在对象之间找到灵活的通信模式。它有助于在运行时对象之间建立灵活的通信。 策略模式 策略模式的基本思想是在类的较小层次扩展中组合一组操作。与该策略相关的对象确定在给定情况下将使用哪种算法。例如,它使我们能够在运行时交换算法的实现细节,而无需我们重写它。这个想法与依赖注入中的实现模式产生了共鸣,因为它还允许在测试过程中将实现换出,例如在测试代码中执行模拟实现。 从状态设计模式的角度来看,它类似于状态设计模式,它是封装上下文对象状态的对象。策略设计模式中的对象类似地封装了算法的实现,并且可以根据需要在运行时交换事件。 在Java API库中,java.awt.Container组件是使用此模式的示例。此处,LayoutManager充当策略对象。这些类(例如BorderLayout,FlowLayout和GridLayout)实现接口LayoutManager

使用Kotlin实现实现炫酷卡片布局

筅森魡賤 提交于 2020-02-29 09:27:59
使用Kotlin实现自定义 LayoutManager + ItemTouchHelper 实现炫酷卡片布局 很久没有写博客了,最近看到了一个比较好的卡片效果,自己就使用Kotlin来实现这个效果练练手 效果如下: 卡片效果 分析: 使用RecyclerView的自定义 LayoutManager + ItemTouchHelper 实现效果 步骤: 1、自定义LayoutManager,处理卡片的层叠显示效果 2、使用ItemTouchHelper实现任何方向的拖动效果,并在拖动回调中处理数据 自定义LayoutManager只需要实现两个方法:generateDefaultLayoutParams()和onLayoutChildren(),代码中注释写的很清楚了,下面就直接上代码 来源: oschina 链接: https://my.oschina.net/u/3611008/blog/2877203

ByRecyclerView:真·万能分割线 (线性/宫格/瀑布流)

孤街浪徒 提交于 2020-02-26 18:00:36
前言 我基本上找遍了网上所有通过 ItemDecorationd 设置分隔线的文章,但都不尽如意,它们大多只适用于部分情况,比如只能给线性布局设置、只能设置color不能设置drawable、不能去除HeaderView部分的分割线、配置麻烦等等等。 于是我费尽周折出了两个类: SpacesItemDecoration , GridSpaceItemDecoration 。它们基本解决了上述所有问题! 收录于开源项目: ByRecyclerView 它们有什么功能 SpacesItemDecoration : > 给LinearLayoutManager设置 1、可设置color或drawable 2、可设置分割线左右或上下的间距 3、可设置header或footer不显示分割线的个数,功能似ListView的setHeaderDividersEnabled(ture) 4、支持横向或纵向 GridSpaceItemDecoration : > 给GridLayoutManager或StaggeredGridLayoutManager设置 1、可配置只在四周是否显示分割线 2、可设置header或footer不显示分割线的个数 绘制原理 : 网上很多解释通过ItemDecoration绘制分割线的原理的文章,我简单总结一下,在 getItemOffsets()

ItemTouchHelper 实现交互动画

孤街浪徒 提交于 2020-02-26 00:25:34
目录介绍 01.拖拽需要实现功能 02.几个重要的方法说明 03.简单实现思路 04.拖拽效果上优化 05.完整代码展示 好消息 博客笔记大汇总【16年3月到至今】,包括Java基础及深入知识点,Android技术博客,Python学习笔记等等,还包括平时开发中遇到的bug汇总,当然也在工作之余收集了大量的面试题,长期更新维护并且修正,持续完善……开源的文件是markdown格式的!同时也开源了生活博客,从12年起,积累共计N篇[近100万字,陆续搬到网上],转载请注明出处,谢谢! 链接地址: https://github.com/yangchong211/YCBlogs 如果觉得好,可以star一下,谢谢!当然也欢迎提出建议,万事起于忽微,量变引起质变! 01.拖拽需要实现功能 需要实现拖拽的功能如下所示 长按item后拖动,与其他item交换位置 按住item右面的图标后拖动,与其他item交换位置 左滑item变透明并缩小,超出屏幕后,其他item补上 右滑item变透明并缩小,超出屏幕后,其他item补上 02.几个重要的方法说明 几个重要的方法说明 需要自定义类实现ItemTouchHelper.Callback类,并重写其中几个方法 isLongPressDragEnabled 是否可以长按拖拽排序 isItemViewSwipeEnabled Item是否可以被滑动

Xreyclcview解析

不羁的心 提交于 2019-11-30 19:17:40
public void onScrollStateChanged(int state) { super.onScrollStateChanged(state); mLoadingListener.onLoadMore(); } layoutManager.getItemCount()应该就是所有item的数量 https://blog.csdn.net/qijingwang/article/details/79909120 来源: https://my.oschina.net/u/4000302/blog/3114464

xrecyclerview有的手机不能加载更多

╄→гoц情女王★ 提交于 2019-11-30 18:38:06
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/qijingwang/article/details/79909120 一、确定问题 首先确定一下问题到底是什么,测试说xrecyclerview(一个github上的三方库,不知道的可以去github上找找,有细节上的bug整体来说很好用)的上拉加载更多功能在有的手机上可以加载更多,有的手机上不能加载更多,这说明这个功能是没有问题的,因为有手机可以实现,难道是手机的问题?拿来测试说的不能上拉加载更多的手机,连上adb,查看一下日志,没有很多信息,就是onLoadMore()接口方法没有被调用,打开crecyclerview源码,找到哪里调用了这个接口,如下: @Override public void onScrollStateChanged(int state) { super.onScrollStateChanged(state); if (state == RecyclerView.SCROLL_STATE_IDLE && mLoadingListener != null && !isLoadingData && loadingMoreEnabled) { LayoutManager layoutManager =

仿抖音上下滑动分页视频

余生颓废 提交于 2019-11-29 07:49:43
目录介绍 01.先来看一下需求 02.有几种实现方式 2.1 使用ViewPager 2.2 使用RecyclerView 03.用ViewPager实现 3.1 自定义ViewPager 3.2 ViewPager和Fragment 3.3 修改滑动距离翻页 3.4 修改滑动速度 04.用RecyclerView实现 4.1 自定义LayoutManager 4.2 添加滑动监听 4.3 监听页面是否滚动 4.4 attach和Detached 05.优化点详谈 5.1 ViewPager改变滑动速率 5.2 PagerSnapHelper注意点 5.3 自定义LayoutManager注意点 5.4 视频播放逻辑优化 5.5 视频逻辑充分解藕 5.6 翻页卡顿优化分析 5.7 上拉很快翻页黑屏 01.先来看一下需求 项目中的视频播放,要求实现抖音那种竖直方向一次滑动一页的效果。滑动要流畅不卡顿,并且手动触摸滑动超过1/2的时候松开可以滑动下一页,没有超过1/2返回原页。 手指拖动页面滑动,只要没有切换到其他的页面,视频都是在播放的。切换了页面,上一个视频销毁,该页面则开始初始化播放。 切换页面的时候过渡效果要自然,避免出现闪屏。具体的滑动效果,可以直接参考抖音…… 02.有几种实现方式 2.1 使用ViewPager 使用ViewPager实现竖直方法上下切换视频分析 1

RecyclerView 中文

点点圈 提交于 2019-11-29 07:01:59
RecyclerView public class RecyclerView extends ViewGroup implements ScrollingView , NestedScrollingChild2 java.lang.Object继承 ↳ android.view.View ↳ android.view.ViewGroup ↳ android.support.v7.widget.RecyclerView 已知的直接子类 BaseGridView , WearableRecyclerView 已知的间接子类 Horizo​​ntalGridView , VerticalGridView 灵活的视图,用于为大型数据集提供有限的窗口。 专业术语: 适配器: RecyclerView.Adapter 负责提供表示数据集中项目的视图的子类。 位置: 适配器中 数据项的位置。 索引: 在调用中使用的附加子视图的索引 getChildAt(int) 。与 职位 对比 。 绑定: 准备子视图以显示与适配器中的 位置 对应的数据的过程。 回收(视图): 先前用于显示特定适配器位置的数据的视图可以放置在高速缓存中以供稍后重用,以便稍后再次显示相同类型的数据。这可以通过跳过初始布局膨胀或构造来显着提高性能。 Scrap(视图): 在布局期间进入临时分离状态的子视图。废弃视图可以重复使用