作者:刘丰恺
作者博客:若梦浮生
转载请注明文章来源
我们在开发自定义控件的时候经常会有这样的需求,一个控件既需要能够被拖拽,也需要能够被点击。其实这个需求有个矛盾之处,需要被拖拽就要复写onTouch(...)函数,但是这样点击事件就被覆盖了,正常的 onClick() / onLongClick()事件是不能被响应的了。
现在面对这种情况GestureDetector,ViewDragHelper能为我们的开发提供一些便利,但是有的情况下这些封装的工具类没办法很好的满足我们的需求,这时候我们就需要自己来模拟View的点击事件。
模拟View点击事件说起来也很简单,说白了就是获
继续阅读 »
众所周知,Android的设计架构一直为人所诟病,模块的分割不清,很容易造成新手的困惑和迷茫,并且写出来的代码非常混杂,Activity即包含UI的处理,还包括数据的具体处理,让一个Activity弄出好几千行的容量,而且代码非常不清晰,可读性比较差。
所以在Android的开发过程中,一直没有一个统一的开发模式,MVC、MVP、MVVM都有出现,不过之前Google在Github开源的一个开源库to-do-mvp ,Google提供了他们对MVP的一个范式,我们一次为基础谈谈Android 的MVP的应用。
What is MVP?
MVP 指的是“models-views-pre
继续阅读 »
ArrayList 和 LinkedList 是在开发过程中 常用的数据结构
分别代表了数组和链表,其实本身的实现都非常简单,所以Source Code
Read 就先从这两个开始。
ArrayList
ArrayList 从名字上就可以看出这个容器的本质,是用一个数组反复的进行自增实现的,ArrayList几乎是最经常被使用的List的实现了,平时可以使用线性数据结构的时候,通常都会选择ArrayList。但是容器的选取也要考虑到实现的方式和你需要的应用。比如说数组长于索引,弱于扩容和删除,但是链表长于扩容和删除,但是寻找某个具体节点的时候,没办法靠基址寻址来实现,而是要用指针不断的
继续阅读 »
动态ID?
xml
我们最习惯的ID设置方式大概就是这样了,在xml中直接使用android:id为一个View添加ID。但是这并不能解决所有的问题,我们有很多的View都是动态创建,还有的是自定义控件生成的,例如我们要在代码里实现相对布局,那我们就必须拿到相对的基准View的ID,但是这样就没办法直接使用xml进行定义了。
不过我想大家都知道就想我们通常能够用view.getId()一样获取到View的ID,我们也能够用view.setId(int id)来为View设定ID。不过这就出现了一个很严重的问题ID是个int类型的数字,那我们什么都可以设置吗?
ID的使用方式
继续阅读 »
之前看龙书的时候,龙书提到可以在编译器里用动态的生成的NFA自动机来动态匹配自己的输入串,NFA的简单实现其实写起来非常简单,但是我是实际凭感觉写完之后,却觉得并不是非常的好用,在处理自己已经输入过的串,如果还要处理空串和一个符号对应多种路径就势必涉及回溯,所以我就动态生成了一个DFA,应该不是最简的,但是也能满足需求。
DFA状态
``` java
package sample;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
/**
* Dfa 状态
*
* @author
继续阅读 »
有穷自动机
为了实现对于正规式(可理解为正则表达式)的识别,我们提出了有穷自动机理论,有穷自动机接受正规式的定义符,并不断的识别符号,移动到新的状态,如果出现了识别错误就会报错。
有穷自动机包含确定的有穷自动机(DFA),和不确定的有穷自动机(NFA)。两者的主要区别在于,在同一个状态时,是否通过同样的符号输入能达到不同的状态。如果能就是不确定的,反之就是确定的。另外:NFA还可以接受空字串已达到不同的状态。
三个主要的算法
这其中有三个主要的算法:
正规式 => NFA Thompson算法
这个算法使用了一些模版去对应正则表达式中的符号,只要记住模版,就能推出相应的NFA。
继续阅读 »
原文链接 : https://lfkdsk.github.io/
原文作者:lfkdsk
可以参考我写得代码:First&Follow
这次我们来讲一个学习编译原理的常见项目,对一个非终结符和一个产生式集求First&Follow集。这是很简单和基础的内容,但是国内的教科书,又犯了计科类教材经常出现的毛病,爱乱给东西起名字,而且还讲不清概念,所以在学习编译原理的时候我记了一本笔记,专门用来翻译国内教材书上的概念到底是怎么回事。
闲话少说我们先来把First&Follow集说清。
1.First集求法
First的本质意义在于处理字符流的前驱子串,比如在LL构建预测分析表的时候就
继续阅读 »
几种常用算法
我们日常会用正则表达式的时候,我们会发现正则表达式用了非常精简的语法就能概括多种输入串的特征,
继续阅读 »
请问要来点魔法么?
但凡大型应用开发完成之后大多都会留一些用于调试的建议接口,就像微信之前的通过输入呼出的隐藏按钮,系统上的隐藏功能也不例外,从纯粹的java机时代就有各家厂商留下来的隐藏呼出代码,一般用于查看内存啊,强制重启啊,查看电量消耗什么的,多数用组合键或者是号码簿呼出的。Android平台之前也流传过很多假的SecretCode,但是其实SecretCode是真实存在于Android平台上的,并且我们也有机会实现自己的SecretCode。
SecretCode在Android上大多数是由拨号盘输入特定序列触发的,其实质上也不过是一个特殊的全局广播的收发,我们之前应该学过广播接收
继续阅读 »
今年的高考在今天结束了,这对我实在没什么实感,仔细一想高考都是两年前的事情了。两年过去了当年的高中同学也都风流云散了,保持联系的人也不是太多了。这都是无可避免的事情,活着不过是迎来送往。不过今天听妈提到她的一个同事的侄子,他比我小一届吧,之前他的事我高中的时候也有所耳闻,上一次考试失利,这次复读重考。听到这个消息才让我又想起来我的高考了。
“梦回吹角连营”,对于这个题目我觉得这句真是太恰当了,高考对于我来讲真的是一场战争,一生的梦魇。有的时候和朋友谈起高考,我都会选择一些轻松的语调去描述我的高考,说说自己那时候也贪玩,也不听课,也会和朋友去网吧。但说实话这描述虽是实情,但是要说我整个
继续阅读 »