首页
学习
活动
专区
圈层
工具
发布

ViewPager源码分析

以下分析基于androidx.viewpager.widget.ViewPager的源码(androidx是啥?...onMeasure的作用是View对自己的宽高进行计算和赋值,如果是ViewGroup,还需要去调用每一个子View的onMeasure让子View也进行宽高计算,onMeasure的具体用法这里不细讲...触摸事件处理      View的触摸事件分发顺序是dispatchTouchEvent –> onInterceptTouchEvent -> onTouchEvent,关于这3个事件的区别,这里也不细讲...1.jpg 再来看看move事件,主要工作是判断手指左右滑动的距离,超过一定阙值后就把mIsBeingDragged设为true,说明ViewPager要消费这个事件,最终拖动逻辑在onTouchEvent...4.1 populate 这个方法有点长,这里不贴代码,其作用主要是,根据当前的item位置,把当前要显示的item填充到屏幕上,对于已经不需要显示的item,会调用adapter.destroyItem

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

    自定义无限循环ViewPager(二)――ViewPager滑动原理解析

    自定义无限循环ViewPager分成以下三篇文章进行讲解: ViewPager初始化源码解析 ViewPager滑动原理解析 ViewPager方法改造实现无限循环 在前面一篇文章中,已经分析了ViewPager...拦截 if (mIsBeingDragged) { return true; } //不允许拖拽,不拦截...Math.abs(y - mInitialMotionY); //判断当前显示的子view是否可以滑动,如果可以滑动,交给子view处理,不拦截...= 0) { // 不立即处理边缘触摸事件 return false; } if (mAdapter == null ||...Scroller达到目的,当然最后也调用了pageScrolled()进行接口的回调等操作,在滑动结束的最后,调用completeScroll(boolean postEvents)完成滑动结束后的相关清理工作

    2.8K10

    ViewPager,ScrollView 嵌套ViewPager滑动冲突解决

    我的公众号程序员徐公,四年中大厂工作经验,回复黑马,领取 Android 学习视频一份,回复徐公 666,可以获得我精心整理的简历,带你走近大厂。...这篇博客主要讲解一下几个问题 粗略地介绍一下View的事件分发机制 解决事件滑动冲突的思路及方法 ScrollView 里面嵌套ViewPager导致的滑动冲突 ViewPager里面嵌套ViewPager...onTouchEvent 这个方法主要是用来处理事件的 requestDisallowInterceptTouchEvent(true),这个方法能够影响父View是否拦截事件,true 表示父 View 不拦截事件...导致的滑动冲突 外部解决法 如上面所述,从 父View ScrollView着手,重写 OnInterceptTouchEvent方法,在上下滑动的时候拦截事件,在左右滑动的时候不拦截事件,返回 false...,这样确保子View 的dispatchTouchEvent方法会被调用,代码 如下 /** * @ explain:这个ScrlloView不拦截水平滑动事件, * 是用来解决 ScrollView

    1.1K10

    炫酷ViewPager指示器效果(全面解析)

    本文以尽可能通俗的语言,让大家理解整个的绘制过程,尽量不粘贴代码(因为我认为思路往往比代码更重要)。还有就是可能对数学无感的人和不太友好。 这篇文章你将会学到什么?...布局分析 界面由 ViewPager + 自定义指示器 ViewPager的间隔效果....小球能够和ViewPager联动不断变化 ViewPager效果实现 我们看到上面的是一个可以滑动的ViewPager,但是默认的ViewPager是一页只能显示一个Item的,因此经过多方查找,我找到了以下方法可以实现这个效果...ViewPager的代码设置 ? 设置viewpager缓存页数,因为默认ViewPager只加载一页,因此这里设置成三个,让其全部加载。...下面我们来一步一步来进行Beizer的绘制工作 Beizer知识讲解 在开始画之前我们先来看一下这个Beizer的相关api,关于Bezier的数学原理在这里不会详细阐述(网络上有大量的说明,如果有兴趣可以自行查阅

    1.7K10

    Android开发笔记(一百三十九)可定制可滑动的标签栏

    既然使用ViewPager做为标签内容页的载体,那么主页面的布局文件就把FrameLayout节点换成android.support.v4.view.ViewPager,具体布局如下所示: ViewPager和FragmentTabHost也不例外,问题出在主页面的下面这行代码: mTabHost.setup(this, getSupportFragmentManager...所以,像弹出对话框这种事务,必须控制只有ViewPager才能做;除此之外,倘若Fragment要执行分线程操作、后台服务等等额外工作,好比织毛衣缝被子什么的,那原配最好也不要做了,一律由ViewPager...因此,Fragment内部需要区分自己是FragmentTabHost的原配,还是ViewPager派来的,只有ViewPager来源的才允许做事情。...修改后的Fragment代码如下所示,现在标签页面的对话框可以正常工作了吧: public class TabFirstFragment extends Fragment { protected View

    2.1K20

    打造一个灵活易用的Banner组件

    我想要的组件希望能做到以下几点: 轮播图每页的UI可以定制同时保持较小的工作量 指示器的位置、大小、背景、字体颜色、字体大小等等都可以定制 一些特殊情况,比如下图这样的可以灵活优雅地实现。...这种情况需要将ViewPager的父布局设置为android:clipChildren="false" android:layerType="software",然后设置ViewPager的PageMargin...mHandler.sendEmptyMessageDelayed(MSG_AUTO_TURNING, turningDuration); } } }; 没有数据、只有一个页面或者用户不希望自行翻页时候呢...方法校正 由于循环的实现方式,会导致ViewPager本身的一些方法都不能正常工作了,主要是一些和position相关的地方,需要修正。...我们知道给ViewPager设置了PageTransformer之后,滑动时候会回调transformPage( View page, float position)方法。

    1.2K50

    Android性能优化:这些绘制优化你一定不能忽略!

    ListView 与 Item 列表页(ListView) 与 其内子控件(Item)的背景相同 = 白色,故可移除子控件(Item)布局中的背景 [1639288442676285.jpg] 场景2:ViewPager...与 Fragment 对于1个ViewPager + 多个 Fragment 组成的首页界面,若每个 Fragment 都设有背景色,即 ViewPager 则无必要设置,可移除 [1639288442268923...通过clipRect()设置原主布局的显示范围 = 裁剪区域,使其仅在上图中的红框区域(即不阻碍抽屉布局的区域)显示 // 从而避免过度绘制 canvas.clipRect(clipLeft...从而帮助开发者更直观地分析系统瓶颈,改进性能 检测范围包括:Android 关键子系统(如WindowManagerService 等 Framework 部分关键模块)、服务、View系统 功能包括:跟踪系统的I/O 操作、内核工作队列

    1.4K20

    Android MVVM框架搭建(四)RecyclerVIew + ViewPager2 + BaseQuickAdapter

    热门壁纸数据处理 八、ViewPager2显示数据 1. 布局使用ViewPager2 2. BaseQuickAdapter使用 3. PictureRepository 4....下面我们写一个列表适配器的item布局,在layout下新建一个item_wall_paper.xml文件,里面的代码我们先不写,先去写一个样式,在themes.xml文件中(老版本的AS中是styles.xml...八、ViewPager2显示数据   当点击某一个图片的时候,将值传到详情页面去,然后在这个页面可以左右滑动去查看图片,这无疑是比看一个点一个要好一些,可以利用ViewPager2来解决。 1....,相比于ViewPager来说,这个会更强大。...显示数据   前面的准备工作都已经做完了,下面进入到PictureViewActivity中去处理View的显示,创建变量,代码如下: private PictureViewModel viewModel

    2.7K20

    Android性能优化:手把手带你全面了解绘制优化

    控件中不必要的背景 如2个常见场景: 场景1:ListView 与 Item 列表页(ListView) 与 其内子控件(Item)的背景相同 = 白色,故可移除子控件(Item)布局中的背景 场景2:ViewPager...与 Fragment 对于1个ViewPager + 多个 Fragment 组成的首页界面,若每个 Fragment 都设有背景色,即 ViewPager 则无必要设置,可移除 关于更多场景,...通过clipRect()设置原主布局的显示范围 = 裁剪区域,使其仅在上图中的红框区域(即不阻碍抽屉布局的区域)显示 // 从而避免过度绘制 canvas.clipRect...从而帮助开发者更直观地分析系统瓶颈,改进性能 检测范围包括:Android 关键子系统(如WindowManagerService 等 Framework 部分关键模块)、服务、View系统 功能包括:跟踪系统的I/O 操作、内核工作队列

    1.2K20

    Android MVVM框架搭建(四)RecyclerVIew + ViewPager2 + BaseQuickAdapter

    热门壁纸数据处理 八、ViewPager2显示数据 1. 布局使用ViewPager2 2. BaseQuickAdapter使用 3. PictureRepository 4....下面我们写一个列表适配器的item布局,在layout下新建一个item_wall_paper.xml文件,里面的代码我们先不写,先去写一个样式,在themes.xml文件中(老版本的AS中是styles.xml...八、ViewPager2显示数据   当点击某一个图片的时候,将值传到详情页面去,然后在这个页面可以左右滑动去查看图片,这无疑是比看一个点一个要好一些,可以利用ViewPager2来解决。 1....,相比于ViewPager来说,这个会更强大。...显示数据   前面的准备工作都已经做完了,下面进入到PictureViewActivity中去处理View的显示,创建变量,代码如下: private PictureViewModel viewModel

    3.2K10

    Android开发3年,九月份面试12家大厂跳槽成功,我有一些面试经验想分享给你们

    ViewPager切换Fragment什么最耗时? 线程间同步的方法 锁之间的区别 B站三面 介绍一下你自已和项目 说说为什么考虑离职 说说对你们原来公司的印象 为什么想来B站?...热修复的原理,资源的热修复的原理,会不会有资源冲突的问题 ViewPager中嵌套ViewPager怎么处理滑动冲突 android源码中有哪些设计模式 说说binder机制的原理 腾讯二面 为什么考虑换一份工作...网易云音乐 ViewPager2原理 LifeCycle的原理是怎样的?...说说事件分发机制,怎么写一个不能滑动的ViewPager 说说你对类加载机制的了解?...阿里编程规范不建议使用线程池,为什么? 四种线程池原理? 了解哪些算法? IdleHandler用过吗?

    2.2K10
    领券