自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

C先生的博客

记录、分享、讨论

  • 博客(56)
  • 资源 (5)
  • 问答 (1)
  • 收藏
  • 关注

原创 Android绘制的那些事 - DrawText的那些事

Android中提供drawText的方法:public void drawText(@NonNull char[] text, int index, int count, float x, float y, @NonNull Paint paint);public void drawText(@NonNull String text, float x, float y, @NonNull Paint paint);public void drawText(@NonNull String text,

2020-07-12 17:24:23 723

原创 给控件设置阴影

@Overrideprotected void dispatchDraw(Canvas canvas) { //初始化一个绘制背景的画笔 Paint shadowPaint = new Paint(); shadowPaint.setColor(Color.WHITE); shadowPaint.setStyle(Paint.Style.FILL); shadowPaint.setAntiAlias(true); //计算阴

2020-06-01 14:37:22 423

原创 Android 中巧妙使用枚举类型

Android 中巧妙使用枚举类型众所周知,在Android中并不推荐使用枚举类型,来听听官方的说法:Android Developer-Avoid enumerationsAvoid enumerationsA single enum can add about 1.0 to 1.4 KB of size to your app’s classes.dex file. These additions can quickly accumulate for complex systems or sh

2020-05-12 20:34:01 1463

原创 判断是否有底部虚拟按键的方法

public boolean isNavigationBarShow(Activity context) {Display display = context.getWindowManager().getDefaultDisplay();Point point = new Point();Point point1 = new Point();display.getSize(point);...

2019-09-10 11:04:41 1529

原创 Android LottieAnimation使用---踩坑篇

LottieAnimation众所周知是Airbnb出的一个实现复杂动画的一个框架,可以在Android,IOS等平台使用。使用的步骤也非常简单。但本文不是讲解它的使用。Lottie虽然好用,但也不是万能的,在使用过程中就遇到不少的问题。在已设置Animation的情况下,使用setAnimation()方法再次设置动画并执行playAnimation()时,Lottie控件上的动画会出现短暂...

2019-09-04 14:58:47 5575 5

原创 Android getIdentifier()使用

有些预置的的资源通过ID或者命名来标识,但是对于过多的相似资源,假如需要获取其资源,需要知道其id或者命名去一一得到。显得十分不方便。Android提供一个方法可以通过字符串形式的获取资源。这样,我们获取资源的形式就显得十分灵活。比如需要批量获取某些资源,只需要将资源命名成有规律的名称,通过for循环拼接成指定的资源名称。例子:我们需要通过图片切换的形式去制作一个动画。需要20张图片。这就需要我...

2019-08-02 15:18:59 1409

原创 Lottie动画框架的知识整理

LottieAnimationView lottieView; for (int i = 0; i < mTabButtons.getChildCount(); i++) { final int index = i; lottieView = (LottieAnimationView)mTabButtons.findViewBy...

2019-07-02 20:57:24 1162

原创 Html富文本解析

textView.setText(Html.fromHtml(imageString, new OrImageGetter(getContext(), textView, 108, 45), null));重写OrImageGetterpublic class OrImageGetter implements Html.ImageGetter { private DkDrawabl...

2019-06-24 09:32:27 13055

原创 Android小坑-OnTouchListener()事件监听长按后抬手MotionEvent.ACTION_MOVE不触发问题

场景:控件使用OnTouchListener()事件监听,正常的流程是,按下瞬间屏幕捕捉到触摸,触发MotionEvent.ACTION_DOWN事件,滑动屏幕会触发MotionEvent.ACTION_MOVE事件,手指离开屏幕会触发MotionEvent.ACTION_UP事件,这是我们所想要的事件触发流程,但是这不是绝对的.举例:假如我们的步骤使:按下-长按-松手,出现MotionEv...

2019-01-18 17:00:47 6284

原创 git 的命令行使用总结

git的使用:创建和合并分支1.git status 查看当前分支的信息2.git branch 查看所有的分支名称列表3.git add . 将工作区的修改增删内容提交到暂存区(stage)4.git checkout+分支名  切换分支5.git merge+分支名 将指定分支的内容合并到当前的分支6.git push 将合并后的分支提交7.git branc...

2018-11-29 11:22:47 274

原创 Android Error: execution failed for task ':app:transformDexWithInstantRunSlicesApkForDebug'

execution failed for task ‘:app:transformDexWithInstantRunSlicesApkForDebug’可以grade成功,但是不能正常安装在模拟器上,原因缺少slices.apk。这个apk文件正常情况下会在build文件中生成。解决办法:File-&gt;Settings-&gt;Built,Execution,Deployment-&gt...

2018-11-21 18:55:00 1007

原创 设计模式----单例模式详解

单例模式也有很多的写法,不同的写法各有优缺点,需要根据实际的使用情况去选择。1. 懒汉式,线程不安全public class SingletonPattern { public SingletonPattern(){} //懒汉式,线程不安全 private static SingletonPattern instance; public sta...

2018-11-08 20:16:16 770

原创 设计模式总结(Java语言实现)

有人说,为什么要学习设计模式,有些设计模式写起来十分复杂,在平时编程时不会刻意去使用它。但是,设计模式是代码规范的一种体现,学号设计模式并合理应用,可以避免bug的出现,增强代码的鲁棒性,便于后续的修改和扩展。所以学号设计模式十分重要,博主会在未来的时间里,详细学习设计模式的精髓,接下来的博文中会总结主流的设计模式,如有不当之处,希望小伙伴们提出批判。设计模式总结:设计模式大致分为三种:创建...

2018-11-08 16:45:07 225

原创 (Android)秋招面试经验总结

从八月开始准备面试到十月份中旬拿到&quot;某米&quot;等公司的offer,中间差不多两个多月的时间,经历了很多事情,从一个面试小白到逐渐熟知IT技术岗位的面试技巧,这其中有不少的失败和辛酸。大公司的秋招时间也基本接近尾声了,博主想通过一篇博客来总结一下自己的面试经历。给即将参加面试或者步入社会的小伙伴一个面试经验的参考,避免面试过程中犯错误或者走弯路。以下的观点均来自于面试Android开发的经验关...

2018-11-05 13:31:48 487

原创 八大排序算法 —— 基数算法

基数算法核心思想: 基数排序(Radix Sort)是桶排序的扩展,它的基本思想是:将整数按位数切割成不同的数字,然后按每个位数分别比较。 具体做法是:将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。 图解: 注意:在排序之前要获取数组中的最大值,通过最大值获得数组...

2018-08-15 16:02:03 2414 1

原创 八大排序算法 —— 归并排序

归并排序归并算法的理解比较难,是一种区别于插入算法,选择算法和交换算法的一种独特算法,需要逐步理解。 核心思想:归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案”修补”在一起,即分而治之)。图解(网...

2018-08-15 11:35:47 12450 8

原创 八大排序算法 —— 快速排序

快速排序核心思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。盗来一张图: 算法优缺点 快速排序最“快”的地方在于左右两边能够快速同时递归排序下去,所以最优的情况是基准值刚好取在无序区的中间,这样能够最大效率地让两边排序,同...

2018-08-15 10:23:41 781

原创 八大排序算法 —— 冒泡排序

冒泡排序核心思想:将临近的两个元素互相比较,将大的元素放在后面,依次循环下去,第一趟完成比较后,最大的元素会排在最后,第二趟后第二大的元素会排在倒数第二位,n-1趟后元素全部被排完。排序过程: 从小到大排序,原始待排序数组| 6 | 2 | 4 | 1 | 5 | 9 | 第一趟排序(外循环)第一次两两比较6 &amp;gt; 2交换(内循环)交换前状态| 6 | 2 | 4 | 1 ...

2018-08-14 21:37:56 2570

原创 八大排序算法 —— 简单选择排序

简单插入排序算法代码实现 :import java.util.*;public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int []data = new int[8]; for(int...

2018-08-14 21:07:43 673

原创 八大排序算法 —— 堆排序

堆排序堆的概念: 堆:本质是一种数组对象。特别重要的一点性质:任意的叶子节点小于(或大于)它所有的父节点。对此,又分为大顶堆和小顶堆,大顶堆要求节点的元素都要大于其孩子,小顶堆要求节点元素都小于其左右孩子,两者对左右孩子的大小关系不做任何要求。利用堆排序,就是基于大顶堆或者小顶堆的一种排序方法。下面,我们通过大顶堆来实现。堆排序: 堆排序利用了大根堆(或小根堆)堆顶记录的关键字最大...

2018-08-14 20:57:33 588

原创 八大排序算法 —— 直接插入排序

直接插入排序核心思想:将所有的待排元素依次和已排元素进行比较,如果待排元素小于某个已排元素(从最小的已排元素开始比较),则将待排元素插入到该已排元素的前面。图解: 直接插入排序是最简单的插入排序,平均时间复杂度为:O(n2),空间复杂度是O(1)。算法代码实现:import java.util.*;public class Main { public stat...

2018-08-13 20:17:21 231

原创 八大排序算法解释及代码实现(JAVA)

不管是工作面试还是考研,算法是一个必考的知识点。趁着复习算法的热度,对算法进行归纳总结。希望对迷们有帮助。如有解释错误的地方,希望指出,感谢。 八大排序算法:希尔排序后续持续更新。...

2018-08-13 18:11:28 172

原创 八大排序算法 —— 希尔排序

希尔排序,又称缩减增量排序。核心思想:希尔排序是通过分组(拆半分组),通过组内排序,每次分组后分组间隔再一次拆半,一直循环下去,找到分组间隔gap=1,使用直接插入排序完成最后的排序。图解: 希尔排序的时间复杂度是:O(n2) ;空间复杂度是O(1) ,希尔排序是一个不稳定的排序,相同的变量在排序后可能与之前的顺序不一样。 比如:初始的数组为:6,7,5(1),9,1,2,4,...

2018-08-13 18:04:59 697

原创 EditText限制输入数字并且范围是1-730 焦点改变监听

发现使用网上博客上的正则表达式写的不太简便,于是自己想了一种自己的方案,直接看代码吧。首先在xml布局文件中对EditText进行属性设置&lt;EditText android:id="@+id/et_end_time_repeat_times" android:text="1" android:inputType="number" a...

2018-07-28 12:27:53 1514

原创 Android各种问题解决汇总

如何在任意位置销毁一个Activity,销毁指定的Activity

2018-07-27 15:49:02 261

原创 Calendar的基本使用和属性说明

最近在写周期性闹钟的功能,需要对时间进行处理,频繁使用Calendar,Calendar 的使用过程中又有一些陷阱。这里对Calendar进行总结一下。Calendar 可以看作是一个抽象类。 它的实现,采用了设计模式中的工厂方法。表现在:当我们获取Calendar实例时,Calendar会根据传入的参数来返回相应的Calendar对象。获取Calendar实例,有以下两种方式: (1) ...

2018-07-17 21:13:56 23346 3

原创 时间,日期,周的属性获取和转化

最近在写一个关于闹钟的时间设置的功能,类似于Android原生系统中的日历提醒的时间设置。让人头疼的是这时间设置涉及特别多种的可能事件,有点让人 头疼。这篇博文主要用来记录在这个功能实现之前所用的时间日期转化的各种方法。判断某年某月有多少天int year = 2017;int month = 3;Calendar c = Calendar.getInstance();c.set...

2018-07-10 20:34:29 909

原创 View的滑动

View的滑动有三种

2018-06-26 20:58:11 166

原创 View的基础知识

1. 什么是View View是所有控件的基类,下到各种Button,TextView,ImageView,上到LinearLayout,RelateLayout,甚至你自定义的控件,都是继承View这个基类,所以说,View是代表着界面层的一个抽象控件。除了View,还有一种叫ViewGroup,也就是控件组。ViewGroup本身也继承了View,View可以理解为存放很多View的组合,...

2018-06-21 19:50:50 369

原创 Android View的事件体系

趁着最近期末还有时间,想学一点关于Android View的知识。View的知识算是比较重要的一个模块,虽然不属于Android的四大组件之一,但跟四大组件一样重要。View作为Android所有控件的的一个基类,影响着可视化界面和用户体验,是一个不可忽视的开发知识点。接下来的几篇博文,将通过学习View 的使用,写View相关的Demo,与你们分享我的学习成果,并且希望共同探讨,发现我学习过...

2018-06-21 12:58:02 109

原创 通过谷歌语音设置闹钟闹钟和定时器Google Voice Action

上一篇博文承诺要写一篇谷歌语音发起闹钟设置的博文,最近这个功能实现得差不多了。趁着今天有点时间,把他总结一下。国内由于一些众所周知的原因,谷歌服务一致不能再国内使用,颇有遗憾。加上国内手机厂商对谷歌原生系统做了大规模定制,谷歌语音被剔除,使用自家优化过,更符合国人使用的语音。前阵子老师要求在谷歌语音中加入APP的设置计时器和闹钟的操作,查了好久也没有查到,本以为是自己的查找方向有问题,后来发现,国...

2018-06-06 11:18:18 1181

原创 Android数据库调试,编辑,调试和查看工具的使用。

以前做Android APP开发,每次做数据库功能是最烦的,应为数据库需要在手机上才能查看,如果要在电脑上查看编辑,还需要下载工具,把手机的数据库导入到电脑里,特别浪费时间。后来发现一个特别不错的工具,可以在电脑上实时查看APP的数据库,还可以对它进行编辑,不仅可以查看sqlite,还能查看SharedPreference的数据。特别好用,节约很多开发的时间。 下面介绍一下这个强大的工具。An...

2018-05-25 21:07:42 1083

原创 Android APP签名和签名等信息查看

最近在写学校的创新项目,是一个基于定位的签到系统,需要用到百度地图,百度地图SDK的使用需要申请身份,获取key值等,过程中需要提供应用的签名,下面介绍一下签名的使用。1. 为什么要签名?发送者的身份认证 由于开发商可能通过使用相同的 Package Name 来混淆替换已经安装的程序,以此保证签名不同的包不被替换保证信息传输的完整性 签名对于包中的每个文件进行处理,以此确保包中内...

2018-05-18 20:29:55 11968 2

原创 Android 出现NoClassDefFoundError问题的解决:使用MultiDex

前阵子做的系统谷歌语音设置闹钟和计时器的功能,然后修复了一下横竖屏和全屏切换的bug,以为就完事了。没想到把代码提交给老师以后,老师说有问题,plus版本的项目打不开。但是明明已经测试过了三台手机,都没有问题才提交的。现在出现这种问题,真的好尴尬!冷静下来仔细想了想,是不是系统谷歌语音添加闹钟和计时器的功能有问题,因为在普通版本上没有出现APP闪退的问题,恰好普通版本的APP没有谷歌语音的...

2018-05-11 18:07:17 1719 2

原创 通过谷歌语音设置闹钟闹钟和定时器Google Voice Action

上一篇博文承诺要写一篇谷歌语音发起闹钟设置的博文,最近这个功能实现得差不多了。趁着今天有点时间,把他总结一下。国内由于一些众所周知的原因,谷歌服务一致不能再国内使用,颇有遗憾。加上国内手机厂商对谷歌原生系统做了大规模定制,谷歌语音被剔除,使用自家优化过,更符合国人使用的语音。前阵子老师要求在谷歌语音中加入APP的设置计时器和闹钟的操作,查了好久也没有查到,本以为是自己的查找方向有问题,后来发现,国...

2018-05-04 13:15:04 555

原创 无界面Activity或者APP的实现

最近在做一个谷歌语音调用APP设置闹钟的Issue,查看官方文档发现谷歌语音发送Intent给App时需要启动一个Activity,能不能使用Service或者广播去接收Intent呢?答案是不行的,使用普通的Activity有一个问题:每次语音发送Intent给APP的Activity的时候都要启动一次Activity,并且在无法接收到来自Activity的返回信息时,谷歌语会不断发送Inten...

2018-04-22 11:11:28 15432 10

原创 AndroidStudio报错 please select android sdk

从GitHub上download的项目,想看看运行效果,但是出现错误,项目不能运行,错误如下: 后来查看发现是SDK版本错误,这个项目的SDK太低,我的SDK版本高,不兼容导致的。问题找到了,剩下就是如何修改的问题了。 修改项目的SDK版本:File/Project Structure 把Complile Sdk Version 和BuildToolsVersion这两个版本修改一致...

2018-04-20 21:02:01 226

原创 This Gradle plugin requires a newer IDE able to request IDE model level 3.

今天用自己的笔记本上的2.3.1版本的AndroidStudio导入自己gitlhub上的一个项目,报一个错:This Gradle plugin requires a IDE able to request IDE model level 3.For Android Studio this means version 3.0+。 开始以为是项目的gradle版本问题,然后就一直在改...

2018-04-10 16:29:56 411

原创 ActionMode显示时ToolBar不隐藏问题

今天接受一个Bug,如下图,就是在点击某个按钮呼出ActionMode的时候,ToolBar并没有消失,而是被顶到ActionMode的下面。起初以为是开发小组里面的其他成员在写issue的时候不小心修改了布局的问题,于是拼命翻看提交记录,想从中找出问题,后来发现并没有对ActionMode做出修改,于是在网上找了ActinMode的详细使用,发现了其中的问题!在网上看到ActionMod...

2018-04-08 13:01:59 846

原创 RecyclerView有标题栏的分类列表 自定义列数(不同行设置不同个子项item)

上一个的实验室Issue前几天才完成,两个项目都实现了老师要求,算上中途多次放下去做其他issue,这个issue做了差不多有四个月了吧。还好不是改bug,不然四个月时间足够被批评n次了。趁着现在还有印象,把这个issue里最难搞的问题总结一下,之前做的过程也总结了一些遇到的问题,比如后台多个定时器同事运行的问题,settings界面的注意事项等都总结了,这次总结一下花费最多时间去想的问题,中途还...

2018-04-02 17:21:02 8239 4

java编程思想 第四版 pdf

本书的作者拥有多年教学经验,对C、C++以及Java语言都有独到、深入的见解,以通俗易懂及小而直接的示例解释了一个个晦涩抽象的概念。本书共22章,包括操作符、控制执行流程、访问权限控制、复用类、多态、接口、通过异常处理错误、字符串、泛型、数组、容器深入研究、Java I/O系统、枚举类型、并发以及图形化用户界面等内容。这些丰富的内容,包含了Java语言基础语法以及高级特性,适合各个层次的Java程序员阅读

2018-05-09

es6标准入门.pdf 第三版 阮一峰 中文 JavaScript

前端开发,es6 标准入门.pdf第三版 阮一峰 高清 JavaScript必看书籍,希望对你们有帮助

2018-05-05

通过谷歌语音Google Voice Action进行设置应用APP内的闹钟Alarm和计时器Timer的操作

这个demo展示了如何通过语音设置APP里面闹钟和计时器,通过语音实现某个APP的内容搜索或者其他功能操作和这个demo类似,有需要的伙伴可以参考一下代码。这是作者本人通过学习官方文档和自己摸索出来的,如果有哪里不足,希望指出,共同学习。谢谢!

2018-05-05

RecyclerView有标题栏的分类列表 自定义列数(不同行设置不同个子项item)

有时候需要对一些数据进行分类显示,还要显示他们的分类标题,普通的GridView是挺难实现的,因为GridView不支持不同行自定义列数,例如我想标题占满一行,其他子项每两个占一行。GridView也可以实现,需要对GridView的方法做大量地重写override,重绘等等,对一些像我这种菜鸟级别的人来说,门槛太高。后来发现可以使用RecyclerView实现这种功能,RecyclerView支持自定义不同列数

2018-04-02

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

TA关注的人

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