异步编程的promise模式

作者:JerryXia | 发表于 , 阅读 (0)
好了,我们先来认识一下 Promise/A+规范:
一个promise对象有三种状态:等待(pending),已完成(fullfilled),已拒绝(rejected)一个promise对象的状态只能从 pending 转到 fullfilled或者rejected,不能逆向转换,并且fullfilled和rejected之间不能相关转换promise必须实现then方法,并且then必须返回一个promise,同一个promise可以连续调用then方法,执行的顺序与调用的顺序一致then方法有两个参数,第一个参数是成功时的回调(promise的状态从pending变成fullfilled时调用),第二个参数是失败时的回调(promise的状态从pending变成rejected时调用)。如果这两个回调返回了一个值x,如果x也是一个promise,那么x的状态将会被采用,简单点说如下:var promise2 = promise1.then(onFullfilled, onRejected);如果onFullfilled或者onRejected返回的值x也是一个promise对象,...阅读全文

打造接近native体验的h5日历选择组件

作者:JerryXia | 发表于 , 阅读 (0)

统一UI原生的select组件在不同平台有不同的UI表现,事件处理也各有各的坑,统一UI才是王道。那么该如何模拟实现这种3d滚动选择组件呢?
3d特效
试着想象一下,将一张长方形的纸卷曲形成圆柱体的过程,无非就是将无穷多个细小的长方形,以圆柱体的中心轴为基准,旋转一定的角度。只要角度是连续的,就可以形成曲面。这段话一时难以理解。我们认为每一个选择项的dom节点一开始是平面的,2d的,通过transform的rotateX(angle),rotateY(angle),rotateZ(angle)来实现3d旋转。
先简单理解一下rotateX,rotateY,rotateZ的直观效果
See the Pen RRYZkJby shelwinjue (@shelwinjue) on CodePen.(注意,要搭配透视perspective属性才能看到上面的效果)
很明显我们应该使用rotateX属性来形成曲面。但是,但是,有一个属性刚刚被我们忽略了。那就是transform-origin属性,为了形成3d的曲面,除了rotate的角度,还有一个关键性的因为,就是transfor...阅读全文

Android鬼点子-上手自定义View | GreendaMi'Blog

作者:JerryXia | 发表于 , 阅读 (0)
Dots preloader       Android自定义View也算是Android程序猿们基本技能了,所以最近想试着上周做一做。作为入门,就以一个简单的不响应触摸事件的View开始吧!
       我在https://material.uplabs.com/posts/dots-preloader上看到的下面的效果,那么动手实现一下吧 
在OnMeasure()方法中,获取属性值,测量自定义控件的大小,使自定义控件能够自适应布局各种各样的需求。在attr.xml中
123<declare-styleable name="DotsPreloader"><attr name="Circlecolor" format="color"></attr></declare-styleable>在构造方法中获取属性,设置点点的颜色
12345678910111213141516171819202122232425262728293031323334353637383940TypedArray a = context.obtainStyledAttributes(attrs , R....阅读全文

Android鬼点子-View的事件分发机制 | GreendaMi'Blog

作者:JerryXia | 发表于 , 阅读 (0)
       今天来说说View的事件分发机制,其实这个问题也困扰了我很久,今天终于找了个事件,和大家一起把这里理顺!
       一个完整的事件是从手指接触到屏幕开始,手指离开屏幕结束。即以down事件开始,然后可能是若干个move事件,最后是up。
       首先,一个事件是这样传递的:Activity->Window(PhoneWindow)->View。其中View中的事件传递机制如下:ViewGroup->View->子View。如果一个子View没有处理收到的事件(onTouchEvent返回false),那么这个事件会交给它的上级处理。如果所有元素都不处理这个事件,那么最后出手的会是Activity的onTouchEvent。
       其次,点击事件的分发是由下面3个很重要的方法共同决定的。
public boolean dispatchTouchEvent(MotionEvent ev);  用来进行事件分发表示是否消耗当前事件。
public boolean onInterceptTouchEvent(MotionEvent ev);  判断是否...阅读全文

Android鬼点子-使用ViewStub进行延迟加载 | GreendaMi'Blog

作者:JerryXia | 发表于 , 阅读 (0)
       Android鬼点子系列隆重登场,这个系列主要讲述的一些在开发中可能会提高程序质量,或者提高开发效率的鬼点子!第一篇就来说说ViewStub。
       让View进行延迟加载这件事,在实际开发的尝尽中是很常见的。比如,在一个ListView中,使用了2级菜单。点击了一个Item中的按钮,以个Item就会展开,这里展开的内容就是咱们说到的延迟加载的内容。这样做的好处就是提高渲染效率,减少内存消耗。
       ViewStub是一个不可视并且大小为0的视图,可以延迟到运行时填充布局资源。当ViewStub设置为Visible或调用inflate()之后,就会填充布局资源,ViewStub便会被填充的视图替代。以上是官方介绍。
       下面写一个简单的例子。界面上放一个Button,点击Button,打开隐藏的部分。
       布局文件文件中使用了include标签,使用include标签是为了避免代码的重复。后面会介绍include标签与marge标签的区别。
mainactivity.xml1234567<?xml version="1.0" ...阅读全文