AS3放大镜工具类
package {
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.DisplayObject;
import flash.display.DisplayObjectContainer;
import flash.display.Sprite;
import flash.geom.Point;
import flash.geom.Rectangle;
import flash.ui.Mouse;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.filters.DropShadowFilter;
public class MagGlass extends Sprite {
private const MAXSIZE :uint = 2880;
private var _zoom :Number;
private var _zoomSmall :Number;
private var _imageW :Number;
private var _imageH :Number;
private var _imageBitmap :Bitmap;
private var _newBitmap :Bitmap;
private var _imageBitmapData:BitmapData;
private var _dataW :Number;
private var _dataH :Number;
private var _filtered :Boolean;
private var _glassSp :Sprite;
private var _isZooming :Boolean;
private var _Stage :Object;
private var _target :DisplayObject;
/*
* Param1 需要缩放的对象
* Param2 缩放的倍数,默认为3倍
* Param3 显示框的宽度
* Param4 显示框的高度
* Param5 是否添加阴影滤镜
*/
public function MagGlass($target:DisplayObject, $zoom:Number = 3, $width:Number = 100, $height:Number = 80, $filtered:Boolean = true) {
trace("MagGlass v01");
if ($target is Bitmap) {
_imageBitmap = $target as Bitmap;
}else {
_imageBitmap = getBitmap($target);
}
_imageBitmap.scaleX = $zoom;
_imageBitmap.scaleY = $zoom;
if (_imageBitmap.width > MAXSIZE || _imageBitmap.width > MAXSIZE) {
trace("图片尺寸超过范围!");
return;
}
var newSp:Sprite = new Sprite();
newSp.addChild(_imageBitmap);
_newBitmap = getBitmap(newSp);
_imageBitmapData = _newBitmap.bitmapData;
_target = $target;
_zoom = $zoom;
_imageW = $width;
_imageH = $height;
_filtered = $filtered;
this.addEventListener(Event.ADDED_TO_STAGE, addToStage);
}
private function addToStage(event:Event):void {
this.removeEventListener(Event.ADDED_TO_STAGE, addToStage);
_Stage = stage;
initGlass();
initEvent(_target);
}
private function initGlass():void {
_glassSp = new Sprite();
_glassSp.buttonMode = _glassSp.mouseChildren = _glassSp.mouseEnabled = false;
if(_filtered) _glassSp.filters = [new DropShadowFilter()];
addChild(_glassSp);
}
private function initEvent($target:DisplayObject):void {
$target.addEventListener(MouseEvent.ROLL_OUT, targetOut,true);
$target.addEventListener(MouseEvent.MOUSE_DOWN, targetDown);
_Stage.addEventListener(MouseEvent.MOUSE_UP, targetOut);
}
private function targetDown(event:MouseEvent):void {
_isZooming = true;
Mouse.hide();
var hitPoint:Point = new Point(event.localX, event.localY);
//trace("hitPoint",hitPoint);
_glassSp.x = this.mouseX- _imageW / 2;
_glassSp.y = this.mouseY- _imageH / 2;
ShowBig(hitPoint);
this.addEventListener(MouseEvent.MOUSE_MOVE,targetMove);
}
private function glassClear():void {
_glassSp.graphics.clear();
}
private function targetOut(event:MouseEvent):void {
_isZooming = false;
glassClear();
Mouse.show();
this.removeEventListener(MouseEvent.MOUSE_MOVE,targetMove);
}
private function targetMove(event:MouseEvent):void {
var movePoint:Point = new Point(_target.mouseX, _target.mouseY);
//trace("movePoint",movePoint);
_glassSp.x = this.mouseX- _imageW / 2;
_glassSp.y = this.mouseY- _imageH / 2;
ShowBig(movePoint);
event.updateAfterEvent();
}
private function getBitmap($target:DisplayObject):Bitmap {
var bitmapData:BitmapData = new BitmapData($target.width, $target.height,true,0xffff0000);
bitmapData.draw($target);
return new Bitmap(bitmapData);
}
/*
* Param1 坐标,即需要显示的坐标中点
*/
private function ShowBig($point:Point) {
drawGlass(new Point($point.x*_zoom,$point.y*_zoom));
}
private function drawGlass($point:Point):void {
var curBitmapData:BitmapData;
var curBitmap :Bitmap;
var startX :Number = $point.x - _imageW / 2;
var startY :Number = $point.y - _imageH / 2;
curBitmap = new Bitmap(new BitmapData(_imageW, _imageH));
curBitmap.bitmapData.copyPixels(_imageBitmapData, new Rectangle(startX, startY, _imageW, _imageH), new Point(0, 0));
curBitmapData = curBitmap.bitmapData;
_glassSp.graphics.clear();
_glassSp.graphics.lineStyle();
_glassSp.graphics.beginBitmapFill(curBitmapData);
_glassSp.graphics.drawRect(0, 0, _imageW, _imageH);
_glassSp.graphics.endFill();
}
}
}
使用方法:
var mMagGlass:MagGlass = new MagGlass(mc,3,150,150,true);
addChild(mMagGlass);
AS3放大镜工具类
AS3放大镜工具类的更多相关文章
- 【转】AS3画板工具类,可直接套用
原文链接:http://bbs.9ria.com/thread-212711-1-16.html 今天项目需求做一个画板,要有橡皮擦.自己懒不想写,在网上搜了半天都是习作,没有拿来就能用的又不爱看.只 ...
- as3 工具类分享 CookieMgr
今天分享一个工具类 CookieMgr,功能就是读取和写入 SharedObject 对象.很简单,都是静态方法,就不多说了 package org.polarbear.core { import f ...
- Java基础Map接口+Collections工具类
1.Map中我们主要讲两个接口 HashMap 与 LinkedHashMap (1)其中LinkedHashMap是有序的 怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...
- Android—关于自定义对话框的工具类
开发中有很多地方会用到自定义对话框,为了避免不必要的城府代码,在此总结出一个工具类. 弹出对话框的地方很多,但是都大同小异,不同无非就是提示内容或者图片不同,下面这个类是将提示内容和图片放到了自定义函 ...
- [转]Java常用工具类集合
转自:http://blog.csdn.net/justdb/article/details/8653166 数据库连接工具类——仅仅获得连接对象 ConnDB.java package com.ut ...
- js常用工具类.
一些js的工具类 复制代码 /** * Created by sevennight on 15-1-31. * js常用工具类 */ /** * 方法作用:[格式化时间] * 使用方法 * 示例: * ...
- Guava库介绍之实用工具类
作者:Jack47 转载请保留作者和原文出处 欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 本文是我写的Google开源的Java编程库Guava系列之一,主要介 ...
- Java程序员的日常—— Arrays工具类的使用
这个类在日常的开发中,还是非常常用的.今天就总结一下Arrays工具类的常用方法.最常用的就是asList,sort,toStream,equals,copyOf了.另外可以深入学习下Arrays的排 ...
- .net使用正则表达式校验、匹配字符工具类
开发程序离不开数据的校验,这里整理了一些数据的校验.匹配的方法: /// <summary> /// 字符(串)验证.匹配工具类 /// </summary> public c ...
随机推荐
- 括号匹配(POJ2955)题解
原题地址:http://poj.org/problem?id=2955 题目大意:给出一串括号,求其中的最大匹配数. 我这么一说题目大意估计很多人就蒙了,其实我看到最开始的时候也是很蒙的.这里就来解释 ...
- 缺失值处理(Missing Values)
什么是缺失值?缺失值指数据集中某些变量的值有缺少的情况,缺失值也被称为NA(not available)值.在pandas里使用浮点值NaN(Not a Number)表示浮点数和非浮点数组中的缺失值 ...
- Processing设计Android APP(1) - 安装
1.安装环境: A. Android Studio B. Processing 3.4 (64bit) 首先,直接安装Android Studio,我这里版本是3.2.1. 然后,新建一个Sample ...
- pycharm plot独立窗口显示
import matplotlib.pyplot as plt ... plt.show() 进行如下设置: File->Settings->Tools->Python Scient ...
- 块元素&行内元素
大多数HTML 元素被定义为块级元素或内联元素.块级元素在浏览器显示时,通常会以新行来开始(和结束) block元素特点 1 总是在新行上开始: 2 高度,行高以及外边距和内边距都可控制: 3 宽度缺 ...
- python 运行当前目录下的所有文件
查看当前目录下所有py文件(本身除外run) import os file_list = os.listdir(os.getcwd()) # 获取当前目录下所有的文件名print(file_list ...
- Web.Config配置文件中customErrors元素的使用方法
在Web.Config配置文件中,customErrors元素提供有关ASP.NET 应用程序自定义错误消息的信息. 先看一下配置结构的示例: <configuration> < ...
- Redis慢日志查询
Redis slowlog 是个什么 redis的slow log记录了那些执行时间超过规定时长的请求.执行时间不包括I/O操作(比如与客户端进行网络通信等),只是命令的实际执行时间(期间线程会被阻塞 ...
- 爬虫中Requests模块
Requests: 让 HTTP 服务人类 虽然Python的标准库中 urllib2 模块已经包含了平常我们使用的大多数功能,但是它的 API 使用起来让人感觉不太好,而 Requests 自称 “ ...
- Linux_CentOS中Mongodb4.x 安装调试、远程管理、配置 mongodb 管理员密码
Mongodb4.x 安装 官方文档:https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/ 1.配置 yum 源 1 ...