自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(137)
  • 收藏
  • 关注

原创 界面中局部(部分)区域嵌套滑动

界面中,部分区域(局部)可以滑动,滑动到一定程度后,该区域内的子布局可以继续滑动

2022-08-23 14:03:00 569 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 2878

原创 自定义圆环(扇形)绘制

这个圆环是静态的,没有自动增加的动画绘制并不复杂,有些细节点容易搞错,这里写出来,算是做个笔记。先放出源码,细节点,后面会说明。建议看后面的说明。最后,会进行扩展,绘制扇形需求/功能说明:1、假设一个班级里有 X 个人,班级里的学习有的篮球、有的足球、有的书法、有的绘画,还有的,什么都没学2、圆环绘制的起点,是圆环顶部,逆时针依次绘制效果图:代码:import android.content.Contextimport android.graphics.Canvasimport an

2021-04-28 11:37:51 1541

原创 网络框架封装(retrofit2+rxjava2+okhttp3)

项目地址后面的 项目说明 ,请仔细看。如果自己的项目有需要扩展的,也好知道去哪里改写在前面:项目中隐去了所有接口、有效参数,如果要验证,请自己找合适的接口验证改封装支持的功能有:1、接口请求;2、addHeader相关;3、请求接口的参数获取(并排序),便于处理(如:加密,和后台校验)4、接口相关日志打印为了方便使用,直接写成 library ,复制拿走就行引用 library ,注意2个地方:1、app中的gradle,dependencies 中添加//netlib 是我网络封装的

2021-04-07 21:03:50 613 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 451

原创 基于属性动画,实现 咔嚓截屏(收藏)动画

写在前面:这里的截屏,其实不是真正意义上的截屏。而是把数据先设置到一些控件上,让控件做透明度、缩小、位移等动画。只是看起来像截屏。为了方便描述,下面还是采用截屏这种说法。需求:做一个咔嚓截屏收藏功能。点击“按钮”后,把屏幕截屏,然后把截下来的内容,做缩小、透明度、位移等动画,飞到按钮上。因为代码简单,就没放到GitHub上,直接全部放出来了。复制了就能用。代码中已经有一些注释了,但是有一些地方因为简单的文字描述不清除,需要在博客中详细说。先来2张简单的效果图注意最后的说明。注意最后的说明。

2021-02-01 21:16:07 465 2

原创 利用MediaPlayer实现在线音频的播放(支持进度条拖动、快进、快退)

效果图:GitHub地址https://github.com/chenjianqiang1016/MyAudioDemo写在前面:本项目的缺点是 没有对网络情况进行处理我找了一首4分40秒的歌曲(4.5M),打开界面后,大约停留1-2秒,就开始播放了,然后我中断网络,发现可以顺利播放到结尾。说明在网络良好的情况下,问题不大。当然,这是理想状态,如果开头网络不好、网卡、网慢、播放到中间断网了、断网后又重连了。。。这些情况,本项目都没做处理。如果是播放本地文件,网络情况就无所谓了说明:(代码中可能

2020-10-22 16:57:05 2463

原创 安卓加载展示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 7710 6

原创 安卓 复制文字 及从 剪贴(切)板 获取内容

最近有个需求,进入某个界面后,要监听 剪贴(切)板 中是否有文字,有的话,拿到,分析是否是需要的,然后进行对应的处理。功能看着简单,但是 因为手机系统原因,踩了个坑,这里记录下。先来个复制文字功能代码,很简单,不多说了导包import android.content.ClipboardManager代码val clipboardManager =context.getSystemService(Context.CLIPBOARD_SERVICE) as? ClipboardManagerv

2020-09-09 14:35:58 1113 1

原创 GradientDrawable的使用,和简单源码分析

gradient:英 [ˈgreidjənt] 美 [ˈgredɪənt] 倾斜度,坡度,变化率从字面意思理解,是一个可以变化颜色、有渐变效果的DrawableGradientDrawable extends Drawable来个效果图和对应的代码。并不复杂对应代码(布局我就不写了,没有任何特别的) //圆角矩形。TextView rounded_rectangle.apply { var gradientDrawable: GradientDra

