Flash AS3仿小米手机锁屏效果
昨天有个同事说喜欢小米手机的锁屏效果,仔细看了下,还真有点意思,于是就想用Flash仿一下,上午就挤时间摆弄了下,不是很像,但还是发出来献丑下吧。
下面就说一下我的思路,其实比较简单,关键就在于怎么分解过程的动画。
1.对舞台做屏幕截图,添加到舞台,然后移除舞台上其它元素,把舞台背景涂黑。
2.针对这个屏幕截图,就可以做各种操作了。我的动画思路是先压缩高度到3px同时拉伸宽度2倍,并对截图做颜色变亮的转换。
结束后再压缩宽度到0,同时高度也压缩到0,过程中缓冲动画使用了Quad.easeOut
中间也可以加一点滤镜。
这中间的同步动画就用了上次讲的利用TweenNano的onUpdate回调函数来实现。只需要计算一下对应的转换比例。
下面就是这个动作的部分源代码。
public function lockScreen(d:Sprite):void { var bmpd:BitmapData = new BitmapData(d.width, d.height); bmpd.draw(d); var bmp:Bitmap = new Bitmap(bmpd); d.addChild(bmp); while (d.numChildren > 1) { d.removeChildAt(0); } d.graphics.beginFill(0); d.graphics.drawRect(0, 0, d.width, d.height); d.graphics.endFill(); var dWidth:Number = d.width, dHeight:Number = d.height; var minHeight:Number = 3,fBlur:Number=10,maxWidth:Number=dWidth*2; var gFilter:GlowFilter = new GlowFilter(0xffffff, 1, 0, 0); bmp.filters = [gFilter]; var ctrans:ColorTransform = bmp.transform.colorTransform; var t:TweenNano = TweenNano.to(bmp, .2, { height: minHeight,width:maxWidth,x:(dWidth-maxWidth)*.5, y: (dHeight - minHeight) * .5,ease:Quad.easeIn, onUpdate:function():void { var ratio:Number = ((dHeight - minHeight)-(bmp.height - minHeight)) / (dHeight - minHeight); gFilter.blurX = ratio * fBlur; gFilter.blurY = gFilter.blurX; bmp.filters = [gFilter]; ctrans.redOffset = 255 * ratio; ctrans.greenOffset = 255 * ratio; ctrans.blueOffset = 255 * ratio; bmp.transform.colorTransform = ctrans; }, onComplete:function():void { t = TweenNano.to(bmp, .15, { width:0,ease:Quad.easeIn, onUpdate:function():void { var ratio:Number = bmp.width/maxWidth; bmp.x = (dWidth - bmp.width) * .5; bmp.height = ratio * minHeight; bmp.y = (dHeight - bmp.height) * .5; gFilter.blurX = ratio * fBlur; gFilter.blurY = gFilter.blurX; bmp.filters = [gFilter]; },onComplete:function():void { removeChild(bmp); destroy(); }}) }}); }
不过目前这个动画效果还不理想,回去再仔细比对下小米的效果再做改进。