`
yoshiyan
  • 浏览: 47339 次
社区版块
存档分类
最新评论

Flex Draw API

    博客分类:
  • Flex
阅读更多
MovieClip VS Shape VS Sprite
  • MovieClip相当于有时间轴的Sprite,Sprite没有时间轴。
  • Sprite 对象是显示对象容器,而 Shape 对象不是(并且不能包含子显示对象)。
  • Sprite 对象支持用户输入事件,而 Shape 对象却不支持。

Graphics使用心得
graphics.clear()会把graphics.lineStyle()的设置也给清除掉。

flash.geom.Rectangle使用心得
  • Rectangle会把构造函数传入的x,y当成是左上角的x和y坐标,它并不会在内部帮忙调整。如果构造函数传入的是右下角的x和y坐标,则取left和top时,获得的将会是右下角的x和y坐标。

DisplayObject的height和width包含linestyle的thickness,绘制时实际的边框宽度是thickness / 2。
实例代码如下:
graphics.clear();
graphics.lineStyle(3,0);
graphics.beginFill(0x555555,0.6);
graphics.drawRoundRect(0,0,30,30,0,0);
graphics.endFill();

trace(height, width);

输出:33, 33。

如何计算两点间的距离?
根据勾股定理:一个三角形,最长边的平方等于其他两边的平方和:
a^2+b^2=c^2
示例代码如下:
var c:Number = Math.sqrt(Math.pow(a, 2) + Math.pow(b, 2));


如何绘制只有上方的角是圆角的矩形?
使用:spark.primtives.Rect
通过设置下边的四个属性值,它可以将任意一角设置为圆角。
topLeftRadiusX、topRightRadiusX、bottomLeftRadiusX、bottomRightRadiusX

使用drawCircle画出来的圆不圆的问题如何解决?
调用graphics.drawCircle前,graphics.lineStyle,将第4个参数设置为true。
graphics.lineStyle( 1, 0, 0, true );

设置前后的对比如下:


参考链接:http://www.benclinkinbeard.com/2010/10/fixing-drawcircle-distortion-to-create-smooth-circles/


如何给线段加上阴影?
使用s:DropShadowFilter。
示例代码如下:
		<s:Line y="100" xFrom="10" xTo="100">
			<s:filters>
				<s:DropShadowFilter distance="2"/>
			</s:filters>
			<s:stroke>
				<s:SolidColorStroke color="0x0"/>
			</s:stroke>
		</s:Line>


使用Flex的坐标
http://livedocs.adobe.com/flex/3/html/help.html?content=containers_intro_5.html

Matrix相关文章
http://www.senocular.com/flash/tutorials/transformmatrix/
Rotate相关的文章

http://www.joelconnett.com/flex-rotation-around-a-point-using-a-matrix.html
http://www.flexrain.cn/flex/as3-atan-atan2.html
Move、Resize相关文章
http://www.rogue-development.com/objectHandles.html
图像处理相关文章
http://insideria.com/2008/03/image-manipulation-in-flex.html

Matrix使用心得
  • 使用Matrix的rotate对组件进行旋转时,旋转是基于该组件的父组件的原点进行的,如果想让旋转基于某点进行,请将该点通过Matrix的tanslate函数移动到原点位置。
  • 不要直接修改DisplayObject.transform中.matrix变量。因为DisplayObject.transform.matrix返回的仅是一个copy。对此copy的修改不会影响原matix。正确的修改步骤如下:
  •          1.把DisplayObject。transform中。matrix赋值给一个临时变量。
             2.修改临时变量。
             3.把修改后的临时变量赋值给DisplayObject.transform.matrix。
             PS:DisplayObject.transform.colorTransform也不能直接修改。
  • 利用Matrix实现基于某一点的Rotation或者Scale等效果的方法:
  •          1.Matrix translation (moving to the reference point)
             2.Matrix rotation or scale
             3.Matrix translation (back to original position)

         图示如下:

参考链接:http://www.senocular.com/flash/tutorials/transformmatrix/

如何完全控制mx:Image组件内图片的缩放?
默认情况下,mx:Image的maintainAspectRatio属性被设置为true,在这种情况下,只要设置了image的widtht或者height,另外一个属性将会按照比例缩放。只有将maintainAspectRatio设置为false,才能让设置的width和height都生效。

如何消除mx:Image内图形在缩放后产生的锯齿?
将mx:Image的smoothBitmapContent属性设置为true。
原图:

smoothBitmapContent为false(默认值)时:

smoothBitmapContent为true时:


为什么BitmapData变量没有被释放?
用完了BitmapData之后,应该调用BitmapData.dispose()来释放它。
参考链接:http://stackoverflow.com/questions/2621160/bitmapdata-heavy-usage-memory-disaster-spark-fb4

后加入Child/Element挡住会先加入的Child/Element,如何避免先加入的Child/Element被后加入的Child/Element挡住?
使用setChildIndex、setElementIndex改变其在父容器的索引。索引小的放下边,大的放上边。

A是个BorderContainer组件,B是个UIComponent组件。调用A的addElement函数将B添加到A里。然后为A添加MouseEvent.Click监听函数。那么这个监听函数也会监听B的MouseEvent.Click事件?

如何获取swf每一祯的截图?
function getClipAsBitmaps(clip:MovieClip):ArrayCollection{
    var data:ArrayCollection = new ArrayCollection();
    var frames:int = clip.totalFrames;
    for(var i:int = 1 ; i <= frames;  i++){
        clip.gotoAndStop(i);
        trace(i);
        var bitmapData:BitmapData = new BitmapData(clip.width,clip.height,true,0x00FFFFFF);
        bitmapData.draw(clip);
        data.addItem({source:new Bitmap(bitmapData),label:'frame: ' + i});
    }
    return data;
}

tileList.dataProvider = getClipAsBitmaps(star);

参考文档:http://stackoverflow.com/questions/2322848/flex-3-movie-clips-viewing-multiple-frames-on-the-stage

如何把BitmapData中的图形显示到界面上?
方法1:
需要先发BitmapData的数据弄到Bitmap上,然后把Bitmap添加到UIComponent上,最后把UIComponent添加到界面上。
示例代码如下:

如何从Image里获取BitmapData?
通过Image的content变量强转获得。
实例代码如下:
            private function dupeImage(source:Image):void {
                var data:BitmapData = Bitmap(source.content).bitmapData;

            }



如何绘制橡皮筋效果?
重点是在MouseMove的处理函数里。绘制图像前先调用画布的graphics.clear()函数,将上一次绘制的图像清除掉。
示例代码如下:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
			   xmlns:s="library://ns.adobe.com/flex/spark" 
			   xmlns:mx="library://ns.adobe.com/flex/mx">
	<fx:Declarations>
		<!-- Place non-visual elements (e.g., services, value objects) here -->
	</fx:Declarations>
	<fx:Script>
		<![CDATA[
			import mx.events.ColorPickerEvent;
			private function onApplyCmd(cmd:uint):void
			{
				m_currentCmd = cmd;
				
				drawPad.addEventListener(MouseEvent.MOUSE_DOWN, handleMouseDown);
			}
			
			private function handleMouseDown(event:MouseEvent):void
			{
				drawPad.addEventListener(MouseEvent.MOUSE_MOVE, handleMouseMove);
				
				m_beginPosX = event.localX;
				m_beginPosY = event.localY;
			}
			
			private function handleMouseMove(event:MouseEvent):void
			{
				drawPad.contentGroup.graphics.clear();
				drawPad.contentGroup.graphics.lineStyle(1, colorPicker4Line.selectedColor);
				drawPad.contentGroup.graphics.moveTo(m_beginPosX, m_beginPosY);
				drawPad.contentGroup.graphics.lineTo(event.localX, event.localY);
			}
			
			private var m_currentCmd:uint;
			private var m_beginPosX:Number;
			private var m_beginPosY:Number;
			
			private const CMD_DRAW_LINE:uint = 1;
			
			private const COLOR_WHITE:uint   = 0xffffff;
		]]>
	</fx:Script>
	
	<s:VGroup width="100%" height="100%" gap="0">
		<s:HGroup paddingLeft="2" paddingTop="2" paddingBottom="2">
			<s:Button label="Line" click="{onApplyCmd(CMD_DRAW_LINE)}"/>
			<mx:ColorPicker id="colorPicker4Line" selectedColor="0xffffff"/>
		</s:HGroup>
		<s:BorderContainer id="drawPad" backgroundColor="0x000000" width="100%" height="100%">
		</s:BorderContainer>
	</s:VGroup>
</s:Application>
  • 大小: 16.6 KB
  • 大小: 29.5 KB
  • 大小: 19.4 KB
  • 大小: 22.1 KB
  • 大小: 1.8 KB
分享到:
评论
1 楼 send620 2011-07-07  
可以放个例子出来参考一下啊,谢谢!!

相关推荐

    扩展arcgis api for flex 的Draw,增加画圆操作

    扩展arcgis api for flex 的Draw类,增加了画圆操作

    flex_api_diagram_1_3

    标题与描述均提到了"flex_api_diagram_1_3",这暗示了我们正在讨论的是ArcGIS API for Flex版本1.3中的组件与服务。该API为开发人员提供了构建地理信息系统(GIS)应用程序的能力,尤其针对Adobe Flex平台。下面将...

    ArcGIS_Server_9_3_for_Flex_API_初级教程.pdf

    ### ArcGIS Server 9.3 for Flex API 初级教程知识点总结 #### 一、环境搭建 1. **ArcGIS Server API for Flex简介** ArcGIS Server API for Flex是2009年由ESRI推出的面向Rich Internet Applications (RIA) 的...

    arcgis_api_for_flex入门教程

    ### ArcGIS API for Flex 入门教程:详细解析与实践指南 #### RIA技术与ArcGIS API for Flex ##### RIA技术概览及其优势 **RIA(Rich Internet Application,富互联网应用)**是一种旨在提供类似桌面应用程序用户...

    FLEX在线拍照.rar

    2. **Webcam API**: Flex可以访问用户的网络摄像头,这是通过Flash Player的Camera类实现的。通过Camera.getCamera()方法,我们可以获取到用户的摄像头设备,并设置其参数,如分辨率和帧率。 3. **Microphone API**...

    flex绘图和遮罩

    通过实例化Sprite对象,我们可以利用其draw()方法和其他相关API来绘制线条、形状、图像等。例如,可以使用beginFill()方法指定填充颜色,lineStyle()设置线条样式,然后使用drawRect()或drawCircle()等方法绘制基本...

    flex工作流源码

    在Flex中,这些类用于发送AJAX请求,处理RESTful API或SOAP服务,实现异步数据加载和提交。 2. **Common_Math**:这个部分可能包含了一些数学相关的算法和工具类,例如几何计算、坐标转换或者图形渲染中的数学支持...

    dtt.rar_flex_flex 图片

    关于Flex中的图片处理,Flex框架提供了一系列API,使得开发者可以方便地处理图像。例如,BitmapData类是Flex中处理像素数据的核心类,它允许读取、修改和绘制位图数据。Camera类则支持访问用户的计算机摄像头,捕捉...

    flex应用anychart

    例如,可以使用`anychart.onReady`函数初始化图表,然后通过`chart.container`指定图表的容器,使用`chart.data`加载数据,以及通过`chart.draw()`绘制图表。 在数据源方面,AnyChart支持多种格式,包括JSON、XML、...

    Flex在线拍照功能

    在Flex中,`HTTPService`可以方便地与RESTful API进行交互。 ```xml &lt;binaryData&gt;{bitmapData.encode()} ``` 调用`uploadService.send(bitmapData.encode())`即可发送图像数据。 6. **用户体验**:为了...

    flex生成图片并保存

    Flex提供了Camera类来访问和控制用户的摄像头,我们可以用它的`getVideo`方法获取视频流,然后使用BitmapData的`draw`方法将每一帧绘制到位图上,最后进行保存。 3. **SaveChart-app.xml 和 SaveWebcam-app.xml** -...

    flex web 调用摄像头保持图片

    在Flex中,我们可以利用Flash Player或Adobe AIR提供的多媒体API来访问和操作摄像头。主要涉及以下知识点: 1. **Camera类**:Flex提供了一个名为`Camera`的类,它允许我们与用户的摄像头设备进行交互。通过`Camera...

    flex 截图并上传到服务器中

    HTTPService通常用于RESTful API,而WebService更适合SOAP协议。在发送请求时,通常会将图像数据作为二进制流附加到POST请求的body中: ```actionscript var service:HTTPService = new HTTPService(); service.url...

    flex-图片保存-本地磁盘-单个ui截屏-整个框架截屏

    为了与用户交互并获取保存路径,可以使用FileReference或Filesystem API。FileReference是Flash Player提供的,允许用户选择文件保存位置并触发保存对话框。在Adobe AIR中,可以使用更强大的File和FileStream类,...

    Flex拍照并上传到java后台——未调试成功

    6. **与Java后端交互**:Java后端通常会提供一个RESTful API或者基于HTTP的文件上传接口,接收Flex客户端发送的图片数据。这部分涉及HTTP协议、Multipart/form-data编码以及Java的文件处理和网络编程。 7. **错误...

    flex 3 下的360度全景

    8. **硬件加速**:如果可能,可以利用Stage3D API来提升图像处理的性能,尤其是当全景图像非常大或者需要实时更新时。 9. **响应式设计**:考虑到不同的设备和屏幕尺寸,全景视图应具有良好的响应性。这意味着代码...

    flex_timeline源码

    通过重写`draw()`方法或使用DisplayObject的绘图API,可以自定义绘制时间线的各个部分。 5. **样式和主题**:Flex支持CSS样式,可以定制时间轴的颜色、字体、边框等视觉元素,以匹配整体应用的风格。 总结,通过对...

    Flex 剪切放大旋转

    图片剪切通常涉及`BitmapData.draw()`方法,它允许你在`BitmapData`对象中绘制另一个图形或图像,从而实现裁剪效果。你可以设置绘制的矩形区域,超出该区域的部分不会被绘制。 5. **图片放大**: 图片放大可以...

    Flex实现画线(可拖拽、带箭头、可变色)

    在Flex中实现画线,我们可以利用Flex提供的Graphics API。Graphics API允许开发者在舞台上绘制基本形状,如线条、曲线和矩形。我们首先创建一个自定义的UIComponent子类,这个子类将会是我们的画线组件。在AS中,...

    tianditu.zip_arcgis切片_flex_天地图

    本篇文章将详细介绍如何利用ArcGIS for Flex API开发一个动态读取天地图切片服务的扩展类,以帮助开发者更好地理解和运用这项技术。 ArcGIS for Flex是Esri公司推出的用于构建Web GIS应用的框架,它基于Adobe Flex...

Global site tag (gtag.js) - Google Analytics