viewpager

嵌套滑动通用解决方案--NestedScrollingParent2

隐身守侯 提交于 2020-04-08 17:48:26
文章目录 一、问题及解决方案 二、NestedScrollingParent2LayoutImpl3的实现原理 2.1 先来回顾下嵌套滑动机制。 2.2 再来看看NestedScrollView嵌套RecyclerView 2.3 NestedScrollingParent2LayoutImpl3的实现原理 之前写过一篇 嵌套滑动–NestedScroll-项目实例(淘宝首页缺陷),及CoordinatorLayout 和 AppbarLayout 联动原理 ,比较了淘宝和京东首页的滑动效果,分析了效果呈现差别的原因,给出了大致的解决方案。 当时没有给出demo,只有代码片段,可能导致阅读起来不很清晰,所以这篇就专门再来详细分析相关知识,给出通用的 嵌套滑动 的解决方案,且附上GitHub的Demo。 本文相关代码 Demo Github地址 ,有帮助的话Star一波吧。 一、问题及解决方案 先来看一张图: 这是京东的首页,忽略顶部和顶部,大致理解视图结构就是: 最外层为多布局的RecyclerView,最后一个item是tabLayout+ViewPager,ViewPager的每个fragment内也是RecyclerView。这是电商App首页常用的布局方式。 再来看下滑动起来的效果图: 可见,在向上滑动页面时,当tabLayout滑动到顶部时

Java 反射理解以及Android实战

