viewpager

【RecyclerView优化】

不想你离开。 提交于 2021-02-17 16:22:46
1.局部刷新 ( 1)避免整个列表的数据更新 ,只更新受影响的布局。例如,加载更多时,不使用 notifyDataSetChanged() ,而是使用 notifyItemRangeInserted(rangeStart, rangeEnd) 补充:recyclerView.adapter的刷新: 刷新全部可见的item,notifyDataSetChanged() 刷新指定item,notifyItemChanged(int) position数据发生了改变,那调用这个方法,就会回调对应position的onBindViewHolder()方法了,当然,因为ViewHolder是复用的,所以如果position在当前屏幕以外,也就不会回调了,因为没有意义,下次position滚动会当前屏幕以内的时候同样会调用onBindViewHolder()方法刷新数据了。其他的方法也是同样的道理。 从指定位置开始刷新指定个item,notifyItemRangeChanged(int,int) 顾名思义,可以刷新从positionStart开始itemCount数量的item了(这里的刷新指回调onBindViewHolder()方法)。 插入、移动一个并自动刷新,notifyItemInserted(int)、notifyItemMoved(int)、notifyItemRemoved

Android开发:这可能是ViewPager2滑动冲突最全的处理方案,内外兼修,解决冲突!

99封情书 提交于 2021-01-30 00:51:12
背景 自去年12月份ViewPager2正式版发布以后,ViewPager2已经逐渐开始替代旧版本的ViewPager。许多开发者也已经在项目中使用了ViewPager2。相比ViewPager,ViewPager2的功能不可谓不强大。 我在之前写过的一篇文章 学不动也要学!深入了解ViewPager2 : https://zhpanvip.gitee.io/2019/12/14/24.Know%20about%20ViewPager2/ 对ViewPager2的使用做过详细的讲解。但是,由于当时没有太多实战,所以并没有发现ViewPager2的嵌套使用存在严重的滑动冲突。 直到今年三月份用ViewPager2重构BannerViewPager的时候才发现这个问题。因此,在BVP 3.0版本中额外对ViewPager2做了滑动冲突处理,效果还算差强人意。另外,曾在论坛上看到过不少ViewPager2滑动冲突的求助帖子,甚至还有同学因为搜索ViewPager2滑动冲突而找到了BannerViewPager的Github主页。既然如此,不如写篇文章将BVP处理滑动冲突的经验分享给大家,没准还能涨知 (fěn) 识 (sī),嘿嘿嘿。 为什么ViewPager没有冲突 不知道你是否有这个疑问,在ViewPager时代,ViewPager嵌套ViewPager并没有出现过滑动冲突

刷了无数大厂Android研发岗面试题,其实考的无非是这 3 点能力

跟風遠走 提交于 2021-01-12 20:01:02
前言 发现一个有趣的现象,似乎程序员们对面试题总是抱有热情,多看几道面试题,自己的面试能力就可以提高一点。 作为一个研发工程师,看过很多公司的面试题,也参与过很多公司的面试,发现大厂的面试题更加具有代表性,虽然现在很多大厂的面试官也懒得自己出题了,不过经验老到的他们还是更清楚如何高效率地考察面试者。 而小公司的面试题往往五花八门,有的更加贴近公司自身业务,希望面试者结合业务给出解决方案,有的干脆直接从书本上找题目,考察一些死记硬背的概念,当然,有的初创公司逼格很高,则会搞一些高难度的面试题,角度刁钻,常常让面试者猝不及防。 既然大公司的面试题具有共性,那么我们也不妨来尝试探讨一下,大厂面试题到底考察面试者哪些方面的能力。 一、基础知识 基础知识无疑是大厂面试官最喜欢考察的东西了。如果面试者的基础都不扎实,那么建立于基础知识之上的实战能力、业务能力都是空中楼阁。 说到基础知识,首当其冲的就是岗位要求的能力了,对于Android工程师来说,你需要熟悉的知识点有:Java基础、Android相关的知识点。 其中Android相关知识点又包含:Activity、BroadcastReceiver、ContentProvider、Service、Handler、AsyncTask、Fragment、ListView等等.......在这里就不一一阐述了。 作为一个程序员

