Android
文章平均质量分 80
夜尽天明89
Android开发工程师
展开
-
界面中局部(部分)区域嵌套滑动
界面中,部分区域(局部)可以滑动,滑动到一定程度后,该区域内的子布局可以继续滑动原创 2022-08-23 14:03:00 · 655 阅读 · 1 评论 -
Android权限相关(检查、申请、回调)
最近要整理个老项目,权限那块需要改,就回顾了下权限相关的,在此整理下。这里用到的是 permissionsdispatcher下面是简单的使用,详细的去看1、先检查下 build.gradle 中是否有apply plugin: "kotlin-kapt"这句话,没有的话再顶部加上;2、添加依赖implementation "org.permissionsdispatcher:permissionsdispatcher:4.5.0"kapt "org.permissionsdispatch原创 2022-02-14 10:28:37 · 2932 阅读 · 0 评论 -
自定义圆环(扇形)绘制
这个圆环是静态的,没有自动增加的动画绘制并不复杂,有些细节点容易搞错,这里写出来,算是做个笔记。先放出源码,细节点,后面会说明。建议看后面的说明。最后,会进行扩展,绘制扇形需求/功能说明:1、假设一个班级里有 X 个人,班级里的学习有的篮球、有的足球、有的书法、有的绘画,还有的,什么都没学2、圆环绘制的起点,是圆环顶部,逆时针依次绘制效果图:代码:import android.content.Contextimport android.graphics.Canvasimport an原创 2021-04-28 11:37:51 · 1628 阅读 · 0 评论 -
网络框架封装(retrofit2+rxjava2+okhttp3)
项目地址后面的 项目说明 ,请仔细看。如果自己的项目有需要扩展的,也好知道去哪里改写在前面:项目中隐去了所有接口、有效参数,如果要验证,请自己找合适的接口验证改封装支持的功能有:1、接口请求;2、addHeader相关;3、请求接口的参数获取(并排序),便于处理(如:加密,和后台校验)4、接口相关日志打印为了方便使用,直接写成 library ,复制拿走就行引用 library ,注意2个地方:1、app中的gradle,dependencies 中添加//netlib 是我网络封装的原创 2021-04-07 21:03:50 · 672 阅读 · 1 评论 -
handler笔记(sendXX、postXX、延迟处理)
关于handler的post、延迟消息这2个点有点忘记了。这两天重看了下handler源码,学习笔记总结下之前写过一篇,handler源码分析这里只说下架 post、延迟消息。测试代码很简单:(Kotlin) private var mHandler = object : Handler() { override fun handleMessage(msg: Message?) { super.handleMessage(msg)原创 2021-04-06 10:41:49 · 480 阅读 · 0 评论 -
基于属性动画,实现 咔嚓截屏(收藏)动画
写在前面:这里的截屏,其实不是真正意义上的截屏。而是把数据先设置到一些控件上,让控件做透明度、缩小、位移等动画。只是看起来像截屏。为了方便描述,下面还是采用截屏这种说法。需求:做一个咔嚓截屏收藏功能。点击“按钮”后,把屏幕截屏,然后把截下来的内容,做缩小、透明度、位移等动画,飞到按钮上。因为代码简单,就没放到GitHub上,直接全部放出来了。复制了就能用。代码中已经有一些注释了,但是有一些地方因为简单的文字描述不清除,需要在博客中详细说。先来2张简单的效果图注意最后的说明。注意最后的说明。原创 2021-02-01 21:16:07 · 537 阅读 · 2 评论 -
利用MediaPlayer实现在线音频的播放(支持进度条拖动、快进、快退)
效果图:GitHub地址https://github.com/chenjianqiang1016/MyAudioDemo写在前面:本项目的缺点是 没有对网络情况进行处理我找了一首4分40秒的歌曲(4.5M),打开界面后,大约停留1-2秒,就开始播放了,然后我中断网络,发现可以顺利播放到结尾。说明在网络良好的情况下,问题不大。当然,这是理想状态,如果开头网络不好、网卡、网慢、播放到中间断网了、断网后又重连了。。。这些情况,本项目都没做处理。如果是播放本地文件,网络情况就无所谓了说明:(代码中可能原创 2020-10-22 16:57:05 · 2588 阅读 · 0 评论 -
安卓加载展示PDF文件(腾讯X5内核(TbsReaderView)+PDFView)
最近项目要求加载、展示PDF文件,因为之前项目中已经有X5浏览器了,用X5内核加载PDF文件也简单,就很快写完。但是没想到,测试出来几个坑。这里总结整理下。PDFView 的GitHub 地址https://github.com/barteksc/AndroidPdfViewerX5内核(TbsReaderView)+PDFView 实现PDF的加载,已经成功,并应用到项目中了我的测试用PDF文件,找了3个:几百K、几兆、18M全部源代码我会放在后面(关于项目包名的,我都去掉了,复制的时候,用原创 2020-10-22 11:04:38 · 8142 阅读 · 6 评论 -
安卓 复制文字 及从 剪贴(切)板 获取内容
最近有个需求,进入某个界面后,要监听 剪贴(切)板 中是否有文字,有的话,拿到,分析是否是需要的,然后进行对应的处理。功能看着简单,但是 因为手机系统原因,踩了个坑,这里记录下。先来个复制文字功能代码,很简单,不多说了导包import android.content.ClipboardManager代码val clipboardManager =context.getSystemService(Context.CLIPBOARD_SERVICE) as? ClipboardManagerv原创 2020-09-09 14:35:58 · 1157 阅读 · 1 评论 -
GradientDrawable的使用,和简单源码分析
gradient:英 [ˈgreidjənt] 美 [ˈgredɪənt] 倾斜度,坡度,变化率从字面意思理解,是一个可以变化颜色、有渐变效果的DrawableGradientDrawable extends Drawable来个效果图和对应的代码。并不复杂对应代码(布局我就不写了,没有任何特别的) //圆角矩形。TextView rounded_rectangle.apply { var gradientDrawable: GradientDra原创 2020-07-27 18:25:05 · 660 阅读 · 0 评论 -
HashMap知识(源码)
hashMap普通功能使用并不复杂,如:(Kotlin写法)var hMap: HashMap<Int?, String> = hashMapOf()hMap.put(1, "a")//或 hMap[1] = "a"HashMap存储数据是非有序的,且是非线程安全的。如果需要线程安全,去看下ConcurrentHashMapHashMap的底层是 数组+链表+红黑树(JDK1.8 增加了红黑树部分)。HashMap增删改查等常规操作,都有不错的执行效率,是ArrayList和Link原创 2020-06-23 19:09:03 · 159 阅读 · 0 评论 -
Activity生命周期,学习笔记(踩过的坑)
关于Activity的生命周期问题,已经是很常见、很简单的问题了,但是偶尔还是会踩坑。这里,做个总结、笔记1、一个APP启动,启动后退到后台(home键),然后重新打开界面。这个过程是生命周期变化是什么?这个问题非常简单了APP启动onCreateonStartonResume退到后台onPauseonStop重新打开onRestartonStartonResume2、两个界面的跳转呢?第一个界面,跳转第二个界面startActivityForResult,然后关闭第二个原创 2020-06-17 16:24:17 · 220 阅读 · 0 评论 -
按下按钮后做扩大(扩散)动画
需求:1、录音按钮,按住后,做扩散动画,显示:录音中;2、默认状态,显示:按住录音;3、松手后,控件做反向收缩动画UI规定:1、默认,按钮有个背景色(纯色),尺寸为:116 * 40;2、按住后控件扩散,扩散过程中,出现一条描边,扩散到最远处,且,背景色变成透明;3、控件扩散后,最大尺寸为124 * 44;4、动效时长250毫秒;5、松手后,控件做收缩动画,效果与上面相反效果图示例(静态图):分析:1、尺寸分析:扩散前后对比:124/116= 1.0689… ;44/40 =原创 2020-06-13 11:22:29 · 1082 阅读 · 0 评论 -
ViewPager+Fragment,一屏展示多个Fragment,中间正常,两边漏一点
功能需求:1、有多个布局,要求滑动展示,中间大,两边小,两边小的布局,大部分在屏幕外,屏幕里面,漏出来一点,让用户知道可以滑动;2、这多个布局,内容有差异,甚至,可能有较大差异;3、在边缘处,也可以滑动。类似画廊效果,其实网上有对应的,但是,细节地方,有些博客写的不全,我刚开始写,对着一两个博客写,总是出现奇怪的问题,或者没有效果。对比了不同的博客,才出来效果。为此,我写个博客,干脆把所有...原创 2019-12-25 16:47:03 · 1675 阅读 · 0 评论 -
自定义滑动控件(SwitchView),同时解决和ScrollView的冲突
网上搜 滑动控件(SwitchView),很多。本来也没什么写的,但是根据新项目需求,和事件界面调试,还是发现了很多问题。把网上的项目改来改去,麻烦。就自己写了。简单的效果图根据本次实际功能和自己调试过程中发现的问题,针对 switchView,总结了以下需要具备的功能。1、可以滑动。以中心为界限,当滑过中点,就变换颜色。如:当前是开启状态,当小圆滑过中点,背景就变成关闭时候的颜色。抬起手...原创 2019-12-19 15:58:25 · 676 阅读 · 0 评论 -
简单的可滑动、点击的次数选择器(类似卡尺)
需求:1、样式类似下图2、可以滑动,滑动过程中,圆点顶部的数字随之变动;3、可点击,点击后,个数变动1。如:当前指示的数字为:2。点击2左边的区域,则指示数字变为1(即使点击了0的位置)4、次数为:0、1、2、3。其中,0表示关闭项目地址项目缺点:因为需求简单的原因,我这里只需要 0、1、2、3 这4个点。所以,在代码中,计算点的位置、计算 点上面要显示的文字 的算法,都很简单。没...原创 2019-12-17 20:22:37 · 604 阅读 · 0 评论 -
简单的侧滑抽屉效果
效果、需求描述:左侧有个目录一样的条目,默认看不到,右侧是宽度为全屏的主布局,通过滑动,或者点击按钮后,左侧出现,并且,主布局被往右顶。左侧的目录,不是覆盖(压住)主布局。项目地址默认情况:左侧出现后的情况说明:这里,我用了3个按钮(TextView),去做点击事件,是为了调试,按住按钮,滑动手指的时候,界面不滑动。第1个按钮,“切换1”,是最普通的状态。效果是,点击切换左侧的状态...原创 2019-12-02 15:47:27 · 333 阅读 · 0 评论 -
ScrollView中使用EditText,并解决滑动冲突
描述:在一个ScrollView中,有一个固定了高度的 EditText,EditText 可以输入很多文字,当文字过多时,需要滑动文字查看。此时,不能让 ScrollView 滑动。同理,当触摸到 EditText 以外的地方(ScrollView区域内)时,滑动界面的时候, EditText 内的文字,不能滑动。此外,如果EditText 中文字行数少,不用滑动,就可以看到全文的时候,在Ed...原创 2019-12-02 15:15:39 · 522 阅读 · 0 评论 -
标签控件(简单控件,笔记)
需求:根据给定的文字(代码中用户动态输入,或接口固定返回等),展示标签样式,且只展示第一个字。如:经济。则,标签展示“经”扩展功能:文字随控件大小,对应变化,不需要额外设置。样式图:代码:1、res -> values -> styles 中 <!--标签View的自定义属性--> <declare-styleable name="Label...原创 2019-11-28 15:26:17 · 887 阅读 · 0 评论 -
(仿微信读书)水平滑动RecycleView,上滑删除Item
直接放出项目地址项目地址功能需求:1、卡片水平滑动;2、一次只能滑动一页;3、上滑删除卡片项目额外具备功能:1、完整展示卡片居中,点击两侧卡片(漏出来一小部分),可以切换卡片,切换速度,可以自由控制。见:SmoothScrollLayoutManager (留意注释部分)2、上滑删除,可以自由控制滑动限制。滑动了多少距离,就触发删除。见:MyItemTouchHelperCa...原创 2019-11-05 16:00:01 · 528 阅读 · 0 评论 -
TextView及其内部文字宽高测量
请仔细阅读上图中的文字。或 查看原文测量中,有三种常见模式。1、EXACTLY当我们将控件的“layout_width”属性或者“layout_height”属性指定为具体数值时,比如“android:layout_width=“200dp””,或者指定为“match_parent”时,系统会使用这个模式。2、AT_MOST当控件的“layout_width”属性或者“layout_...原创 2019-10-31 11:27:11 · 3337 阅读 · 1 评论 -
句子中选取单词,并出现弹框
任务需求:1、给定一段英文,其中部分单词高亮,点击其中任一单词,视为选中(高亮词不可被选中)2、选中某个单词后,其附近出现弹框,箭头指向单词。默认在单词的上面。如果上面空间不足,就展示在单词的下面。其实,和现在很多学英语APP中的功能类似本项目,取词,是基于https://github.com/otwayz/Scallop是在它的基础上进行的修改、升级。好了,接下来,我讲解我写的这...原创 2019-10-26 14:24:23 · 397 阅读 · 0 评论 -
基于SpannableString匹配单词
最近接到个需求,在一段英文中,将给定的单词高亮。写了近1天,考虑了各种情况,终于写完了对应算法。我将其封装成一个:MySpanTextView源码在下面,直接复制,拿到项目中用就行。集成自普通TextView,仅仅对文字匹配做了修改,其他属性不变。复制代码,可以直接用需求:给定一段英文,和某些关键字,在英文中,将关键字高亮。要求:将给定的关键字视为独立的单词,当其出现在其他单词内时,不可以高...原创 2019-08-01 15:30:39 · 244 阅读 · 0 评论 -
kotlin中使用Room数据库
最近在kotlin环境下,写了一个room数据库的demo,各种情况跑了一下,在此总结一下。涉及情况:增、删、改、查、排序1、环境搭建1.1、Android Studio下,新建一个kotlin项目,1.2、去app的build.gradle中进行一些配置顶部增加apply plugin: 'kotlin-kapt'然后defaultConfig { .........原创 2019-05-31 17:10:46 · 13157 阅读 · 7 评论 -
TCP中,握手为什么是3次?
所谓三次握手(Three-way Handshake),是指建立一个 TCP 连接时,需要客户端和服务器总共发送3个包。三次握手的目的是连接服务器指定端口,建立 TCP 连接,并同步连接双方的序列号和确认号,交换 TCP 窗口大小信息。这里,我之前面试的时候,被问到一个引申的问题:为什么要3次?为什么一定是3次?2次行不行?4次呢?我这里,只说为什么一定要3次,至于每次传什么样的包,里面的数...原创 2019-05-31 10:03:43 · 169 阅读 · 0 评论 -
Lottie动画学习(Kotlin)
最近一直在学习kotlin,又接触到 Lottie 动画,网上是Java写的 Lottie动画,我用kotlin写了一边,发现了一写问题。总结一下Lottie学习文章Lottie for Android GitHubLottie,简单的说,流程就是(Android为例):UI设计给出动画的 Json 文件,放到项目中,加载,展示动画。特别说明一下:Lottie 2.8.0,对应的最小SD...原创 2019-05-30 17:25:55 · 1045 阅读 · 2 评论 -
单词卡功能实现
仿探探左右滑动卡片的效果很多http://ju.outofmemory.cn/entry/328946这里,我是用的https://github.com/xiepeijie/SwipeCardView我的单词卡片功能,都是在这个项目上进行的修改Demo地址本Demo通过精确计算单词的位置,在onTouch中处理了点击事件,所以,“点击单词”触发跳转单词详情页和“按住单词滑动卡片”,...原创 2019-08-27 15:13:23 · 1477 阅读 · 0 评论 -
过滤无效字符的密码输入框(EditText)
需求:1、密码由 字母、数字、符号组成。2、长度为6-16位3、符号可有可无,字母和数字必须都有,字母不限制大小写(即:不可以纯字母、纯数字、纯符号)4、如果用户输入无效字符,直接不展示,并且有对应提示匹配密码,肯定要用到正则,这里推荐个https://vimsky.com/article/3603.html实现:特别留意下最后的说明,有些细节要注意0、完整的正则检查匹配 ...原创 2019-08-28 20:01:19 · 400 阅读 · 0 评论 -
带动画折叠TextView,“展开”按钮与文字同行,且远离文字
需求:1、TextView加载文字,如果文字不多余两行,直接展示,“展开”按钮隐藏2、如果文字大于2行,默认展示2行,在第二行,文字结尾处以 省略号 结尾,且在控件右下角出现“展开”按钮3、如果文字展示的最后一行,文字结尾处距离控件终点距离较近,或完整展示N(N>2)行,则,“展开”按钮在下一行的终点处效果图如下:1、文字不大于2行2、文字大于2行的默认展示3、文字终点处,...原创 2019-08-29 20:31:58 · 875 阅读 · 0 评论 -
学习笔记
最近在学Java基础,遇到一些知识点,以前不知道的,做个笔记。温故知新。1、Java是解释运行吗? 我们常说,Java是解释型语音,那么,说它是解释运行,对不对?其实不对。 (1)Java源代码经过Javac编译成 .class文件 (2).class文件经过JVM解释或编译运行 解释:.class文件经过JVM内嵌的解释器解析执行 编译:存在JIT编...原创 2018-07-23 11:16:30 · 197 阅读 · 0 评论 -
学习笔记:点击界面底部“评论”输入框,软键盘弹出不影响界面布局
1、清单文件中添加属性android:screenOrientation="portrait"android:windowSoftInputMode="adjustPan|stateVisible"2、Activity中,setContentView之前,添加getWindow().setSoftInputMode( WindowManager.Layou...原创 2019-09-12 14:35:55 · 577 阅读 · 0 评论 -
可点击、拖拽填空题
最近需要写个填空题。本项目参考自https://github.com/alidili/Demos/tree/master/DragFillBlankQuestionDemo本项目缺点:不能快速连续动画,操作不宜过快。否则,会因为计算等的不准确、不及时性,崩溃如果快速点击选项,多个选项做动画,会出现崩溃问题。要求:1、选项随机分布在题目下面2、选项可点击、拖拽实现填空细化需求:...原创 2019-09-27 15:35:09 · 2380 阅读 · 0 评论 -
新建项目上传到GitHub(笔记)
本文参考自。https://blog.csdn.net/vi_error/article/details/80608793https://www.liaoxuefeng.com/wiki/896043488029600/898732864121440现假设,自己本地新建了一个项目,GitHub上还没有。现在要上传到Github上。要上传项目,需要生成 ssh公钥、秘钥,并在GitHub...原创 2019-09-27 15:50:57 · 164 阅读 · 0 评论 -
面试总结
很久没有写博客了。2018年12月18号,从上家公司离职,然后给自己放了个假,然后是过年。年后来了北京重新找找工作,深感就业的艰难。终于,在2019年4月9号,入职了新的公司。在上家公司干了3年,有3年没有面试过了,刚开始,很不适应。遇到过坑。现在,把面试,总结一下。希望,对正在找工作和即将要找工作的人有所帮助。我算法方面,很差。我没有刷过算法题,基本就是面试遇到了,记下来,回家了学一下。所...原创 2019-05-24 17:53:38 · 130 阅读 · 0 评论