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();
		}})
		
	}});
}

 

不过目前这个动画效果还不理想,回去再仔细比对下小米的效果再做改进。