About

<#TEMPLATE_INCLUDE_NINEPAGE_ABOUTME#>
  • Nov

    28

    扩展任意一个 Flex 现有容器类(Canvas、Box、HBox、VBox等),可实现容器内容拖动的功能(类似 Flash 中的 ScrollPane 组件中将 scrollDrag 属性设为 true 值的效果) 。以 Canvas 为例扩展:

    类下载:PanCanvas.as

    Nov

    20

    本地共享存储 SharedObject 类默认路径:

    WINDOWS XP

    C:\Documents and Settings\计算机用户名\Application Data\Macromedia\Flash Player\#SharedObjects\随机文件名\localhost

     WINDOWS 7 

    C:\Users\计算机用户名\AppData\Roaming\Macromedia\Flash Player\#SharedObjects\随机文件名\localhost

     小心它有一个“陷井”:与普通文件名不一样的是,SharedObject 类 getLocal() 方法中name参数除不能使用 ~ % & \ ; : " ' , < > ? # 这些字符外,它还不能使用“空格”字符;但它可以合法的包含正斜杠 (/)。

    Nov

    19

    Flex 列表类组件的“陷井”

    • 0 Comments
    • Flash Platform

    当 Flex 列表类如 List、DataGrid、AdvancedDataGrid 等组件时,如果使用了自定义的项渲染器,creationComplete 事件往往只会发生一次,随后的数据组件都会采用复制的方式,这种复制是连同数据一起复制的。所以这时滚动的时候组件内的数据会变的混乱,不能即时刷新。需要通过 dataChange 事件来刷新组件中的数据。如下一个最简单的 Text 组件作为一个自定义的项渲染器为例:

    <?xml version="1.0" encoding="utf-8"?>
    <mx:Text xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="creationComplete_fun(event);" dataChange="dataChange_fun(event);" selectable="false">
    <mx:Script>
    <![CDATA[
    private function creationComplete_fun(e:Event):void{
    htmlText = data.txt;
    }
    private function dataChange_fun(e:Event):void{
    creationComplete_fun(null);
    }
    ]]>
    </mx:Script>
    </mx:Text>

    除了以上这个“陷井”之外,列表组件还有另外的一个“陷井”。列表组件的滚动是以“行”为单位向上或向下滚动的,但是以“像素”为单位向左或向右滚动的。

    Nov

    18

     //删除头尾指定字符
    private function trimChar(theString:String, char:String):String {
    while (theString.charAt(0) == char) {
    theString = theString.substring(1, theString.length);
    }
    while (theString.charAt(theString.length-1) == char) {
    theString = theString.substring(0, theString.length-1);
    }
    return theString;
    }

    Nov

    14

    所有继承自 UIComponent 类的所有组件都有 toolTip 对象与 toolTipShown 事件,在 toolTipShown 事件中可以实现 ToolTip 实例跟随鼠标移动的方法。

    <mx:toolTipShown>
     <![CDATA[
      function toolTipShownFun(e:ToolTipEvent):void{
       var pos:Point = new Point(mouseX,mouseY);
       pos.x = e.target.contentToLocal(pos).x + 8;//数值8为离鼠标X距离
       pos.y = e.target.contentToLocal(pos).y + 16;//数值16为离鼠标Y距离
       (e.toolTip as ToolTip).x = pos.x;
       (e.toolTip as ToolTip).y = pos.y;
       (e.toolTip as ToolTip).startDrag();
      }
      toolTipShownFun(event);
     ]]>
    </mx:toolTipShown>

    More...

    Nov

    9

    表找了,没错,AS3里没有这三个事件。但可以基于 MouseEvent 事件以及它的 buttonDown 属性来模拟这三个自定义事件: 

    var button:Sprite = new Sprite();
    button.graphics.beginFill(0x000000, 1);
    button.graphics.drawRect(50,50,200,100);
    addChild(button);
    button.buttonMode = true;
    button.addEventListener(MouseEvent.MOUSE_DOWN, buttonPress);
    button.addEventListener(MouseEvent.MOUSE_UP, buttonRelease);
    button.addEventListener(MouseEvent.MOUSE_OVER, buttonOver);
    button.addEventListener(MouseEvent.MOUSE_OUT, buttonOut);
    function buttonPress(e:MouseEvent):void {
     trace('onPress');
     button.parent.stage.addEventListener(MouseEvent.MOUSE_UP, buttonRelease);
    }
    function buttonRelease(e:MouseEvent):void {
     button.parent.stage.removeEventListener(MouseEvent.MOUSE_UP, buttonRelease);
     if (e.currentTarget != button) {
      trace('onReleasedOutside');
     } else {
      trace('onRelease');
     }
    }
    function buttonOver(e:MouseEvent):void {
     if (e.buttonDown) {
      trace('onDragOver');
     } else {
      trace('onRollOver');
     }
    }
    function buttonOut(e:MouseEvent):void {
     if (e.buttonDown) {
      trace('onDragOut');
     } else {
      trace('onRollOut');
     }
    }

    原文出处:http://www.scottgmorgan.com/blog/index.php/2007/12/20/ondragover-ondragout-and-onreleaseoutside-in-as3/

    Nov

    8

    Canvas 组件不能将 BitmapData 实例作为 backgroundImage 样式属性值,是因为在AS3中,setStyle() 和 getStyle() 方法都是基于CSS的,而CSS中只能使用URL、URI、数字、字符串、字体等值,无法使用字节数据值。而BitmapData是一种字节数据值类型,所以无法使用。

    但 Canvas 继续自 Sprite类,所以每个Canvas 实例与 Sprite 的实例一样都带有 graphics 属性实例作,graphics 属性实例因为可以使用 beginBitmapFill() 方法,所以可以将 BitmapData 间接的填充到Canvas 的 backgroundImage 样式属性中。在 beginBitmapFill() 方法中,可以使用一个Matrix类的实例矩阵变形来模似 Canvas 组件中的 backgroundSize 样式属性。

    以下为一个样例代码: 

    var canvas:Canvas=new Canvas();
    canvas.width=500;
    canvas.height=500;
    var matrix:Matrix = new Matrix();
    matrix.scale(canvas.width/bitmapData.width,canvas.height/bitmapData.height);
    canvas.graphics.clear();
    canvas.graphics.beginBitmapFill(bitmapData,matrix,true,true);
    canvas.graphics.drawRect(0,0,canvas.width,canvas.height);
    canvas.graphics.endFill();

    Nov

    1

    闪吧的涂鸦程序在闪客中是一个非常有代表性的作品。压缩包中的涂鸦程序是本人早先收集的一个源程序,里面包含了闪吧涂鸦程序的算法精华;猫爪程序是本人早先见于猫扑网,是一种最为简单的涂鸦程序。现在也常见于百度各种贴吧内,比如《海贼王吧》的涂鸦程序,都是类似效果(带撤消功能)。

    源码下载:猫爪&涂鸦.rar