2月 232016
 

大部分时候,我们会放弃系统的默认镶边,自定义自己想要的镶边。这个时候,就需要自己手动来写效果了。基本过程是这样的。
1,屏蔽系统的镶边。
2,自己写皮肤,写逻辑(拖拽窗体,resize窗体,最大化,最小化,关闭,恢复等)。
每个AIR都有一个默认的xml配置文件,这里边定义了一些参数。通过打开注释,改变下边两个参数来关闭系统的镶边。一个是关闭镶边,另一个是打开透明。

        <!-- The type of system chrome to use (either "standard" or "none"). Optional. Default standard. -->
        <systemChrome>none</systemChrome>

        <!-- Whether the window is transparent. Only applicable when systemChrome is none. Optional. Default false. -->
        <transparent>true</transparent>

通过以上的设置,关闭了系统的镶边显示。然后来看怎么写自定义的镶边。最大化,最小化这些,比较好处理。这里主要讲下自由拖拽和自由resize。air提供了一个很好的方法(nativeWindow.startResize),来启动窗体的自由resize。里边可以带参数。参数标明拖拽的八个方向。仅仅这个是不够的,还要定义鼠标效果。鼠标移上去,拖拽光标要显示出来,拖拽的时候,光标跟着走。这里细节还是比较多。先记下光标的实现。
1,自己定义光标的显示对象。(位图,自己绘制都行)。
2,通过Mouse.registerCursor注册光标。registerCursor方法有两个参数,第一个参数是光标的名字,后边调用的时候需要,第二个参数是一个BitmapData的数组。就是光标的显示。
3,通过调用Mouse.cursor方法来更换光标。
其实,到了这里。在做这些之前,系统就已经有了一些光标效果。如鼠标遇到输入的时候的输入光标,遇到按钮的时候手型光标。当然通过上边的步骤,可以实现光标的定义。

下边说下拖拽。八个方向(上,上左,上右,左,右,下,下左,下右),通过定义sprite和范围来启动。可以通过定义一个sprite,然后通过Rectange来区分,调用resize,也可以通过建立八个sprite,分配好坐标来resize。我自己用的是后边一种方法。感觉还行。
建立八个sprite,然后对八个sprite进行侦听MouseDown,RollOver,RollOut事件。MouseDown事件,用来启动拖拽的,RollOver来显示光标的,RollOut来恢复到默认光标的。
RollOver的时候,根据不同的Sprite,取不同的光标效果。然后按下的时候,关掉mouseChildren属性。要不拖拽的时候,会出现泄露等瑕疵。同时,侦听stage的mouseUp事件,这个用来恢复默认光标。仅仅RllOut是不够的。还有,在RollOut的时候,如果鼠标状态是mouseDown状态,应不恢复默认光标。

上边这些可以定义到一个父类里边,以后用的时候,直接继承过来。至于按钮这些,可以定义在子类中。还有如果窗体是不规则的,可以自由对待。好了,细节有一些。贴出完整的代码吧。还需要更完善一些。
Continue reading »

9月 302015
 

应用程序跟操作系统(包裹操作系统里的应用程序)之间的文件拖拽,是一种很常见的操作行为。AIR也是。AIR拖拽,除了这一操作行为,还有其他的。这里就总结下。

AIR拖拽的分类:
1,从操作系统(包裹操作系统里的应用程序)拖拽文件到AIR.
2,从AIR拖拽文件到操作系统。
3,AIR内部之间文件的拖拽。

无论怎么拖,勾托抹托,上拖下拖,左拖右拖。都离不开一个东东,那就是剪贴板。就是Clipboard。在拖拽与接收之间,先得有个剪贴板。想取得剪贴板,可以用ClipBoard的静态属性generalClipboard获取。

var clipboard:Clipboard = Clipboard.generalClipboard;

Continue reading »

 Posted by at 上午10:09
4月 172014
 

关于Adobe AIR和Apache Flex以及移动平台的4个趋势和1个结论

此文章由 周戈 (DarkStone) 原创, 转载请注明来源!
日期: 2014-04-09
微博: http://weibo.com/dstech
博客: http://blog.sina.com.cn/dstech
QQ群: 23477140

先贴2个新闻:

