自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 在游戏中看状态机与状态模式

状态机与状态模式状态机最早接触状态机这个词来自编译原理的学习,在词法分析中,通过有限状态机来进行单词识别。状态机在里面被定义为一个数学模型,一个五元组。 截图来自维基百科对于Android开发者,可能最为熟知的就是MediaPlayer的状态机图了状态机一般有四个要素现态:状态机当前所处的状态条件:触发动作或者状态迁移的条件(在按键系统中,就是指按键的值)动作:条件满足后执行的动作(也就是响应各个任务,在代码中往往一个动作对应一个方法)次态:动作完成后要迁移的下个状态上图中蓝色圆圈

2021-07-27 09:47:13 351

原创 Kotlin写一个解释器(3)---解释执行

前言之前通过Kotlin写一个解释器(1)—词法分析,Kotlin写一个解释器(2)—语法分析,我们得到了一个抽象语法树,通过遍历抽象语法树,我们就可以得到相应的计算结果。计算通过后续遍历,我们可以得到相应的计算结果。class Interpreter(private val parser: Parser) { fun interpret():Int { val ast = parser.parse() return visit(ast) }

2021-06-07 19:43:08 254 3

原创 无用系列——3D球体文字云

起因前些日子在网上看到了一个h5的比较炫的3D球体文字效果,感觉挺有意思,就准备在Android侧进行一下复现,废话少说,先看一下效果(gif看上去有些卡,实际不会)卡核心原理文字坐标首先要做的就是为每个文字确定一个坐标,Android采用的是左手坐标系,而且我们的效果又是一个球体,所以我采用了球面坐标系计算每个文字的坐标。y = radius * cos(Math.toRadians(this.upDegree))z = -radius * sin(Math.toRadians(this.u

2021-05-16 17:29:46 453

原创 Kotlin写一个解释器(2)---语法分析

语法之前的文章中我们写了一个简单的词法分析器,具体见文章(Kotlin写一个解释器(1)—词法分析),有了词,那么如何将这些词组合成正确的句子呢?这里就是语法分析要做的了,首先说什么是语法,简单来说语法就是用词构成句子的规则。比如说汉语中我们常见的句子构造一般由主语+谓语+宾语构成,比如小明玩游戏,其中小明按照词类来看属于名词,这里作为主语,玩按照词类来看是动词,属于谓语,游戏按词类来看是名词,属于宾语。语法分析的目的就是根据之前词法分析获得的词法单元的序列判断是否符合相应的语法要求。上下文无关语法.

2021-04-30 08:54:57 293

原创 Kotlin写一个解释器(1)---词法分析

为什么学最近对编译器很感兴趣,为什么要学习编译原理,于我而言是因为最近需要写一个DSL,需要一个解释器,而对于大部分程序员来说,学习编译器可能有一下三个方面:(1)学习编译器设计,可以帮助更好的理解程序以及计算机是怎么运行的,同时编写编译器或者解释器需要大量的计算机技巧,对技术 也是一个提升。(2)面试需要,所谓“工作拧螺丝,面试造火箭”。学习编译器设计有助于加强计算机基础能力,提高编码素养,更好的应对面试,毕竟你不知道你的面试官是不是对这个也感兴趣。(3)工作需要,有的时候你可能需要创造一.

2021-04-20 10:58:37 283 5

原创 老砒霜和小创创---小朋友,你这样就别怪叔叔坏心眼了

事情创创是我儿子的小名,快两岁了,周末带他去了一个小花园玩,那里有个类似小隧道的玩具,小朋友可以从那里的一头钻进去,再从另一头钻出来,创创也想玩,但是有个四五岁大的小男孩堵在那个小隧道里,他可能把自己当山大王了,只要看到别的小朋友要钻,他就跑到隧道的另一头进去,堵在那里不然过,别的小朋友走了他也走。创创两次走到那里要钻,他都堵在里面,我跟创创说,让小哥哥先过去,他也不动。终于,在第三次我儿子想过的时候,他又来了,我可以看出创创很想过,但是那个小男孩堵在里面,他有点害怕,于是我说:“来,儿子,爸爸带你钻过.

2021-03-31 17:36:06 127

原创 使用vscode开发Android从开始到放弃

使用vscode开发Android从开始到放弃

2021-03-15 08:59:29 26324 15

原创 老砒霜买房记---程序员被北京大爷按在地上摩擦

背景年前盘了盘手里的钱,感觉差不多了,觉得是时候买房了,毕竟租房还是每个月的房租不如拿来还房贷。然后就在年后连续看了两周的房。在我这次购房经历中,最有意思的是两个北京大爷,真是实实在在的把我按在地上摩擦。大爷A:老子有人,听老子的大爷A是个北京人,住在通州,家里有四套房子,三套房子在自己的名下,一套在自己儿子名下,我当时看中的就是他儿子名下的这套房子,这套房子是个二居室,楼层装修都挺不错,还是婚房,就是采光差一些,当时看房子的时候大爷的儿子接待的我们,跟他儿子交流的时候就感觉怎么这个老哥反应总是慢半

2021-03-08 22:29:10 204 1

原创 老砒霜写插件(1)----Gradle插件基础以及一个简单的打印插件

Gradle干嘛的Gradle是一款自动化开源构建工具,目前android开发者好像没有谁离开它(当然,有那种大神自己通过命令行编译的,不在范围内)。什么是构建工具,对于android开发者简单来说就是将你的代码和资源等等构建出相应的apk或者aar。下面这张图是android的打包流程图可以发现是身份复杂的,包括java代码的编译,dex文件的生成,apk签名等等一系列工具过程,如果每一个节点都由开发者自己去做,那无疑对生产效率是大打折扣,而gradle通过自身提供的api可以让这一系列流程结合起来

2021-02-26 17:49:02 305

原创 阿呆的“发财日记”

发财vs财富自由阿呆躺在床上,最近他的脑子里经常会出现两个字—发财,当然,现在人已经用财富自由来代替发财这两个字了,发财显得比较低俗,财富自由显得比较高雅,这不禁给人一种孔乙己的感觉。阿呆是一个土逼的小程序员,喜欢技术,水平也算是不好不坏,要说挣得吧也不算少,但是离财富自由那还是差着十万八千里了,本来他的内心还是比较安定的,之前思考的还是如何更好的构建自己的知识体系,把技能弄实,但是短短一个月发生的一系列事情让他对“发财”这件事又有了新的想法,自古都是从来方寸地,易起是非心。啥?慢手真的上市了?

2021-02-18 23:38:36 277 4

原创 搞基础系列-Linux系统-shell脚本的编写

前言作为一个Android开发者,可能大部分时间都放在了上层的代码编写和学习上,对于一些基础的东西像操作系统、网络、数据结构与算法还有设计模式可能了解不多,搞基础系列准备以个人的经验为出发,整理一些个人认为比较重要的,对工作有帮助的一些基础知识点,虽不能面面俱到,但力求包含重点常见知识,这不仅是一个分享,也是个人学习的记录和总结。Linux学习路线(这个路线图只是从自己的经验和实际出发得出...

2020-03-29 16:18:26 119

原创 搞基础系列-Linux系统-文件权限与目录配置

前言作为一个Android开发者,可能大部分时间都放在了上层的代码编写和学习上,对于一些基础的东西像操作系统、网络、数据结构与算法还有设计模式可能了解不多,搞基础系列准备以个人的经验为出发,整理一些个人认为比较重要的,对工作有帮助的一些基础知识点,虽不能面面俱到,但力求包含重点常见知识,这不仅是一个分享,也是个人学习的记录和总结。Linux学习路线(这个路线图只是从自己的经验和实际出发得出...

2020-03-23 21:37:21 198

原创 android LiveData源码分析--源码阅读100天(2)

0.介绍LiveData,同属于JetPack构建集合,根据文档描述LiveData是一个可观察的数据持有者类。与常规observable不同,LiveData是生命周期感知的,这意味着它尊重其他应用程序组件的生命周期,例如Activity,Fragment或Service。此感知确保LiveData仅更新处于活动生命周期状态的应用程序组件观察者。优势(以下摘自google文档,google翻...

2018-11-21 21:27:08 140

原创 android Lifecycle源码分析--源码阅读100天(1)

1.使用Lifecycle框架用来感知组件执行操作以响应另一个组件(例如Activity和Fragment)的生命周期状态的更改。这些组件可帮助您生成更易于组织且通常更轻量级的代码,这些代码更易于维护。举个例子:如果你需要在Activity或者Fragment的声明周期里做一些处理:override fun onCreate(savedInstanceState: Bundle?) { ...

2018-11-20 21:16:01 165

原创 Android bind service讲解以及跨进程通信

Android bind service讲解以及Messenger跨进程通信

2016-04-26 19:05:45 4242 1

原创 一个Demo学习Notification

Notification 、Android

2016-04-11 19:05:38 598

原创 使用ViewGroup实现RecyclerView

viewgroup recyclerview

2016-03-27 10:47:14 386

原创 Android Studio在集成了ShardSDK的项目中进行代码混淆

1、这里使用默认的混淆规则,所以只要将app里的build.gradle中的minifyEnabled的值设为true即可,这个参数就是允许代码混淆。 2、要保证ShardSDK module里的类不被 混淆,所以要在app下的proguard-rules.pro里添加两行代码 (1)-keep class cn.sharesdk.**{*;} 这段代码就是保证在cn.shardsdk包名下的

2015-07-31 08:18:48 457

原创 HTTP请求:POST和GET的区别

HTTP请求

2015-05-17 19:12:34 323

原创 那些年接入Google程序内购买遇到的坑

Google程序内购买

2015-05-10 16:27:33 381

原创 小知识点

根据包名来判断设备是否安装了某程序try

2015-05-03 07:43:36 413

原创 Android Deeplink 功能实现

要实现DeepLink功能

2015-04-25 19:37:57 25423

原创 4月13-4月17工作总结

工作总结

2015-04-18 22:14:04 326

原创 Service学习

Service学习

2015-04-11 20:44:51 382

原创 4月6日——4月10日工作总结

4月6日——4月10日工作总结

2015-04-11 20:05:57 324

原创 3月30日——4月6日工作总结

3月30日——4月6日工作总结

2015-04-06 18:49:40 378

原创 3月23--3月27工作总结

3月23--3月27工作总结

2015-03-29 19:45:28 297 1

原创 删除"急速装机”启动项

删除”急速装机”启动项

2015-03-29 19:36:36 506

原创 Surface、SurfaceView和SurfaceHolder的理解

Surface、SurfaceView和SurfaceHolder的理解

2015-03-21 11:35:45 451

原创 BaseAdapter中的ConverView的作用和ListView的优化

BaseAdapter中的ConverView的作用和ListView的优化

2015-03-21 11:26:12 588

原创 一周工作问题总结

一周工作问题总结 (1) SimpleAdapter 不支持非drawable资源的图片,也就是说图片要放在drawable文件里  (2)浏览器无法使用,提示代理服务器连接失败或无法连接到代理服务器的解决方法:     首先在浏览器中打开Internet选项,然后选择连接选项卡,点击局域网设置,在局域网设置的代理服务器下面有一项为LAN使用代理服务器,如果它选中了,就取消选中。重

2015-03-21 10:44:30 339

原创 svn的import,add

只有带.svn的工程才能使用add,服务器上的路径和本地是对应的,不能修改;import导入的文件不需要带svn信息而且要选择服务器的路径。

2015-03-21 09:49:42 1116

原创 Android Fragment使用中遇到的几点问题

Android Fragment使用中遇到的几点问题                                             首先要讲一下LayoutInflater对象的inflate方法,在这个方法中有三个参数(int resource,ViewGroup root,boolean attachToRoot),resource为要实例化的布局文件,root为该布局文件的

2015-03-14 20:08:24 449

原创 关于PopuWindow不能显示的问题

关于PopuWwindow不能显示的问题       调用PopuWindow时,已经实例化了PopuWindow并且调用了PopuWindow的setContentView方法,但是就是不能显示出这个PopuWindow,原因就在于你没有设置PopuWindow的高和宽,调用PopuWindow的setHeight和setWidth方法来设置PopuWindow的高和宽,例如pw.set

2015-03-14 19:50:18 808

原创 Java环境变量的作用和设置

Java环境变量的作用和设置                     Java的环境变量设置有三个JAVA_HOME,PATH和CLASSPATH,JAVA_HOME即为jdk的安装路径,PATH使得系统可以在任何路径下识别java命令,CLASSPATH为Java加载类路径,只有类在CLASSPATH中,java命令才能识别它。PATH设置:%JAVA_HOME%\bin;%JAVA_H

2015-03-14 19:14:42 287

原创 用gradle编译module中的libs里的包

在moudle的buiild.gradle文件中输入dependencies{compile fileTree(include:'*.jar', dir:'libs')}这样在libs里导入

2015-03-14 12:53:00 696

原创 Android Studio 1.0 导入第三方类库的方法

1.import module要导入的类库2.右击要添加类库的module,选择Open Module Settings,添加类库3.参照自己module的build.gradle文件修改类库的build.gradle文件android {    compileSdkVersion 21    buildToolsVersion "21.1.1"    defaultCon

2014-12-18 12:49:23 301

空空如也

空空如也

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

TA关注的人

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