当前位置: 首页 > news >正文

《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之67---BREW 应用中的SVG技术...

SVG是二维的向量图像格式,是由W3C3GPP的提出的标准,实现了内置的交互性,支持跨越显示环境的缩放,文件尺寸比BMP, JPEG,GIF等格式还要小。SVG的编辑工具非常简单易用,基于XML的格式从而容易创建和修改,支持富文本选项。

BREW 3.1.4开始,IMediaSVG 接口开始支持SVG的播放,暂停,终止,快进和快退等,同时支持按键,笔操作,旋转和缩放等操作。

希望使用SVG的时候,首先需要使用一些商用的图像编辑工具来创建SVG文件,例如 Beatware Mobile Designer 2.0 Beatware e-PicturePro 5.0Ikivo Animator 2.0 Adobe® Illustrator CS2®Adobe® GoLive CS2®Open source Inkscape 0.44.1等等。

然后,生成BREW中需要的相关内容,例如:

<!-- Button -->

<g id = "Button_Back2" nav-prev = "url(#Button_GetNew)" navnext = "url(#Button_Options5)" focusable="false" >

其中定义了 nav-prevnav-next两个元素等等,来保证导航功能。一般的情况下,需要禁止聚焦功能,例如<g focusable="false" id="Animation_38">,并且需要使用gzip压缩目标文件。

SVG的内容生成之后,一般使用web浏览就可以了解SVG的基本显示,并进行一下交互性测试。但需要注意的是,不同浏览器对SVG的支持程度也不相同。SVG中的XML 文档结构可以通过Opera 浏览器来验证,而且该浏览器还能够报告出错误的行号。在安装了SVG的扩展类之后,BREW模拟器就能够播放SVG了。

BREW应用中,首先要获得IMediaSVG接口:

ISHELL_CreateInstance(pme->m_pIShell,AEECLSID_MEDIASVG,(void**)pme->m_pIMediaSVG);

其次,确定需要播放的文件内容:

AEEMediaData mData;

mData.clsData = MMD_FILE_NAME;

mData.pData = svg_filename;

mData.dwSize = 0;

IMEDIA_SetMediaData(pMe->pIMediaSVG, &mData);

然后,注册回调函数:

IMEDIA_RegisterNotify(pMe->pIMediaSVG, MediaNotifyCB, pMe);

最后,就可以使用IMEDIA_Play(pMe->pIMediaSVG)来播放文件了。其中回调函数MediaNotifyCB负责获取SVG文件中的一个帧,并显示在屏幕上。

void MediaNotifyCB(void * pUser, AEEMediaCmdNotify * pCmdNotify){

APP_CLASS * pMe = (APP_CLASS*) pUser;

switch(pCmdNotify->nStatus)

{

case MM_STATUS_FRAME:

{

AEEDeviceInfo di;

IBitmap* frameBuf;

IMEDIA_GetFrame(pMe->pIMediaSVG, &frameBuf);

ISHELL_GetDeviceInfo(pMe->a.m_pIShell, &di);

IDISPLAY_BitBlt(pme->m_pIDisplay,0,0,di.cxScreen,di.cyScreen, frameBuf,0,O,AEE_RO_C0PY );

IDISPLAY_UpdateEx(pMe->a.m_pIDisplay, FALSE);

break;

}

}

return;

}

对于SVG中的交互事件,在应用中要做相应的消息处理:

case EVT_KEY:

switch(wParam)

{

case AVK_DOWN:

nErr=IMEDIASVG_Focus(pme->pIMediaSVG,MM_SVG_FOCUS_EVENT_NEXT);

break;

case AVK_UP:

nErr=IMEDIASVG_Focus(pme->pIMediaSVG,MM_SVG_FOCUS_EVENT_PREVIOUS);

break;

case AVK_SELECT:

nErr=IMEDIASVG_Focus(pme->pIMediaSVG,MM_SVG_FOCUS_EVENT_ACTIVATE);

break;

case AVK_END:

nErr = IMEDIA_Stop(pMe->pIMediaSVG);

break;

}

在手机上测试支持SVG应用的时候,要注意手机可能不支持SVG的压缩状态。

相关文章:

  • cjdbc入门配置oracle
  • java大数据处理-千万级数据写xml
  • 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之68---BREW 应用中的3维图像技术...
  • 三种常见中文内码的转换方法
  • Windows Phone 7 开发技术在线学习【2】 -- WP7 多任务之道
  • TUP:分享产品背后的技术和用户体验
  • sample_code
  • OGC标准介绍 18
  • PHP的基本常识(2)
  • 「Apple iOS 模仿者」华丽转身为「Apple iOS 挑战者」
  • Windows Phone 7 模拟器外观下载——Nokia Lumia 800
  • inotify文件系统事件驱动机制
  • RNC/SGSN/PDP/IUPS概念
  • 精彩十年(1)——我的第一本铅字书诞生记
  • 职场技巧:Excel操作大全(转)
  • [PHP内核探索]PHP中的哈希表
  • “大数据应用场景”之隔壁老王(连载四)
  • 「面试题」如何实现一个圣杯布局?
  • Angular 响应式表单 基础例子
  • Java到底能干嘛?
  • java多线程
  • js递归,无限分级树形折叠菜单
  • Laravel核心解读--Facades
  • PermissionScope Swift4 兼容问题
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • Python十分钟制作属于你自己的个性logo
  • Redux系列x:源码分析
  • Vue.js 移动端适配之 vw 解决方案
  • 闭包--闭包之tab栏切换(四)
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 欢迎参加第二届中国游戏开发者大会
  • 回顾 Swift 多平台移植进度 #2
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 聊聊redis的数据结构的应用
  • 使用 Docker 部署 Spring Boot项目
  • linux 淘宝开源监控工具tsar
  • 阿里云服务器购买完整流程
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • ###STL(标准模板库)
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (六)激光线扫描-三维重建
  • (五)网络优化与超参数选择--九五小庞
  • (转)原始图像数据和PDF中的图像数据
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .NET : 在VS2008中计算代码度量值
  • .Net 8.0 新的变化
  • .NET 指南:抽象化实现的基类
  • .php结尾的域名,【php】php正则截取url中域名后的内容
  • /*在DataTable中更新、删除数据*/
  • [20180312]进程管理其中的SQL Server进程占用内存远远大于SQL server内部统计出来的内存...
  • [AIGC] SQL中的数据添加和操作:数据类型介绍
  • [android学习笔记]学习jni编程