delphi xe5 android listview,XE7 & FMX 那些年我们一起上过的控件:ListView 之 (3) 加载数据时如何显示自定义样式...

本文介绍一下ListView下如何加载数据、及使用进度条反馈当前进度给用户。

注意:

我们先来看看效果图: 工程Demo下载

778e2d3e34cf3d752ffadd0bc0a0aef9.gif

FMX异常强大,我们可以发挥想像,自定义进度样式,以下为本文参考代码:

TPie 和 TRoundRect 请注意引用 FMX.Objects

3642d92a3676f82e81806ee8987adcfa.gif

procedure TForm1.Button3Click(Sender: TObject);

var

pe: TPie; //扇形作进度

rc: TRoundRect; //矩形作背景

lb: TLabel; //标签显示百分比

begin

TThread.CreateAnonymousThread(

procedure()

var

i,j: integer;

t1,t2: cardinal;

t3: double;

begin

listView1.Items.Clear;

label1.Text:='';

i:=1000;

try

rc:=TRoundRect.Create(ListView1); //生成一个圆矩形,必须指定对象, ListView1 或 Form1

rc.Parent:=ListView1; //指定所属,必须的

rc.Width:=100; //宽

rc.Height:=100; //高

rc.Position.X:=(ListView1.Width-rc.Width)/2; //X坐标

rc.Position.Y:=(ListView1.Height-rc.Height)/2; //Y坐标

rc.Fill.Color:=TAlphaColorRec.Black; //矩形颜色

rc.Opacity:=0.4; //透明度

rc.Stroke.Thickness:=0; //边缘宽度

rc.Visible:=true; //可视

pe:=TPie.Create(rc); //生成一个扇形,必须指定对象,指定刚才的矩形

pe.Parent:=rc; //指定所属,必须的

pe.Width:=100; //宽

pe.Height:=100; //高

pe.Position.X:=0; //X坐标,指定0即可

pe.Position.Y:=-100; //Y坐标,指定-100

pe.Fill.Color:=TAlphaColorRec.Black; //扇形的颜色,由于还没有数据,所以这里设置和矩形背景一样颜色

pe.Opacity:=0.8; //透明度

pe.StartAngle:=0; //开始角度, 没有数据即为0度

pe.EndAngle:=360; //结束角度, 转一圈为360度

pe.RotationAngle:=270; //转动角度, 270度可指向12点钟方向

pe.RotationCenter.X:=1; //中心X坐标

pe.RotationCenter.Y:=1; //中心Y坐标

pe.Stroke.Thickness:=0; //边缘宽度

pe.Visible:=true; //可见

lb:=TLabel.Create(rc); //生成一个Label, 用于显示百分比进度, 必须指定对象

lb.Parent:=rc; //指定所属,必须的

lb.Width:=rc.Width; //宽度,取矩形宽度

lb.Height:=25; //高度

lb.Position.X:=0; //X坐标,由于下面设置了水平对齐,所以设0就可

lb.Position.Y:=rc.Height/2-10; //Y坐标,水平位置为矩形的一半高度,为效果显示更顺眼,减10px

lb.Align:=TAlignLayout.Horizontal; //水平对齐

lb.Text:='';

lb.TextSettings.HorzAlign:=TTextAlign.Center; //文字对齐方式,居中对齐

lb.Visible:=true; //可见

t1:=TThread.GetTickCount;

for j := 0 to i do begin //如果你是从数据库或内存表里取数据的,则应该如 for j:=0 to ClientDataSet.RecordCount-1 do 这样取

sleep(5); //停5ms,必须的,否则下面填数据时会卡菊花。这里看你CPU的强硬程度,5-20即可,手机用户需适当设置

TThread.Synchronize(TThread.CurrentThread,

procedure()

begin

ListView1.BeginUpdate; //开始写入,加入此句,可稍微提升数据填充效率,非必须

with ListView1.Items.Add do begin

text:='No: '+j.ToString;

t2:=TThread.GetTickCount;

t3:=(t2-t1)/1000;

detail:=Format('耗时:%f 秒',[t3]);

end;

ListView1.ScrollTo(j); //滚动到本行,可马上看到填充结果,非必须

ListView1.EndUpdate; //结束写入,非必须

Label1.Text:=Format('[ 进度:%d / %d ]',[j,i]);

end

);

TThread.Synchronize(TThread.CurrentThread,

procedure()

begin

pe.fill.Color := TAlphaColorRec.Aliceblue; //自定义进度开始,定义另一种颜色,可区别出进度,当然,如果扇形的透明度比矩形背景高的话也可不设置

pe.EndAngle:=j*360/i; //转动角度,转换后相当于当前进度

lb.Text:=Format('%f',[j/i*100])+'%'; //Label显示当前进度

end

);

end;

finally

lb.Visible:=false; //完成填充后,隐藏

pe.Visible:=false; //完成填充后,隐藏

rc.Visible:=false; //完成填充后,隐藏

lb.Free; //释放

pe.Free; //释放

rc.Free; //释放

end;

end).start;

end;

a2923a1888dff8be3e3632b708e3ea51.gif

以上只是简单表示一下思路,各位可以发挥想像处理得更好。

谢谢关注本文。

PS:

---------------------------------------------------------------

FireMonkey移动开发可加QQ群:165232328 (本人非管理员,仅仅其中一成员,此群高手林立,期待各位Delphi爱好者共同交流)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值