[2014-04-02]
根据美国福布斯(Forbes.com)的最新统计: http://www.forbes.com/ 移动平台 B/S 架构浏览器应用+游戏的模式已死, C/S 架构本地应用+游戏的模式是王道!

Continue reading »

 Posted by at 上午11:11  Tagged with:
11月 052013
 

如何将swf里边的Bitmap或矢量图(简称显示对象,因为看得见,摸不着。可以裁剪,变形,旋转等等)生成本地的图片呢。这个

分两种情况,一种是在AIR运行时下,一种是在FlashPlayer下。在AIR运行时下,通过FileStream的writeBytes方法,将ByteArray

写入到本地。如果在FlashPlayer下,则用FileReference的save方法,将ByteArray写入到本地。所以,这个时候,需要将显示对象

编码成需要的ByteArray。这个转化不仅仅数据的转化,而是按照一定的压缩算法的转化(在Flashplayer11.3出现之前,大多利用第

三方类库PNGEnocder来处理的)。因此BitmapData的encode就有作用了。该API返回按照定义的压缩算法写入的ByteArray或直接

按照定义的压缩算法写入ByteArray。

flash.display.BitmapData.encode(rect:Rectangle, compressor:Object, byteArray:ByteArray=null):ByteArray
参数:
rect 要压缩的 BitmapData 对象的区域。
compressor 要使用的压缩程序类型。有效值为:
flash.display.PNGEncoderOptions、
flash.display.JPEGEncoderOptions 和 flash.display.JPEGXREncoderOptions。
byteArray 保存编码图像的输出 ByteArray。

至于如何将其他显示对象转换成BitmapData就不说了。下边分别写出在AIR下和在FlashPlayer下,将BitmapData生成图片的具体

的代码。

AIR下:

var bitmapData:BitmapData = boxList[i].bitmap.bitmapData;   //这里从一个列表里边取的一个BitmapData
var jpegEncoderOptions:JPEGEncoderOptions = new JPEGEncoderOptions(80);
var byteArray:ByteArray = bitmapData.encode(bitmapData.rect,jpegEncoderOptions);

//或 bitmapData.encode(bitmapData.rect,jpegEncoderOptions,byteArray);

var file:File = File.desktopDirectory;  //这里写死了,可以使用File的browse选择你要保存的路径
file = file.resolvePath(file.nativePath + “/image/” + “vini123.jpg”);
var fs:FileStream = new FileStream();
fs.open(file,FileMode.WRITE);
fs.writeBytes(byteArray);
fs.close();

 

FlashPlayer下:

var bitmapData:BitmapData = bitmap.bitmapData;
var jpegEncoderOptions:JPEGEncoderOptions = new JPEGEncoderOptions(80);
var byteArray:ByteArray = bitmapData.encode(bitmapData.rect,jpegEncoderOptions);

var file:FileReference = new FileReference();
file.save(byteArray,“vini123.jpg”);

9月 262013
 

对于面对桌面的应用程序,没有自动更新功能是很郁闷的一个事情。自AIR1.5之后,开始有了API支持自动更新。在没有API支持之前,可以手动的间接地实现。不过,有了API支持后,自动更新已经变得很简单与方便。至少不需要自己去写组件。下边就描述下实现自动更新的步骤吧。
1.准备标识版本号,以及更新信息的XML文件。该文件放在你的服务器(虚拟空间)上。

Continue reading »

9月 052013
 

在本地,xml,txt,SharedObject已经可以用了。不过多了解点总是好的。之前用过my sql。来看这个,就比较轻松点。
* AIR提供了一套完善的SQL API,核心类位于flash.data包中。其中常见的类如下:
* flash.data.SQLConnection: 创建数据库的连接,并提供控制数据库操作的多个方法。
* flash.data.SQLStatement: 用来执行SQL语句(对表的操作吧)。
* flash.data.SQLResult: 用来获取SQL语句执行的结果。
* 使用数据库流程:首先使用SQLConnection创建库连接,然后通过SQLStatement执行SQL语句,最后从SQLResult对象中获取结果。
* AIR对文件的操作有异步和同步两种方式,同样,对SQL数据库的操作也一样。当你SQLConnection打开数据库的方式确定同步或异步之后,就不能中途修改了。选择何种方式,自己权衡。
* 打开模式三种:SQLMode.CREATE: 读写模式。如果数据库文件不存在,会自动创建。SQLMode.READ:只读模式,只能读操作。SQLMode.UPDATE:读写模式。如果数据库文件不存在时,则不会自动创建数据库。

