自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 资源 (2)
  • 收藏
  • 关注

原创 Android开发中遇到的问题

1、自定义View ,wrap_content 不处理时和父布局大小一样(占满父布局)。可以查看View的getDefaultSize方法。2、NestedScrollView 嵌套 竖向的RecyclerView 时,item会被全部创建出来。具体可看 measureChildWithMargins方法,传给RecyclerView的是UNSPECIFIED。3、https://www.jianshu.com/p/023a5f60e6d0RxJava : repeatWhen() 和 retryWhe

2020-12-14 10:43:33 1291

原创 基于MediaPlayer实现视频播放

一个简单的视频播放器,满足一般的需求。使用原生的 MediaPlayer 和 TextureView来实现。

2023-03-26 17:42:33 961 2

原创 ProgressBar圆形进度

ProgressBar 的圆形进度很容易实现,但是不经常用的话,时间一长容易忘记,到用的时候,又要百度一番,到处找。这里记录一下,方便日后使用。

2023-03-26 17:11:41 329

原创 基于Camera2和MediaRecorder实现视频录制

视频录制,在一般开发中很少遇到,大部分开发工作都是写写页面,请求接口,展示数据等等。真要遇到,可能采用第三方库实现,一来实现快速,二来可能觉得别人实现的比较好。特别是在开发周期很紧的情况下,一般都不会自己花时间实现。其实最好是使用手机系统的录制视频,功能完善,稳定。然后在onActiityResult方法中接收录制好的视频路径处理即可。但是,有时出于某些原因,比如不符合ui设计等等,不能使用系统自带录制功能,需要自己实现。下面将我自己实现的,记录下来。

2023-03-26 16:09:19 2256 2

原创 实现TextView尾部追加可点击的Icon和文本

就到国庆节了,上一次写还是五一的时候,真的好快好快,时间按周的单位在奔跑,一周,一周,又一周…七天,没有计划,人多,哪里都堵,还有疫情(主要还是没人一起玩😂)就窝在小出租屋里写写代码,看看书好了。祝祖国繁荣昌盛,世界和平共处。今天写的是 TextView 相关的效果,是之前项目中写过的,感觉还是有必要记录一下,还是花了一些时间,现在整理一下,方便以后使用。如果你看到了觉得有用那更好。看下效果1:在文本尾部显示一个icon。

2022-10-02 18:07:37 4892 1

原创 RecyclerView嵌套RecyclerView的滑动问题如何解

一、概述虽然今天我们要说的是Rv嵌套Rv的问题,但多数情况下我们都不会使用Rv嵌套Rv,去实现复杂的列表,而使用多个itemType实现,再难点的配合GridLayoutManager.SpanSizeLookup一起解决。因为Rv嵌套Rv会有问题,如果嵌套的Rv高度没有设置明确的值,会一次创建所有的item,造成卡顿问题。类似我们在NestedScrollView里面嵌套Rv,Rv的高度写的是wrap_content/match_parent,一样的情况。既然高度不确定,那我们给嵌套的Rv指定高度,

2022-05-29 01:19:50 3022 1

原创 RecyclerView列表中的倒计时实现

一、概述五一到了,劳动人民万岁!放假还要加班的程序员们,原本的回家或出行计划被迫放弃,他们辛苦了,希望老板们玩的开心。五一过完半年就差不多过去了,离十一也不远了。一年就这两个节点,过完这两个节点一年也到头了。今天来说一下列表中倒计时的实现,这是我在实际项目用到的方案,不知道那些大厂是怎么实现的,他们一定有很好的方案。我这只是记录下我自己的实现,如果大家知道更好的实现,可以告诉我。场景是有一个列表,比如购物车列表,item中会出现倒计时,比如秒杀倒计时。列表还支持分页,滑到第一页底部会加载下一页,下一页

2022-05-01 23:14:12 2193

原创 常见的App主页实现

一、概述再过两个月,我就30周岁了,开启人生的第四个十年。人生有几个十年,我已经度过了三个。我内心并未感觉自己三十岁,但每次听到同事们说出他们的年龄,心里暗暗比较比他们大了好几岁,才意识到他们真好,我曾经也是他们这样。自古三十而立,成家立业,我现在既没有成家,也不知道我这个写码的工作算不算立业,因为我还不知道过了30岁,还能写几年代码。但不管未来如何,当下好好写码,保持学习,未来也应该不会很差吧。上面纯属扯淡,下面开始今天的正文。现在主流的app首页都是底部几个Tab,上面是Fragment展示内容,就

2022-03-23 00:03:37 3127

原创 PopupWindow的使用和注意事项