倾然丶 夕夏残阳落幕 提交于 2020-04-07 13:39:11
学会使用 Java 的反射机制,能够让你在实际工作中,如虎添翼。 一 什么是反射 反射指支持程序在运行状态时,都能够获取该类的内部信息,包裹其中的方法,变量等信息,并可于运行时改变方法或者其内部变量。 简单来说,如果某个系统源码中某个类,比如 Recyclerview 的 mFirst 变量,我想动态改变这个值,就可以使用 反射获取到这个值,并改变它。 java 反射的几个主要的类如下: 类名 用途 Class类 编译后的Class对象 Constructor类 类的构造方法 Field类 类的成员变量 Method 类的方法成员 Annotaion 类的注解 在上面的几个类中,比如 Field 类,都有两种重用格式: getField : 表示获取某个共有对象 getDeclaredField:表示获取所有对象,包括 private 方法 对其他类的也使用。 带有Declared修饰的方法可以反射到私有的方法,没有Declared修饰的只能用来反射公有的方法。 二、实例 接着,咱们测试一个简单例子,再讲一些 Android 常常用的几个方法。下面一个简单类,要求动态改变数值。 首先写一个简单的 Bean: public class PersonBean { private int age; public PersonBean(int age) { this.age = age;

Android知识体系总结2020之Android部分Fragment篇

与世无争的帅哥 提交于 2020-04-06 18:39:52
初级~中级 1.Fragment为什么会被称为第五大组件?   Android中的4大组件为:Activity,Broadcast,Service,ContentProvider,那么为什么Fragment可以称之为第5大组件呢?你可以这么回答:   因为Fragment有生命周期,使用频率不输于4大组件,可灵活加载到Activity中。 2.Fragment的生命周期 2.1 简单情形下   Fragment的生命周期面试的时候概率还是蛮大的,不过问的时候并不是单纯说整个生命周期的回调函数等等,而是问些特殊情况下的Fragment的生命周期情况,为的是检验你的开发经验,不过不用方,看看笔者推荐的一个链接,你会搞懂各种情况下的Fragment的生命周期,这样面试就不用担心这种问题了:    http://blog.csdn.net/MeloDev/article/details/53406019#comments Fragment 界面打开 onCreate() 方法执行! onCreateView() 方法执行! onActivityCreated() 方法执行! onStart() 方法执行! onResume() 方法执行! 按下主屏幕键/锁屏 onPause() 方法执行! onStop() 方法执行! 重新打开 onStart() 方法执行! onResume()

仿抖音上下滑动分页视频

我的未来我决定 提交于 2020-03-30 05:55:37
目录介绍 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

ViewPager嵌套ViewPager 滑动冲突

杀马特。学长 韩版系。学妹 提交于 2020-03-26 05:20:49
我在网上找了许多解决方法。但都不是很完美。 当进入子viewpager确实解决了子viewpager的滑动,但是父viewpager就失效了。现在奉上修改过的代码给大家。 //别忘了布局引用也要变 /** * <com.jing.meknow.ChildViewPager * android:id="@+id/iask_main_view_pager" * android:layout_width="match_parent" * android:layout_height="0px" * android:layout_weight="1" * > * </com.jing.meknow.ChildViewPager> */ package com.jing.meknow; import android.content.Context; import android.graphics.PointF; import android.support.v4.view.ViewPager; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; public class ChildViewPager extends ViewPager { public

我是如何在5 天内,完成 60 个类的核心模块的重构

谁都会走 提交于 2020-03-24 00:24:25
3 月,跳不动了?>>> 代码是如何越写越烂的? 你是否经常听同事自嘲,“开始还想好好写,不知怎滴,后面越写越烂”? 代码越写越烂,果真是个没有端倪、无法干预的魔咒玄学吗? 让我们来快速浏览一下 重构前 项目里的代码是怎么写的。 protected void initView() { PagerAdapter pagerAdapter = new PagerAdapter(); viewPagerFix.setOffscreenPageLimit(4); viewPagerFix.setAdapter(pagerAdapter); mFragmentBinding.tabLayout.setTabData(pagerAdapter.titles); mFragmentBinding.tabLayout.setOnTabSelectListener(new OnTabSelectListener() { @Override public void onTabSelect(int position) { viewPagerFix.setCurrentItem(position); } @Override public void onTabReselect(int position) { } }); viewPagerFix.addOnPageChangeListener(new

Android开发之TabLayout使用

戏子无情 提交于 2020-03-23 11:33:43
3 月,跳不动了?>>> 1,在app的build.gradle引入: implementation 'com.android.support:design:28.0.0' 2,在布局文件中添加 <com.google.android.material.tabs.TabLayout android:layout_width="match_parent" android:layout_height="wrap_content" app:tabMode="scrollable"/> 其中tabMode分scrollable和fixed,可滑动和填充。 3,添加Tab:mTabLayout.addTab(mTabLayout.newTab().setText("tab")) ; 以上界面即可显示出数据 和ViewPager搭配:mTabLayout.setupWithViewPager(viewPager); 此时 Tab 的文字会和 viewPager 的 Adapter 做关联,需要在 Adapter 里重写 getPageTitle 方法 @Nullable @Override public CharSequence getPageTitle(int position) { return "123"; } 设置tab字体颜色: tab_news.setTabTextColors

Android CoordinatorLayout + AppBarLayout(向上滚动隐藏指定的View)

ⅰ亾dé卋堺 提交于 2020-03-22 03:58:51
在新的Android Support Library里面,新增了CoordinatorLayout, AppBarLayout等. 实现的效果: 向下滚动RecylerView,Tab会被隐藏,向上滚动RecylerView,Tab恢复出现. 这么做的好处在于,用户能有更多的空间位置去看列表里面的内容. 实现步骤: <?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation=

ViewPager总结

混江龙づ霸主 提交于 2020-03-21 16:16:10
https://github.com/youth5201314/banner compile 'com.youth.banner:banner:1.4.9' private void setBanner() { if (banner == null) return; //设置banner样式 banner.setBannerStyle(BannerConfig.CIRCLE_INDICATOR); //设置图片加载器 banner.setImageLoader(new GlideImageLoader()); //设置图片集合 banner.setImages(images); //设置banner动画效果 banner.setBannerAnimation(Transformer.DepthPage); //设置标题集合(当banner样式有显示title时) // banner.setBannerTitles(titles); //设置自动轮播,默认为true banner.isAutoPlay(true); //设置轮播时间 banner.setDelayTime(5000); //设置指示器位置(当banner模式中有指示器时) banner.setIndicatorGravity(BannerConfig.CENTER); //banner设置方法全部调用完毕时最后调用

android 轮播图

点点圈 提交于 2020-03-21 16:15:48
轮播图是很常用的一个效果 核心功能已经实现 没有什么特殊需求 自己没事研究的 所以封装的不太好 一些地方还比较糙 为想要研究轮播图的同学提供个参考 目前测试图片为mipmap中的图片 没有写从网络加载图片 可自行根据需求在getShowView()方法中修改 1.定时切换 通过handle延时发送通知改变界面 然后在切换viewpage的界面之后 再次发送此延时通知 就ok咯 还可以通过timer定时器实现 2.无限轮播效果 如果我们只是在自动轮播到最后一页 然后进行判断让切换到第一页 这样是可以实现轮播的效果 但是 有两个问题 切换从最后一页切换到第一页的时候有一个很明显的回滚效果 不是我们想要的 当我们手动滑动的时候 在第一页和最后一页的时候 无法继续左右滑动 因为已经没有下一页了 先看张图(偷来的) 不得不说这位兄弟的图p的很形象 简直完美 虽然看到的是三张图 实际上是五张 数据多的时候也按照这种方式添加数据 当view4的时候自动切换到view5时 进行判断让到切换到view2 这样造成的感觉就是最后一张下来是第一张 我们利用viewpage自带的方法切换界面立即切换没有滚动效果 当图片一样的时候是看不出图片变化的 setCurrentItem(int item, boolean smoothScroll) 第二个参数设置false 界面切换的时候无滚动效果 默认true