Flex 實(shí)現(xiàn)可以拖動(dòng)的毛玻璃效果
更新時(shí)間:2009年11月15日 22:41:01 作者:
這是一個(gè)使用Flex實(shí)現(xiàn)的可拖動(dòng)的毛玻璃效果(效果在文章后面),具體我就不說(shuō)了,直接帖代碼。
復(fù)制代碼 代碼如下:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" clipContent="true" verticalScrollPolicy="off" horizontalScrollPolicy="off"
width="100%" height="100%" horizontalAlign="center" verticalAlign="middle" backgroundColor="#FFFFFF"
creationComplete="onCreationComplete(event)" mouseUp="onMouseUp(event)" mouseMove="onMouseMove(event)">
<mx:Script source="FrostedGlass.as"/>
<mx:Container id="ctlContainer" x="0" y="0" width="100%" height="100%"
clipContent="true" horizontalScrollPolicy="off" verticalScrollPolicy="off">
<mx:Image horizontalAlign="center" id="ctlImage" x="0" y="0" width="1024" height="768" maintainAspectRatio="true"
source="@Embed(source='images/bg.jpg')"
/>
</mx:Container>
<mx:Box borderStyle="solid" borderThickness="1"
borderColor="#000000" render="onBoxRender(event)"
x="200" y="200" height="200" width="400" id="ctlBox"
filters="{[new DropShadowFilter(5, 45, 0x000000,0.5)]}"
mouseDown="onMouseDown(event)" />
</mx:Application>
此場(chǎng)景對(duì)應(yīng)的類(lèi)為:
復(fù)制代碼 代碼如下:
// ActionScript file
import flash.display.BitmapData;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.filters.BlurFilter;
import flash.geom.Matrix;
import flash.geom.Point;
import flash.geom.Rectangle;
private var m_mouseDown : Boolean = false;
private var m_offsetPt : Point;
private function onCreationComplete(evt:Event) : void
{
onBoxRender(null);
}
private function onBoxRender(evt:Event) : void
{
if( ctlContainer.width > 0 && ctlContainer.height > 0 )
{
var bmpData : BitmapData = new BitmapData( ctlContainer.width, ctlContainer.height, false);
var matrix : Matrix = new Matrix();
// 對(duì)矩陣進(jìn)行平移變換
matrix.translate( -1 * ctlBox.x, -1 * ctlBox.y);
// 將背景填充到移動(dòng)元件上來(lái)
bmpData.draw( ctlContainer
, matrix
, null
, null
, new Rectangle( 0, 0, ctlBox.width + 4, ctlBox.height + 4) // 裁剪區(qū)域
);
bmpData.applyFilter( bmpData
, new Rectangle( 0, 0, bmpData.width, bmpData.height)
, new Point( 0, 0)
, new BlurFilter( 5, 5, 5) // BlurFilter的參數(shù)越大計(jì)算量越大 移動(dòng)的時(shí)候越卡
);
ctlBox.graphics.beginBitmapFill(bmpData, null, false, false);
ctlBox.graphics.drawRect( 0, 0, ctlBox.width, ctlBox.height);
ctlBox.graphics.endFill();
}
}
private function onMouseDown(evt:MouseEvent) : void
{
m_mouseDown = true;
m_offsetPt = new Point( ctlBox.mouseX, ctlBox.mouseY);
}
private function onMouseUp(evt:MouseEvent) : void
{
m_mouseDown = false;
evt.updateAfterEvent();
}
private function onMouseMove(evt:MouseEvent) : void
{
if( m_mouseDown )
{
ctlBox.x = evt.stageX - m_offsetPt.x;
ctlBox.y = evt.stageY - m_offsetPt.y;
evt.updateAfterEvent();
}
}
// ActionScript file
import flash.display.BitmapData;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.filters.BlurFilter;
import flash.geom.Matrix;
import flash.geom.Point;
import flash.geom.Rectangle;
private var m_mouseDown : Boolean = false;
private var m_offsetPt : Point;
private function onCreationComplete(evt:Event) : void
{
onBoxRender(null);
}
private function onBoxRender(evt:Event) : void
{
if( ctlContainer.width > 0 && ctlContainer.height > 0 )
{
var bmpData : BitmapData = new BitmapData( ctlContainer.width, ctlContainer.height, false);
var matrix : Matrix = new Matrix();
// 對(duì)矩陣進(jìn)行平移變換
matrix.translate( -1 * ctlBox.x, -1 * ctlBox.y);
// 將背景填充到移動(dòng)元件上來(lái)
bmpData.draw( ctlContainer
, matrix
, null
, null
, new Rectangle( 0, 0, ctlBox.width + 4, ctlBox.height + 4) // 裁剪區(qū)域
);
bmpData.applyFilter( bmpData
, new Rectangle( 0, 0, bmpData.width, bmpData.height)
, new Point( 0, 0)
, new BlurFilter( 5, 5, 5) // BlurFilter的參數(shù)越大計(jì)算量越大 移動(dòng)的時(shí)候越卡
);
ctlBox.graphics.beginBitmapFill(bmpData, null, false, false);
ctlBox.graphics.drawRect( 0, 0, ctlBox.width, ctlBox.height);
ctlBox.graphics.endFill();
}
}
private function onMouseDown(evt:MouseEvent) : void
{
m_mouseDown = true;
m_offsetPt = new Point( ctlBox.mouseX, ctlBox.mouseY);
}
private function onMouseUp(evt:MouseEvent) : void
{
m_mouseDown = false;
evt.updateAfterEvent();
}
private function onMouseMove(evt:MouseEvent) : void
{
if( m_mouseDown )
{
ctlBox.x = evt.stageX - m_offsetPt.x;
ctlBox.y = evt.stageY - m_offsetPt.y;
evt.updateAfterEvent();
}
}
對(duì)于Flex/Silverlight開(kāi)發(fā)者來(lái)說(shuō)很不方便。只能用第三方站點(diǎn)才能放Flash/Silverlight
您可能感興趣的文章:
- iOS自定義collectionView實(shí)現(xiàn)毛玻璃效果
- Android 高仿微信語(yǔ)音聊天頁(yè)面高斯模糊(毛玻璃效果)
- Android開(kāi)發(fā)之毛玻璃效果實(shí)例代碼
- IOS圖片設(shè)置毛玻璃效果
- Android模糊處理簡(jiǎn)單實(shí)現(xiàn)毛玻璃效果
- Android模糊處理實(shí)現(xiàn)圖片毛玻璃效果
- iOS毛玻璃效果的實(shí)現(xiàn)及圖片模糊效果的三種方法
- Android中實(shí)現(xiàn)毛玻璃效果的3種方法
- iOS7 毛玻璃特效代碼
- Android學(xué)習(xí)教程之圖片毛玻璃效果(4)
相關(guān)文章
Flex與.NET互操作(十三):FluorineFx.Net實(shí)現(xiàn)視頻錄制與視頻回放
本文主要介紹使用FluorineFx.Net來(lái)實(shí)現(xiàn)視頻錄制與視頻回放,F(xiàn)luorineFx如同F(xiàn)MS一樣,除了有AMF通信,RTMP協(xié)議,RPC 和遠(yuǎn)程共享對(duì)象外,它同樣具備視頻流服務(wù)的功能。2009-06-06
Macromedia Flex 制作計(jì)算器源碼和制作步驟
Macromedia Flex 制作計(jì)算器源碼和制作步驟...2007-02-02
讓Flex Builder 3.0與Eclipse3.4整合起來(lái)
Flex Builder 3.0 For Eclipse 3.3 安裝方法2009-02-02
如何定義一個(gè)getter和seter設(shè)置的屬性可以被綁定
Define private variable for maxFontSize.2009-05-05