2020-07-27 18:25:05 567

原创 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 128

原创 Activity生命周期,学习笔记(踩过的坑)

关于Activity的生命周期问题,已经是很常见、很简单的问题了,但是偶尔还是会踩坑。这里,做个总结、笔记1、一个APP启动,启动后退到后台(home键),然后重新打开界面。这个过程是生命周期变化是什么?这个问题非常简单了APP启动onCreateonStartonResume退到后台onPauseonStop重新打开onRestartonStartonResume2、两个界面的跳转呢?第一个界面,跳转第二个界面startActivityForResult,然后关闭第二个

2020-06-17 16:24:17 194

原创 按下按钮后做扩大(扩散)动画

需求: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 1007

原创 ViewPager+Fragment,一屏展示多个Fragment,中间正常,两边漏一点

功能需求:1、有多个布局,要求滑动展示,中间大,两边小,两边小的布局,大部分在屏幕外,屏幕里面,漏出来一点,让用户知道可以滑动;2、这多个布局,内容有差异,甚至,可能有较大差异;3、在边缘处,也可以滑动。类似画廊效果,其实网上有对应的,但是,细节地方,有些博客写的不全,我刚开始写,对着一两个博客写,总是出现奇怪的问题,或者没有效果。对比了不同的博客,才出来效果。为此,我写个博客,干脆把所有...

2019-12-25 16:47:03 1564

原创 自定义滑动控件(SwitchView),同时解决和ScrollView的冲突

网上搜 滑动控件(SwitchView),很多。本来也没什么写的,但是根据新项目需求,和事件界面调试,还是发现了很多问题。把网上的项目改来改去,麻烦。就自己写了。简单的效果图根据本次实际功能和自己调试过程中发现的问题,针对 switchView,总结了以下需要具备的功能。1、可以滑动。以中心为界限,当滑过中点,就变换颜色。如:当前是开启状态,当小圆滑过中点,背景就变成关闭时候的颜色。抬起手...

2019-12-19 15:58:25 630

原创 简单的可滑动、点击的次数选择器(类似卡尺)

需求: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 568

原创 简单的侧滑抽屉效果

效果、需求描述:左侧有个目录一样的条目,默认看不到,右侧是宽度为全屏的主布局,通过滑动,或者点击按钮后,左侧出现,并且,主布局被往右顶。左侧的目录,不是覆盖(压住)主布局。项目地址默认情况:左侧出现后的情况说明:这里,我用了3个按钮(TextView),去做点击事件,是为了调试,按住按钮,滑动手指的时候,界面不滑动。第1个按钮,“切换1”,是最普通的状态。效果是,点击切换左侧的状态...

2019-12-02 15:47:27 302

原创 ScrollView中使用EditText,并解决滑动冲突

描述:在一个ScrollView中,有一个固定了高度的 EditText,EditText 可以输入很多文字,当文字过多时,需要滑动文字查看。此时,不能让 ScrollView 滑动。同理,当触摸到 EditText 以外的地方(ScrollView区域内)时,滑动界面的时候, EditText 内的文字,不能滑动。此外,如果EditText 中文字行数少,不用滑动,就可以看到全文的时候,在Ed...

2019-12-02 15:15:39 455

原创 标签控件(简单控件,笔记)

需求:根据给定的文字(代码中用户动态输入,或接口固定返回等),展示标签样式,且只展示第一个字。如:经济。则,标签展示“经”扩展功能:文字随控件大小,对应变化,不需要额外设置。样式图:代码:1、res -> values -> styles 中 <!--标签View的自定义属性--> <declare-styleable name="Label...

2019-11-28 15:26:17 828

原创 (仿微信读书)水平滑动RecycleView,上滑删除Item

直接放出项目地址项目地址功能需求:1、卡片水平滑动;2、一次只能滑动一页;3、上滑删除卡片项目额外具备功能:1、完整展示卡片居中,点击两侧卡片(漏出来一小部分),可以切换卡片,切换速度,可以自由控制。见:SmoothScrollLayoutManager (留意注释部分)2、上滑删除,可以自由控制滑动限制。滑动了多少距离,就触发删除。见:MyItemTouchHelperCa...