这交互炸了:饿了么是怎么让Image变成详情页的

社会主义新天地 提交于 2020-12-29 14:03:04
本文由旋转跳跃就团灭的wing投稿。 旋转跳跃就团灭的wing的博客地址: http://blog.csdn.net/wingichoy 昨天有个大喜事,我觉得大家都知道了吧~~不知道的输入下面这个网址就懂了: https://developers.google.cn/ 晚上叫外卖,打开饿了么,发现推了一个版本,更新以后,点开了个鸡腿,哇,交互炫炸了。 不过还是有槽点。我是无意中才发现可以左右滑动的。这。。。你不告诉我,我怎么知道左右可以滑。 https://github.com/githubwing/ZoomHeader 直接上图啊: 挺有意思的,对吧? 所以我就想模仿一下。下面是我做出来的效果: 额。。不过图片不是长条的哈。大概意思一样就行了。接下来将和大家分享这个效果是如何实现的。讲思路以及遇到的问题。但是不会讨论细节,具体的细节请看源码。 他是一个Activity还是两个? 相信你肯定有这样的疑问,答案是一个。 你看到的中间imageview是viewpager。在Viewpager上面是一个透明的View。当然,这个Activity的背景也是透明的。 1 实现思路 我使用CoordinatorLayout+Behavior实现的。说实话,Behavior真心强大。。 viewpager+头部 整个实现的思路是这样的。整体布局从上到下依次是: 透明View

android 使用图片轮播图---banner 使用

不羁岁月 提交于 2020-12-28 10:16:09
转自:https://github.com/youth5201314/banner 使用步骤 Step 1.依赖banner Gradle dependencies{ compile ' com.youth.banner:banner:1.4.10 ' // 最新版本2018-10-19写的 } Step 2.添加权限到你的 AndroidManifest.xml <!--网络上加载图片 --> <uses-permission android:name= " android.permission.INTERNET " /> <!-- 从网络或者文件上加载图片 --> <uses-permission android:name= " android.permission.READ_EXTERNAL_STORAGE " /> Step 3.在布局文件中添加Banner,可以设置自定义属性 !!!此步骤可以省略,直接在Activity或者Fragment中new Banner(); < com.youth.banner.Banner xmlns:app = " http://schemas.android.com/apk/res-auto " android:id = " @+id/banner " android:layout_width = " match_parent "

一个很Nice的Android Banner轮播图库

旧时模样 提交于 2020-12-28 09:43:24
Android小白一枚,最近项目中有一个轮播图的需求,网上搜了很多资料,也看了多开源库,但不是bug多就是库不维护。后来在GitHub上找到一个很棒的轮播图– BannerViewPager 库推荐个大家。 它的使用方法很简单,也是我看过其他库里边使用最简单的一个。 1.gradle中添加依赖 在项目的root build.gradle中添加如下配置,这个配置是需要添加到项目根目录下的gradel文件中的。 allprojects { repositories { . . . maven { url 'https://www.jitpack.io' } } } 然后在项目app目录下的gradle中添加BannerViewPager的依赖: implementation 'com.github.zhpanvip:BannerViewPager:3.4.0' 然后在Activity的布局文件中添加BannerViewPager: < com.zhpan.bannerview.BannerViewPager android: id = " @+id/banner_view " android: layout_width = " match_parent " android: layout_margin = " 10dp " android: layout_height = "

Android事件分发机制面试题

