遊戲/程序/更新/二次開發/小作品相關發佈
Jul
26
最近花费了两周的时间对RecyclerView进行了再解耦和结耦封装,以达到以更优雅的方式满足业务需求,并且能方便的应用到之后的业务中去。最终目标是对于不复杂的列表,可以在数行代码内搞定列表配置与数据绑定;对于较为复杂的列表,可以以非常清晰的代码完成工作。
Jul
6
在做比较复杂的界面交互的时候,不可避免的会遇到用户手势识别和处理。最简单的触控事件处理当然是对touch事件获得的MotionEvent对象进行记录与分析即可。当然,这种较为原始的方法并不适合复杂的交互处理,应该安卓sdk也提供了比较高级的手势(Gesture)处理机制。
1.GestureDetector
GestureDetector是最方便的处理手势的方式,创建它的时候需要实现一个listener,这是GestureDetector的核心处理接口。这个listener有两种,一种是:
1.GestureDetector
GestureDetector是最方便的处理手势的方式,创建它的时候需要实现一个listener,这是GestureDetector的核心处理接口。这个listener有两种,一种是:
Jun
17
反射是在初学java的过程中反复提及的概念与操作方式。浅显的理解反射的话,它是一组api,让你可以在程序运行时了解并获得程序内部结构,就像镜子一样,在镜子中看到程序自己本身。然后,动态的对程序本身进行修改与操作。当然,这种看起来另辟蹊径的程序运行方式一般来说并不推荐,适用场景往往出现在需要动态注入代码,调用非可见属性方法等需要高灵活性的使用场景中。那么在oc中,是否也有类似的功能呢?有过之而无不及,oc的runtime库就可以完全做到这些东西。
Jun
12
前几日为已经配置好cocoapods的项目配置单元测试,本来事前已经做好单测的准备工作,甚至单测的demo都写好了,一往项目中搭,却遇到了很多意外的问题,折腾了整整一天,特此记录。
1.一开始,什么也没做,就直接放入了准备好的单测程序,然后运行。当然,gg,编译不通过。仔细一看编译失败的原因,它告诉我是“Libraries not found”。原来如此,可以想想确实并没有通过pods把那么多第三方库引入嘛。好,那么参考这篇问答(http://stackoverflow.com/questions/14512792/libraries-not-found-when-using-cocoapods-with-ios-logic-tests,注意,这是本文最大的坑)的最佳答案,我把我们的podfile改成了其中推荐的形式即:
1.一开始,什么也没做,就直接放入了准备好的单测程序,然后运行。当然,gg,编译不通过。仔细一看编译失败的原因,它告诉我是“Libraries not found”。原来如此,可以想想确实并没有通过pods把那么多第三方库引入嘛。好,那么参考这篇问答(http://stackoverflow.com/questions/14512792/libraries-not-found-when-using-cocoapods-with-ios-logic-tests,注意,这是本文最大的坑)的最佳答案,我把我们的podfile改成了其中推荐的形式即:
Jun
6
链式编程,形如instance.do1().do2().do3().dolast();大家都知道是怎么实现的,即每个实例方法的返回值均为this,以保障可以继续进行方法调用。这样的编程方式对比较连贯的操作中,能有效提升代码可读性,使用起来也非常舒服。在比较复杂的链式编程,比如rxjava,参数包涵lambda表达式或者其它复杂的运算的时候,我们为了代码的可读性,一般会对每个方法进行提行编写,比如下面这段java代码:
FPHttp.call()
.userInfo(String.valueOf(user.id), user.token)
.map(rider -> {
rider.data.uid = user.id;
RiderModel.getInstance().saveRider(rider.data);
return rider.data;
})
.map(rider -> rider != null)
.distinctUntilChanged()
.subscribe(hasRider);
May
26
0.简介
代码静态分析从广义上讲,是指在不运行计算机程序的条件下,进行程序分析的方法。具体分析的包括语法错误,可能出现的程序错误,代码样式规范等内容。大部分的静态程序分析的对象是针对源代码的,也有些静态程序分析的对象是中间代码或者目标代码的,总之以不同的目的会有不同的需求。
对代码进行静态分析,主要目的还是通过这一种辅助手段,减少代码出错的可能性,提升代码间接性,可读性等多方面工程化性质,间接提升工程质量,降低开发成本。
代码静态分析从广义上讲,是指在不运行计算机程序的条件下,进行程序分析的方法。具体分析的包括语法错误,可能出现的程序错误,代码样式规范等内容。大部分的静态程序分析的对象是针对源代码的,也有些静态程序分析的对象是中间代码或者目标代码的,总之以不同的目的会有不同的需求。
对代码进行静态分析,主要目的还是通过这一种辅助手段,减少代码出错的可能性,提升代码间接性,可读性等多方面工程化性质,间接提升工程质量,降低开发成本。
May
2
1.简介
ES6生成器,即generators。生成的是啥?是一个迭代器的生成器,语法参考于c#与python的完全相同的功能,以yield为关键字做为生成器的临时退出点。简单的举举栗子,如果是一个普通的函数,写起来大概是这样的:
如果是一个生成器,它看起来会是这样的:
ES6生成器,即generators。生成的是啥?是一个迭代器的生成器,语法参考于c#与python的完全相同的功能,以yield为关键字做为生成器的临时退出点。简单的举举栗子,如果是一个普通的函数,写起来大概是这样的:
function foo(){
//dosomethings
return answer;
}
foo();
如果是一个生成器,它看起来会是这样的:
Apr
8
界面扭曲,听起来就是高大上酷炫屌的的动效,说起界面扭曲特效,常见的系统中,iOS和OSX的动效中会稍有出现,印象比较深的当年ubuntu就有很多3d特效之类的涉及到界面扭曲,微软平台上有WindowsFX软件可以做到类似的事情。而回到安卓,大概系统动效里面完全没有扭曲效果吧。
扭曲效果往往被扣上好看不实用的标签,但是在一些比较注重界面交互与动效的app上,还是有存在的必要性的。那么扭曲效果与其它界面变化有什么不同呢?相对于移动旋转缩放,包括看起来高大上的3d旋转,它们最大的特点是,可以用矩阵来表示这一变化,在显示层也就是把矩阵叉乘到原本参数上的事儿。而扭曲,就是一个远比这个复杂的工作了。
在实际使用中,常见的app使用场景包括:图像弯曲贴图(静态),精确的大块图/界面回弹动画,翻页效果等。
扭曲效果往往被扣上好看不实用的标签,但是在一些比较注重界面交互与动效的app上,还是有存在的必要性的。那么扭曲效果与其它界面变化有什么不同呢?相对于移动旋转缩放,包括看起来高大上的3d旋转,它们最大的特点是,可以用矩阵来表示这一变化,在显示层也就是把矩阵叉乘到原本参数上的事儿。而扭曲,就是一个远比这个复杂的工作了。
在实际使用中,常见的app使用场景包括:图像弯曲贴图(静态),精确的大块图/界面回弹动画,翻页效果等。
Apr
1
RenderScript是安卓3.1引入,安卓4.0全面推开,且通过兼容包最低可兼容到安卓2.2的一种脚本语言工具。它虽然叫script,但它是一门以c99位基础的类c语言,看起来会觉得有点像GLSL(opengl着色器语言,事实上功能上也很像),并且它确实和安卓的jvm和其它脚本解释器无关,而是通过编译为llvm运行在本地代码上。
它的名字虽然叫render(渲染)script,但它的实际功能缺并不仅限于渲染或者绘制相关的东西,而是一个解决数据密集型计算的通用解决方案。就现在的api来看,renderscript的api的功能包括:基本数学,向量,矩阵,四元 / 多线程,gpu调用,时间 / 输入输出对象;曾经还有图形绘制的api,不过在安卓api23已经被弃用了,当然现在也就不推荐使用了。可以看到,api主要实现的功能是数学,图形学运算(类似于GLSL)与高效集成计算构架(类似于CUDA,openCL)。目标当然一目了然。
它的名字虽然叫render(渲染)script,但它的实际功能缺并不仅限于渲染或者绘制相关的东西,而是一个解决数据密集型计算的通用解决方案。就现在的api来看,renderscript的api的功能包括:基本数学,向量,矩阵,四元 / 多线程,gpu调用,时间 / 输入输出对象;曾经还有图形绘制的api,不过在安卓api23已经被弃用了,当然现在也就不推荐使用了。可以看到,api主要实现的功能是数学,图形学运算(类似于GLSL)与高效集成计算构架(类似于CUDA,openCL)。目标当然一目了然。
Feb
20
BackAndroid是在ReactNative中专门处理安卓的物理按键back的类。类的用法很简单...但是感觉api设计不咋地合理,无论用什么姿势使用坑都挺大的。
官方文档(http://facebook.github.io/react-native/docs/backandroid.html#content)给的例子,这个类包含了3个api,分别是:
- static exitApp()//退出app
- static addEventListener(eventName: BackPressEventName, handler: Function)//添加事件监听
- static removeEventListener(eventName: BackPressEventName, handler: Function)//移除事件监听
官方文档(http://facebook.github.io/react-native/docs/backandroid.html#content)给的例子,这个类包含了3个api,分别是:
- static exitApp()//退出app
- static addEventListener(eventName: BackPressEventName, handler: Function)//添加事件监听
- static removeEventListener(eventName: BackPressEventName, handler: Function)//移除事件监听