启动动画

S60第三版中不支持V2 Camera observer
标题: S60第三版中不支持V2 Camera observer

设备, 软件 版本: S60 3rd Edition, S60 3rd Edition FP1

说明:
在S60第三版中,MCameraObserver2将不被支持。

详细描述:
S60第三版中你会发现有两个版本的camera observer接口类,MCameraObserver和MCameraObserver2
不过这里要说明的是MCameraObserver2尚未被支持。

案例重现:
试图去这样构造一个CCamera的实例:
static IMPORT_C CCamera *NewL(MCameraObserver2 &aObserver,
TInt aCameraIndex,
TInt aPriority);
这不会引发异常,不过返回指针将为NULL

解决方案:
在S60中用到照相机API时应使用MCameraObserver
如何创建动画
动画框架(Framework)提供了一个CBasicAnimation 类,该类继承自 CAnimation ,用来创建客户端的动画,任何一个基本的客户端动画都需要数据来源,这些数据可以是简单的文件也可以是复杂的数据结构。数据
提供者( data provider)主要负责处理数据, CICLAnimationDataProvider 类作为数据提供者为任意一种类
型的动画提供数据处理功能。为了创建一个基本的动画,我们需要创建出一个CICLAnimationDataProvider 类的对象。在下面的例子中,动画的数据来源是一个简单的Gif文件。
下面的代码演示了,如何创建一个CICLAnimationDataProvider 对象,并把它和一个GIF文件关联起来。

//GIF文件的路径
_LIT(KAnimExGuitarPlayer,"Z:\\resource\\apps\\AnimExample\\GuitarPlayer.gif");

//创建一个CICLAnimationDataProvider 对象,并和GIF文件关联.
//The iEikonEnv 用来打开一个与文件系统的会话
CICLAnimationDataProvider* basicDataProvider = new (ELeave)CICLAnimationDataProvider;
basicDataProvider->SetFileL(iEikonEnv->FsSession(), KAnimExGuitarPlayer());

在数据提供者对象准备就绪后, 就可以创建一个 CBasicAnimation 的类对象. 而动画的行为和属性要用 TAnimationConfig 类来定义. 所以你应当先创建一个TAnimationConfig对象,动画的行为可按下面的方式设置:

循环播放:把TAnimationConfig 类的iFlags变量设置为ELoop,将iData变量设置为要播放的圈数。如果要想进行无限循环播放,就将iData变量的值设为-1。

立即播放:将iFlags 变量设置为 EStartImmediately. 在默认的情况下,只有全部的数据都被装载以后,才会开始播放。

只播放指定数目的帧: 将iFlags 变量设置为 ECountFrames, 并将iData 变量设置为要播放的帧的数目。

在最后一帧上停止动画: 将iFlags 变量设置为 EEndOnLastFrame.在默认情况下,动画播放完毕,将会返回到第一帧。

在我们的例子中, 动画被设置为无限循环播放。

下面的代码演示了如何创建并开启一个基本的动画. 它装载了一个GIF文件,并无限地循环播放。

//定义动画播放的坐标
const TInt KAnimExBasicPositionX = 300;
const TInt KAnimExBasicPositionY = 100;
TPoint position = TPoint(KAnimExBasicPositionX, KAnimExBasicPositionY);

//将动画设置为无限循环播放
TAnimationConfig config;
config.iFlags = TAnimationConfig::ELoop;
config.iData = -1;

//用数据提供者和上面定义的坐标,创建一个动画对象
iBasicAnim = CBasicAnimation::NewL(basicDataProvider,position, iEikonEnv->WsSession(), Window());      

//启动动画
iBasicAnim->Start(config);

为了看到动画效果,我们必须将动画在窗口上渲染出来, 因此,必须在应用程序的视图类(继承自CCoeControl类)中实现Draw()方法,

下面的代码演示了如何在窗口中绘制动画

void CClientAppView::Draw(const TRect&) const
{
  
    CWindowGc& gc = SystemGc();
    if( iBasicAnim )
        {
        iBasicAnim->Draw( gc );
        }
}

本主题由 Vincent 于 2009-2-27 23:30 移动

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17096048/viewspace-563232/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/17096048/viewspace-563232/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值