让人想犯罪 __ 提交于 2020-12-12 02:19:31
总结 1. 为什么会有事件分发机制 安卓上面的View是树形结构的,View可能会重叠在一起,当点击的地方有多个View可以响应的时候,这个点击事件应该给谁呢?为了解决这个问题,就有了事件分发机制。 PhoneWindow:是抽象类Window的实现类,抽象类Window是所有视图最顶层的容器,包括View视图的外观和行为都归Window管。 DecorView:PhoneWindow的内部类,通过DecorView传递信息给下面的View,下面的View也通过DecorView返回消息给PhoneWindow。 2. 事件分发的三个主要对象:Activiy、ViewGroup、view 布局加载过程 用户执行Activity的setContentView方法,内部是PhoneWindow的setContentView方法,在PhoneWindow中完成DecorView的创建,PhoneWindow是window的实现类. DecorView是Activity的根View,也是PhotoWindow的内部类,并且继承了Framlayout. DecorView将屏幕氛围2个部分:titleView和contentView,我们平常加载的布局就是ContentView. 3. 三个重要方法: viewgroup 拥有这三个方法 acitivity和view没有拦截方法

第二个android小项目-模仿百度网盘实现一些功能

ⅰ亾dé卋堺 提交于 2020-11-28 13:53:41
写这个项目是为了继续打打android的基础,另外还了解到了一些新方法和小技巧所以想来用用练练手,比如调用百度api来访问个人百度网盘中的头像名称项目文件等等,继续深入还可以在App中修改个人百度网盘中的文件。 话不多说直接开始项目所需要用到的图片资源 点这里 https://github.com/JackySei/baiduimg.git 结构是 首先是登录界面 只是主观简单的模仿了一下,可能有点丑。 activity_main < ? xml version = "1.0" encoding = "utf-8" ? > < androidx . constraintlayout . widget . ConstraintLayout xmlns : android = "http://schemas.android.com/apk/res/android" xmlns : app = "http://schemas.android.com/apk/res-auto" xmlns : tools = "http://schemas.android.com/tools" android : layout_width = "match_parent" android : layout_height = "match_parent" tools : context = "

Android自定义顶部栏及侧滑菜单和fragment+viewpag滑动切换的实现

橙三吉。 提交于 2020-11-24 06:24:58
嘿嘿嘿,关于android滑动的操作,是不是经常都会用到呢。 我肯定也要学习一下啦。 https://blog.csdn.net/u013184970/article/details/82882107 https://blog.csdn.net/qq_35820350/article/details/82460376 在网上学习了一下,这两篇文章写的不错。 来看一下效果 共有4各部分 1.自定义顶部栏 2.侧滑菜单 3.弹出菜单 4.标签滑动切换 进入具体实现环节啦 先引入v4包和图片加载包 compile 'com.android.support:design:26.1.0' // 图片加载 implementation 'com.github.bumptech.glide:glide:4.2.0' 第一 、自定义顶部栏 1.先要将主题设置为NoActionBar 2.屁颠屁颠去写布局咯 三部分构成:左边按钮,中间标题,右边按钮 res/layout/layout_top_title.xml < RelativeLayout xmlns:android ="http://schemas.android.com/apk/res/android" android:layout_width ="match_parent" android:layout_height ="50dp"

autojs 宇博脚本源码

不羁的心 提交于 2020-11-19 21:26:50
"ui"; var myApp ={}; myApp.isRun = false; myApp.homeActivity = "io.dcloud.PandoraEntryActivity"; myApp.appName = "宇博聚流"; myApp.dyAppPackage = "com.ss.android.ugc.aweme"; myApp.wxHomeActivty = "com.tencent.mm.ui.LauncherUI"; myApp.startXXTime = 0; myApp.endXXTime = 0; myApp.taskMinTime = 2;//可接的最少结束任务分钟 myApp.taskEarlyEnd = 2;//默认两分钟 myApp.dzX = device.width-50; myApp.dzY = device.height/2-50; myApp.xqTPX = 200; myApp.xqTPY = 350; //tabs 数据 var tabs_data = { //tabs 背景 bg: "#ffffff", selectColor: { //当前页面选中颜色 on: "#00ffff", //当前页面未选中颜色 off: "#999999" }, //图标大小 srcSize: 18, //字体大小 textSize: 12, /