Symbian自定义控件—如何实现跑马灯效果? - [symbian](转)
网上的算法很多,但我只提供一个最笨,最简单,但最有效的方法去做:
比如你要一行要显示4个字母的长度,显示的信息为"ABCDE",1秒钟为其更新速度
那么我们可以紧挨着放置4个LABEL,LABEL1,LABEL2,LABEL3,LABEL4设置好他们的位置
然后算法如下:
1.获取要显示的信息并存入数组里
TBuf<10> iSourceData = _L("ABCDE");
CDesCArray* aDataArray = new (Eleave) CDesCArrayFlat(10);
CleanupStack::PushL(aDataArray);
for(TInt i = 0; i< P>
{
aDataArray->AppendL(iSourceData[i]);
}
2.以下为跑马灯的具体实现:
在头文件定义:
TInt j = 0;
TInt a=0;b=1;c=2;d=3;
以下需放在活动对象的RunL()里执行
if(a < aDataArray->Count())
{
LABEL1->SetTextL((*aDataArray)[a]);
}
else
{
LABEL1->SetTextL(_L(""));
}
if(a < aDataArray->Count()+2)
{
a++;
}
else
{
a=0;
}
if(b < aDataArray->Count())
{
LABEL2->SetTextL((*aDataArray)[b]);
}
else
{
LABEL2->SetTextL(_L(""));
}
if(b< aDataArray->Count()+2)
{
b++;
}
else
{
b=0;
}
if(c< aDataArray->Count())
{
LABEL3->SetTextL((*aDataArray)[c]);
}
else
{
LABEL3->SetTextL(_L(""));
}
if(c< aDataArray->Count()+2)
{
c++;
}
else
{
c=0;
}
if(d< aDataArray->Count())
{
LABEL4->SetTextL((*aDataArray)[d]);
}
else
{
LABEL4->SetTextL(_L(""));
}
if(d< aDataArray->Count()+2)
{
d++;
}
else
{
d=0;
}
waitOneSend(); //等待一秒钟的操作
记得退出页面得调用活动对象Cancel()方法