一、概述Android常见的PopupWindow,显示在某个view的附近。这个经常会用到,而且还有些需要注意的地方,如果没有第一次使用或者对它不是很熟悉,可能会遇到一些坑:键盘弹起时,PopupWindow会挡住键盘;Android5.0上不显示。记录在这里,方便日后查阅,避免踩坑。二、代码class TipWindow(context: Context, val amount: String) : PopupWindow(context) { init { v

2022-03-17 18:48:38 3672

原创 浮在页面上可拖动的View

转眼到2022年了,回想第一次在csdn上写东西是2017年,距现在已过去5年。这5年之间,身边的人有的结婚了,有的生小孩了,有的买房了,有的升级做管理不再写代码了。而我,与这些都没有关系,还是一个菜,只不过从一个小菜变成了一个老菜,功不成名不就。

2022-01-23 16:05:25 1847

原创 改造Switch为IOS风格

改造Switch的样式为IOS效果布局 <androidx.appcompat.widget.SwitchCompat android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@null" android:checked="false" an

2021-09-04 23:50:48 507

原创 Android加载框LoadingDialog

加载中的菊花,背景透明,不会有阴影遮盖层class LoadingDialog(context: Context) : Dialog(context, R.style.LoadingDialogStyle) { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setCancelable(false) setContentV

2021-09-04 23:39:38 1689

原创 全屏DialogFragment

全屏的dialog,并且还有弹出关闭动画,从底部弹出class MyDialogFragment : DialogFragment() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) //设置无标题,无背景色 setStyle(STYLE_NO_TITLE, R.style.Dialog) } ove

2021-09-04 23:25:51 2510

原创 Retrofit是如何支持协程

一、概述Kotlin的协程很好用,相信大家都用上了,也觉得很香,这不,Retrofit在最近的几个版本中就支持协程了,更加方便我们处理网络请求了。这里不说协程的用法,我比较好奇Retrofit是怎么识别并处理我们写的suspend方法,下面就以retrofit:2.8.1的版本来看看究竟是如何实现的。二、java眼中的suspend在研究Retrofit代码之前,我们先看一个问题,kotlin完全兼容java,但suspend是kotlin中的,java中并没有,那这是怎么兼容的呢?为了看看究竟,我们

2021-06-30 22:11:00 2086 4

原创 Android TV开发之焦点控制

一、概述在Android TV开发中,最常处理的事情就是焦点的控制了,就像手机APP开发中的触摸事件的处理一样。但两者的处理有很大的区别,手机上是用手指触摸,可以随意点击任意的位置。而TV主要是通过遥控器上下左右移动焦点来操作,下一个焦点在哪,并不是随意的,都是由系统默认的规则和我们的设置来控制的。系统默认规则是,当方向键按下时,会把事件分发到ViewGroup中,这就涉及到哪些控件可以获取焦点,哪些控件优先获取焦点,以及哪里控件...

2020-09-02 20:41:56 5470

原创 Android卡顿监控

一、概述如果想要自己实现一个简单的卡顿监控功能,可以看下这编文章。我们都知道,Android程序 是基于事件驱动的,程序主线程一直在执行Looper的loop,loop的循环不断的读取事件进行处理,没有事件就等待着,退出程序也就退出这个循环。在Looper中,处理消息前后会打印log: // This must be in a local variable, in case a UI event sets the logger final Printer l

2020-09-02 13:36:08 686

原创 Androdi TV开发之ImageCardView

一、概述在Android TV开发中,常常需要在图片获得焦点时,显示它的描述性文字,失去焦点时,隐藏描述。对这样的需求很容易就可以实现,我们可以写一个自定义View,包括图片和文字,文字默认隐藏,再设置一个焦点选中监听,获得焦点显示文字,失去焦点隐藏文字。在leanback库中,有一个这样的控件,我们不需要再去自己写一个,他就是ImageCardView。二 、使用ImageCardView的使用非常简单,在布局中声明或者直接构造它,获取到他的实例后需要对他进行一些设置,控制的行为。 imageCa

2020-08-30 17:02:46 1320

原创 Androdi TV开发之VerticalGridView

一、概述VerticalGridView是Android TV开发中常用到的控件,是TV版的RecyclerView。不过他确实也是基于RecyclerView实现的,只是针对TV的场景做了一些扩展,比如切换焦点时item的对齐,记住item焦点并恢复,item获取焦点后的放大效果等等。可以看到其实大部分都是与焦点相关的,确实,手机与电视开发中最大的差异就是交互方式不同,一个是手指触摸,一个是通过遥控器切换焦点来操作。相比RecyclerView,VerticalGridView 用起来会麻烦一点,不仅

2020-08-30 14:56:10 9689 6

原创 Android BLE开发指南三:中央设备端开发详解

Android 系统从4.3开始支持BLE,但当时只支持手机作为中心设备,后来从5.0开始,手机亦可作为外围设备。这里我们讲解手机作为中心设备是如何扫描和连接外围设备的,这是我们BLE开发中最常用到的。

2019-09-22 15:20:30 1262

原创 Android BLE 开发指南二:广播数据解析

BLE 外设开始工作时,会发出广播让中心设备发现,广播的数据包中带有外设的相关信息,比如设备的MAC地址,名字,Service 列表的 UUID 等等。广播包的数据结构都是固定的,按照蓝牙相关规范规定好的。每个包都是 31 字节,数据包中分为有效数据(significant)和无效数据(non-significant)两部分。

2019-07-14 16:25:06 4066 1

翻译 Android BLE 开发指南一:GAP和GATT

1、概述蓝牙分为经典蓝牙和BLE。我们经常使用的蓝牙耳机和蓝牙音箱就属于经典蓝牙。BLE(Bluetooth Low Energy)称为低功耗蓝牙,是在蓝牙 4.0中引入的,相比经典蓝牙,其特点是功耗低,连接快,同时正是因为它功耗低,导致它的传输速率低,但它设计出来就是用来传输数据量不大的场景。BLE广泛用在可穿戴设备和物联网中。BLE 中有两种角色,一种是中心设备(Central),或者叫主...

2019-07-12 22:54:56 3286

原创 RxJava笔记3:操作符

RxJava笔记3:操作符

2019-06-13 22:52:20 618

原创 RxJava笔记4:背压Backpressure

RxJava笔记4:背压

2019-06-13 22:51:58 183

原创 RxJava笔记2:线程控制

RxJava笔记2:线程切换

2019-06-11 01:25:18 249

原创 RxJava笔记1:Observable

基本概念ObservableSource 可观察源Publisher 事件发布者subscribe 订阅Observer 观察者Subscriber 事件订阅者Observer 通过subscribe 观察ObservableSourceSubscriber通过subscribe 订阅Publisher事件发布者,称为上游,事件订阅者,称为下游。Observable.create...

2019-06-08 00:10:27 428

原创 一个像尺子的滑动选择控件 - RulerSelectView

1、简述项目中,需要做一个可滑动选择的控件,如下图:可左右滑动,滑动结束后,刻度与红色刻度线对齐。红色刻度线上的刻度为选中的刻度。这种可滑动选择的交互比较常见,比如app中的日期、地区选择等等,常常会有这样的设计。通常我们可能因为项目时间紧或其他原因而直接使用别人写好的开源库,集成到项目中来使用。但其实我并不推荐大家这么干,使用别人的虽然快速,但这样会导致你的项目依赖的三方库越来越多,隐藏...

2019-05-31 01:03:19 1347 2

原创 对动态代理(DynamicProxy)的理解

1、动态代理属于AOP(面向切面编程)的一种思想。2、代理对象和被代理对象都实现了相同接口。3、动态代理是指系统根据要代理的接口,自动帮我们生成并编译代理类(实现了要代理接口),并将代理类中的代理逻辑抽象到 InvocationHandler 中,由开发者实现。静态代理中,我们需要自己实现代理类,将代理逻辑也写在代理类里面。而动态代理省去了我们自己写代理类的工作,系统只需要知道要代理的接口,然...

2019-04-30 15:03:00 1734

原创 妙用RecyclerView的ItemDecoration

ItemDecoration 是item的装饰器,item间的分割线就是使用她来实现的,但她还可以搞出其他事来, 因为她有canvas,我们可以像自定义view一样,来使用她。比如我们可以实现如下图的效果:这个列表显示了每天的数据,数据按时间倒序排列,数据按天的单位进行分割,并显示出日期,每天的数据个数是不一样的。相信这样的效果大家会经常碰到,实现方法很多也很容易,但我相信使用ItemDec...

2019-03-26 21:57:44 1144

原创 Android实现app内的语言切换功能

我在目前所在的公司负责一个app项目的维护,最近需要对这个项目进行国际化,适配10多个国家的语言,在实现国际化过程中,遇到了很多问题,最麻烦的就是翻译了,得一个个将翻译从excel复制到资源文件中,还得保证key和value一一对应,稍不注意就容易出错,当然也有一些自动化的工具可以替代手工复制,但需要excel满足一定的规范,不然会出现一些差错。还有就是其他语言下的ui适配,有些文字翻译成其他语言...

2019-03-09 20:36:32 5323

原创 自定义带进度的Button

前段时间做了一个应用市场的项目,项目中需要一个带进度的Button:如图,可以观察到大致有三点要求:1、Button有各种状态;2、下载过程中要显示下载进度;3、被进度覆盖的文字颜色与未被覆盖的文字颜色不同。首先可以肯定的是必须通过自定义View来实现,那怎么实现了,我们来一点一点分析。第一点,状态比较容易实现,直接忽略。看第二点,如何实现进度?进度的计算倒不难,难的是如何将它画出...

2018-10-13 19:31:31 1010

原创 记一次关于Fragment的内存泄漏

之前使用单Activity多Fragment架构完成过一个项目,在后期维护时发现一个很严重的问题,很多页面在关闭之后,内存无法被回收,出现了内存泄漏问题。leakcanary显示信息如下:...

2018-09-25 22:48:10 12551

原创 使用RecyclerView优雅的实现折线图

众所周知,RecyclerView是个强大的控件,拥有很大的可扩展性,但是使用起来比ListView的难度会大一点。 今天我们就使用RecyclerView结合她的ItemDecoration来实现一个可左右滑动的折线图,静态效果图如下: 想想如何来实现呢?首先分析下要解决几个问题: 1、每个点的位置坐标如何计算; 2、每个点,及点与点之间的连线通过什么方法绘制; 3、每个点都有点击...

2018-09-16 00:59:43 1215

原创 TextView设置android:textAllCaps="true"带来的问题

刚刚碰到一个问题,记录一下 &lt;TextView android:id="@+id/scan_hold_status" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/scan_h...

2018-04-26 18:34:18 21891 1

原创 使用单Activity多Fragment架构的一些总结

前段时间用单Activity架构写完了项目,在整个过程中遇到了很多问题,现在记录一下,避免再次踩坑。首先对项目做一个概述:整个app只有一个MainActivity,首次进入app显示登入注册相关Fragment页面,登入后进入MainFragment页面,MainFragment布局由ViewPager和5个RadioButton构成,ViewPager承载5个fragment,Radio...

2018-04-23 13:43:34 11250 3

转载 流式布局

流式布局public class FlowLayout extends ViewGroup { private ArrayList&lt;View&gt; lineViews; private ArrayList&lt;ArrayList&lt;View&gt;&gt; allViews; public FlowLayout(Context context) {...

2017-08-14 20:23:13 279

原创 实现圆形ImageView

现在很多App的头像都使用圆形来展示,于是自己想了想如何去实现,先在网上搜了下资料,其核心是通过设置Paint的PorterDuffXfermode 合成模式来实现。先来了解下PorterDuffXfermode 的合成模式(图片来自网上): Src为原图,Dst为目标图,图片显示的是先绘制目标图,然后设置Xfermode,再绘制Src后的效果。有13种不同的合成模式,我们看SrcIn和Dst

2017-04-25 18:18:05 310

原创 ProgressBar:自定义旋转图片

自定义旋转图分三步:1、在layout中为ProgressBar设计布局; 2、在style中为ProgressBar设置Style; 3、新建一个类继承ProgressBar,在构造方法中设置style,加载布局;下面是我写的一个例子,先看第一步,布局:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="htt

2017-04-25 17:51:24 1559

原创 android学习记录6:实现ViewPager的Indicator

虽然在android5.0中design中有了TabLayout来实现ViewPager的Indicator,简单好用。但这个是我自己实现的,学习了很多,记录在这里。效果图: 第一步新建一个类继承LinearLayout,用来绘制指示器,及提供Viewpager滑动时重绘指示器的额方法:public class ViewPagerIndicator extends LinearLayout{

2017-02-05 20:56:57 430

原创 android学习记录5:自定义控件

今天在项目中写了一个自定义的控件,是一个页面的title,基本每个页面都要用到。没有使用actionbar或者toolbar,看看以后是否能够改用toolbar来实现。这是效果图: 第一步首先我写了title的布局文件,放了三个控件,左边,中间,和右边:<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="htt

2017-02-05 19:16:52 292

原创 android学习记录4:解决as 导入依赖包时报错:com.android.dex.DexException和com.android.build.api.transform.TransformExc

今天导入v7和design的包时,build后没有问题,但是运行时,一直报错,如下图: 后来google了一下,在Stack Overflow里面找到了答案,因为我依赖了另一个Moudle,而这个Moudle里面的libs文件夹的jar文件与我运行的Moudle中libs里的jar重复,导致报了这些错误。去掉重复的jar后,clean了一下项目,然后运行成功。

2017-02-05 18:22:38 722

kotlin文档

konlin文档,很值得学习的---------------------------

2018-08-16

软件初级测试

软件测试初级材料,希望对大家有用,谢谢大家

2014-09-12

空空如也

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

TA关注的人

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