SoFunction
Updated on 2025-04-07

Flex magnifying glass effect implementation code


<?xml version="1.0" encoding="utf-8"?>
<mx:Application
layout="vertical"
verticalScrollPolicy="off"
horizontalScrollPolicy="off"
backgroundColor="#FFFFFF"
backgroundGradientColors="#FFFFFF,#FFFFFF"
applicationComplete="onApplicationComplete();"
xmlns:mx="/2006/mxml"
viewSourceURL="srcview/">
<mx:Script>
<![CDATA[
[Embed(source="assets/", mimeType="application/octet-stream")]
private var shaderObj:Class;
private var shader:Shader;
private var shaderFilter:ShaderFilter;
/**
* Initialize the shader
*/
private function onApplicationComplete():void
{
// create the shader
shader = new Shader( new shaderObj() );
= [/2, /2];
setShader();
// setup event listeners
( Event.ENTER_FRAME, onEnterFrame, false, 0, true );
}
/**
* Each frame, only reapply the filter if necessary
*/
private function onEnterFrame( event:Event ):void
{
setShader();
}
/**
* Update all the shader&apos;s properties, create a new ShaderFilter,
* and reapply it to the image
*/
private function setShader():void
{
var centerX:Number = ;
var centerY:Number = ;
if( centerX < 0 || centerY < 0 || centerX > || centerY > )
{
var currentX:Number = [0];
var currentY:Number = [1]
centerX = currentX + (( / 2)-currentX) / 2;
centerY = currentY + (( / 2)-currentY) / 2;
}
= [centerX, centerY];
= [];
= [];
= [];
shaderFilter = new ShaderFilter( shader );
= [shaderFilter];
}
]]>
</mx:Script>
<mx:Form>
<mx:FormItem label="Inner Radius">
<mx:HSlider

minimum="0"
maximum="200"
value="50"
liveDragging="true" />
</mx:FormItem>
<mx:FormItem label="Outer Radius">
<mx:HSlider

minimum="0"
maximum="200"
value="100"
liveDragging="true" />
</mx:FormItem>
<mx:FormItem label="Magnification">
<mx:HSlider

minimum="1"
maximum="50"
value="4"
liveDragging="true" />
</mx:FormItem>
</mx:Form>
<mx:Image

source="assets/" />
</mx:Application>