2019-11-05 16:00:01 493

原创 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 2958 1

原创 句子中选取单词,并出现弹框

任务需求:1、给定一段英文,其中部分单词高亮,点击其中任一单词,视为选中(高亮词不可被选中)2、选中某个单词后,其附近出现弹框,箭头指向单词。默认在单词的上面。如果上面空间不足,就展示在单词的下面。其实,和现在很多学英语APP中的功能类似本项目,取词,是基于https://github.com/otwayz/Scallop是在它的基础上进行的修改、升级。好了,接下来,我讲解我写的这...

2019-10-26 14:24:23 363

原创 新建项目上传到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 142

原创 可点击、拖拽填空题

最近需要写个填空题。本项目参考自https://github.com/alidili/Demos/tree/master/DragFillBlankQuestionDemo本项目缺点:不能快速连续动画,操作不宜过快。否则,会因为计算等的不准确、不及时性,崩溃如果快速点击选项,多个选项做动画,会出现崩溃问题。要求:1、选项随机分布在题目下面2、选项可点击、拖拽实现填空细化需求:...

2019-09-27 15:35:09 2253

原创 学习笔记:点击界面底部“评论”输入框,软键盘弹出不影响界面布局

1、清单文件中添加属性android:screenOrientation="portrait"android:windowSoftInputMode="adjustPan|stateVisible"2、Activity中,setContentView之前,添加getWindow().setSoftInputMode( WindowManager.Layou...

2019-09-12 14:35:55 542

原创 带动画折叠TextView,“展开”按钮与文字同行,且远离文字

需求:1、TextView加载文字,如果文字不多余两行,直接展示,“展开”按钮隐藏2、如果文字大于2行,默认展示2行,在第二行,文字结尾处以 省略号 结尾,且在控件右下角出现“展开”按钮3、如果文字展示的最后一行,文字结尾处距离控件终点距离较近,或完整展示N(N>2)行,则,“展开”按钮在下一行的终点处效果图如下:1、文字不大于2行2、文字大于2行的默认展示3、文字终点处,...

2019-08-29 20:31:58 787

原创 过滤无效字符的密码输入框(EditText)

需求:1、密码由 字母、数字、符号组成。2、长度为6-16位3、符号可有可无,字母和数字必须都有,字母不限制大小写(即:不可以纯字母、纯数字、纯符号)4、如果用户输入无效字符,直接不展示,并且有对应提示匹配密码,肯定要用到正则,这里推荐个https://vimsky.com/article/3603.html实现:特别留意下最后的说明,有些细节要注意0、完整的正则检查匹配 ...

2019-08-28 20:01:19 355

原创 单词卡功能实现

仿探探左右滑动卡片的效果很多http://ju.outofmemory.cn/entry/328946这里,我是用的https://github.com/xiepeijie/SwipeCardView我的单词卡片功能,都是在这个项目上进行的修改Demo地址本Demo通过精确计算单词的位置,在onTouch中处理了点击事件,所以,“点击单词”触发跳转单词详情页和“按住单词滑动卡片”,...

2019-08-27 15:13:23 1427

原创 基于SpannableString匹配单词

最近接到个需求,在一段英文中,将给定的单词高亮。写了近1天,考虑了各种情况,终于写完了对应算法。我将其封装成一个:MySpanTextView源码在下面,直接复制,拿到项目中用就行。集成自普通TextView,仅仅对文字匹配做了修改,其他属性不变。复制代码,可以直接用需求:给定一段英文,和某些关键字,在英文中,将关键字高亮。要求:将给定的关键字视为独立的单词,当其出现在其他单词内时,不可以高...

2019-08-01 15:30:39 219

原创 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 12975 7

原创 TCP中,握手为什么是3次?

所谓三次握手(Three-way Handshake),是指建立一个 TCP 连接时,需要客户端和服务器总共发送3个包。三次握手的目的是连接服务器指定端口,建立 TCP 连接,并同步连接双方的序列号和确认号,交换 TCP 窗口大小信息。这里,我之前面试的时候,被问到一个引申的问题:为什么要3次?为什么一定是3次?2次行不行?4次呢?我这里,只说为什么一定要3次,至于每次传什么样的包,里面的数...

2019-05-31 10:03:43 147

原创 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 976 2

原创 面试总结

很久没有写博客了。2018年12月18号,从上家公司离职,然后给自己放了个假,然后是过年。年后来了北京重新找找工作,深感就业的艰难。终于,在2019年4月9号,入职了新的公司。在上家公司干了3年,有3年没有面试过了,刚开始,很不适应。遇到过坑。现在,把面试,总结一下。希望,对正在找工作和即将要找工作的人有所帮助。我算法方面,很差。我没有刷过算法题,基本就是面试遇到了,记下来,回家了学一下。所...

2019-05-24 17:53:38 115

原创 自定义View+动画,实现单行文字滚动(非跑马灯)

原型图:需求1:用户看视频的时候,昵称从右到左飘过。功能实现:因为昵称不会太长,短文字是不能用跑马灯的,跑步起来。除非自定义。那就用平移动画。需求2:飘的文字改了,后台返回,可长可短,长文字可能几十个字(文字长度超过屏幕宽度)。单行,长文字时不能换行。需求2要实现,有3个关键词要注意:飘(移动)、可长可短、单行。我这里直接说测试结果过:1、不能用跑马灯,因为短文字跑不起来2、如果还...

2018-11-21 10:36:53 521

原创 截屏功能实现,Bitmap拼接、合并

最近,接到个需求,有个页面要截屏,然后把截屏得到的图片,以海报的形式分享出去。简单的说,步骤上是2步:1、截屏;2、对拿到的图片进行处理,得到海报。最后的用三方SDK分享,这里不做说明。在说明之前,我们需要先了解点东西:1、获取屏幕区域//获取屏幕宽高的第一种方法。其中,getWidth和getHeight是过时方法WindowManager wm = (WindowManager) ...

2018-11-12 16:31:31 1154

原创 安卓Canvas绘制圆角矩形,带文字旋转

项目中一个简单需求,用自定义写了一下,做过笔记。效果图:源码:package com.demo;import android.content.Context;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.RectF;import android.suppo...

2018-10-18 16:48:49 8025

原创 展示固定长度文字,SpannableString匹配链接被截断问题解决

最近项目中遇到这样的一个问题:动态列表中,每个item,文字只展示120字,超过120字,就是前120字+“…”来展示。但是,文字中有表情、链接等。以前为了省事,就直接粗暴的截取前120字,然后跟省略号。然后去匹配表情和链接等,这样,就造成了一个问题,如果截取的位置遇到了链接,就会把链接截断,造成链接的不完整。解决的办法就是,先匹配,把链接处理完,然后再去截取为了简单处理,我下面用50...

2018-08-30 11:36:04 1220

原创 setContentView源码学习

参考博客:https://blog.csdn.net/qq_17250009/article/details/52242895https://www.jianshu.com/p/40a9c93b5a8dhttps://www.jianshu.com/p/e42b638944ae特别说明,我用的API版本是25,这句话后面会用到,特别注意!!!今天突然有个想法:不同的布局文件,相...

2018-08-06 17:58:34 199

原创 View的绘制起点(读源码)笔记

在写代码的时候,因为功能、需求等,需要知道一个控件的宽高,demo如下:&lt;TextView android:id="@+id/text_view" android:layout_width="50dp" android:layout_height="50dp"/&gt;Activity中TextView text_view;@Overridepr...

2018-08-02 14:44:01 571 1

原创 学习笔记

最近在学Java基础,遇到一些知识点,以前不知道的,做个笔记。温故知新。1、Java是解释运行吗? 我们常说,Java是解释型语音,那么,说它是解释运行,对不对?其实不对。 (1)Java源代码经过Javac编译成 .class文件 (2).class文件经过JVM解释或编译运行 解释:.class文件经过JVM内嵌的解释器解析执行 编译:存在JIT编...

2018-07-23 11:16:30 179

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除