Continue reading »

 Posted by at 下午11:25  Tagged with:
9月 042013
 

air for ios的拍照和保存图片到相册功能,主要用到两个API:CameraUI 和 CameraRoll。前者是负责调用系统的相机拍照的,对其侦听 MediaEvent.COMPLETE 事件,会得到MediaPromise对象。这个对象还可以通过CameraRoll选择相册图片得到。得到这个后,通过loader,得到bitmap对象。然后调用CameraRoll,将其保存到相册里边。这里要说的不是这两个API。还是说些我知道的,大家也知道的吧。CameraRoll很二,浏览选择图片的时候,一次只能选择一张。而且CameraRoll浏览选择图片,得不到图片的路径。这两个API,方法和属性都很少。对于在手机上开发,还有个很判断,都习惯判断设备是否支持该操作。如:if(CameraUI.isSupported){}。最后说一点,相机拍照后,怎么将相片完美的显示到舞台呢。设备设置为自动感应重力方向,会旋转。无论怎么旋转,图片的宽度永远大于图片的宽度。就是bitmap的宽度高度是固定的了。而舞台的大小却在变化着。还有方向也在变化着。这就导致addChild舞台的时候,方向,位置,大小不一的问题。这里的源头是找不到手机的重力方向状态。比如是否是正竖着方向,是否是正横着方向,是否是反横着方向这些。估计有API知道这个。由于对ios开发还不熟悉,还在研究中。如果知道了这些也好控制图片的位置,大小,方向问题。

要洗澡澡睡觉觉了。在这之前,还是把代码贴出来。

Continue reading »

 Posted by at 下午11:59
9月 032013
 

对于flash,断点续传这个东东,有了AIR,才真正发挥了它的用武之地。具体怎么实现的呢,请看瑞研社区的文章,点击进入瑞研社区
在这里,稍微改了一点点。是AIR在ios上的断点续传。差别似乎不大。但是有一点,需要注意。通过File,我们很容易指向文档目录,临时存贮目录等。但是,我们一般都不是只放在指向的根目录。而是有它的内层目录。比如,指向文档目录下,temp目录下,怎么写呢。

    var fileName:String = "crazy.swf";
    file = File.documentsDirectory;
    file = file.resolvePath(file.nativePath + "/temp/" + fileName);

这里要注意File的属性nativePath和url。

要说的第二点,增加了对文件加载总进度的侦听。这一点,有个处理。如果文件很小,或文件已经加载完了。再点击加载的情况。
不说了,贴出源代码。然后洗澡澡,睡觉觉了。对于ios下,文件的操作方面还待研究,不比在win下。

Continue reading »

 Posted by at 上午12:02
9月 012013
 

在应用程序app.xml里边有两个节点。autoOrients和aspectRatio。如果想你的应用程序一直处于横屏的怎么处理呢。请将autoOrients节点值改为false,将aspectRatio的值改为landscape。默认情况下autoOrients的值为true,能随设备重力方向改变而改变,aspectRatio默认该节点没有打开,请打开。

    <autoOrients>false</autoOrients>
    <aspectRatio>landscape</aspectRatio>

有了这些,还是不能够的。加入用CameraRoll导入一张图片进来,旋转方向了。程序的方向还是会变的。还在摸索学习中,先记着。应该有事件可以侦听设备重力方向的改变,就像侦听Event.CLOSING一样,会有状态。这个时候,需要手动去控制调整吧。得尝试才行。

 Posted by at 下午7:52  Tagged with:
9月 012013
 

1.去下载 air 3.8 sdk
2.找到目录 C:\Program Files\Adobe\Adobe Flash Builder 4.7\eclipse\plugins\com.adobe.flash.compiler_4.7.0.349722 对win-xp情有独钟,没有换win7.主要是后边对应的目录,找到 AIRSDK 目录。可以先备份一个,然后清空AIRSDK目录里边的文件。
3.解压下载好的 air3.8 sdk,然后剪切到AIRSDK目录下就好了。
4.重启FLashbuilder。对于以前用air3.4的项目,会出错。请更改其app.xml里边第一行,将3.4改为3.8就ok了。

网站地图