LWUIT显示漂亮的loading界面的两种方法

原创 2011年01月11日 17:24:00

关键字: lwuit 等待

    转载:http://p.blog.csdn.net/images/p_blog_csdn_net/pjw100/EntryImages/20091123/lwuit_0002.jpg

 

  当我们加载某一个Form页面时,如果这个页面内容较多,加载需要一定的时间,那我们就希望做一个等待的画面,比如"某某正在加载,请等待...",在这个画面中以动态效果来说为最好,用户也知道需要等待很短的时间。我做等待界面有两种方法:首先是方法一,这种方法属于文字等待,就是在界面上画一串文字,"..."是以动态的形式显示,代码如下:

 


/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 
import com.sun.lwuit.Font; 
import com.sun.lwuit.Form; 
import com.sun.lwuit.Graphics; 
import com.sun.lwuit.Image; 
import com.sun.lwuit.Label; 
import com.sun.lwuit.layouts.BorderLayout; 
import java.io.IOException; 
import java.util.Random; 
import java.util.Timer; 
import java.util.TimerTask; 
/** 

* @author Administrator 
*/ 
public class TextLoading extends Form implements Runnable { 
private Timer timer = new Timer(); 
private long displayTime = 1000; 
private StringBuffer loading = new StringBuffer("Saleslion is loading"); 
public TextLoading() { 
Thread t = new Thread(this); 
t.start(); 
this.setLayout(new BorderLayout()); 
this.show(); 

public void paint(Graphics g) { 
try { 
Image wait = Image.createImage("/logo.png"); 
//绘制logo 
g.drawImage(wait, (getWidth() - wait.getWidth()) / 2, (getHeight() - wait.getHeight()- 70) / 2); 
g.setColor(0xffffff); 
Font fnt = Font.createSystemFont(Font.FACE_PROPORTIONAL, Font.STYLE_PLAIN, Font.SIZE_LARGE); 
g.setFont(fnt); 
int wordWidth = fnt.stringWidth("Saleslion is loading..."); 
//绘制等待字符串 
g.drawString(loading.toString(), (getWidth() - wordWidth) / 2, (getHeight() + wait.getHeight() -60) / 2); 
} catch (IOException ex) { 
ex.printStackTrace(); 


private void disappear() { 
timer.cancel(); 
try { 
new LoginForm(); 
} catch (IOException ex) { 
ex.printStackTrace(); 


//调用TimerTask,时间到了后,调用disappear(),当前画面消失,跳至另一个Form 
protected void showNotify() { 
timer.schedule(new TimerTask() { 
public void run() { 
disappear(); 

}, displayTime); 

//设置字符串 
public void setLoading() { 
if (loading.toString().indexOf("...") > 0) { 
loading.delete(loading.length() - 3, loading.length()); 


public void run() { 
while (true) { 
try { 
//调用线程来绘制字符串 
Thread.sleep(500); 
setLoading(); 
loading.append("."); 
} catch (Exception e) { 

repaint(); 


}

 

 

 

以上代码比较简单,也不做多的解释,它是基于Form的。

但是这并不是我想要的效果,假如在一个九宫格中,我点击某一格时,我希望出现一个loading画面显示正在加载这一项,但是以遮罩的形式显示(就像web开发里面弹出的遮罩层对话框一样),也就是说,弹出loading时,我仍然能够见到原来的九宫格画面。我要的效果如下图:

 

 如果要实现这种形式的loading画面,只有通过Dialog类来实现。

制作这种Dialog有几个小问题需要解决:

1.lwuit中如何显示gif动画

2.Dialog全透明

3.Dialog自动释放

一直没有实现这个效果,关键是问题1,但是在上一节 我已经解决了,下面就看关键代码,代码仍然很简单:

 


/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package com.thinkrace.UCHome.ui; 
import com.sun.lwuit.Dialog; 
import com.sun.lwuit.Display; 
import com.sun.lwuit.Image; 
import com.sun.lwuit.Label; 
import com.sun.lwuit.util.Resources; 
import java.io.IOException; 
/** 

* @author Administrator 
*/ 
public class LoadingDialog extends Dialog { 
public LoadingDialog() { 
try { 
//设置对话框全透明 
for (int i = 0; i < getComponentCount(); i++) { 
getComponentAt(i).getStyle().setBgTransparency(0); 

Image icon = Resources.open("/resources.res").getImage("loading.gif"); 
Label l = new Label(icon); 
l.getStyle().setBgTransparency(0); 
addComponent(l); 
int w = Display.getInstance().getDisplayWidth(); 
int h = Display.getInstance().getDisplayHeight(); 
int top = (h - icon.getHeight()) / 2 - 10; 
int left = (w - icon.getWidth()) / 2 - 10; 

setTimeout(3000); 
show(top,top,left,left,false); 

} catch (IOException ex) { 
ex.printStackTrace(); 


}

 

LWUIT 简易漂亮的相册

我用LWUIT做的这个相册有两个界面:   1.显示相片列表   2.显示相册原始图   具体实现:   1.显示相片列表   原始图片一般都是比较大的,在显示相册列表时,需要把这些大图生成缩略图,缩...

UIWebView加载Loading...两种方法

第一种方法:使用UIView and UIActivityIndicatorView C代码   //创建UIWebView   WebView = [[UIWebView ...
  • sxsoul
  • sxsoul
  • 2013年01月30日 10:51
  • 586

UIWebView加载Loading...两种方法

第一种方法:使用UIView and UIActivityIndicatorView C代码 //创建UIWebView  WebView = [[UIWebView all...

[unity3d]自定义loading界面和浏览器的全屏显示

将做好的unity项目发布成web版本,打开后发现出现的是自定义的unity的loading界面,如果修改成我们自己的的logo图案和加载进度条。 操作步骤:                    ...

swing登陆程序的异步loading效果,避免程序假死状态?swing 后台操作事件长 , 界面如何显示正在等待?

 swing登陆程序的异步loading效果,避免程序假死状态?swing 后台操作事件长 , 界面如何显示正在等待? 在Java 桌面应用程序开发中,使用swing 进行后台操作时,如果后台...
  • cnq2328
  • cnq2328
  • 2015年12月16日 09:49
  • 1382

Android 请求网络loading 结果显示error empty界面

在进行网络请求中,我们希望给用户一个提示,让用户知道正在加载中(就是一个loading动画)。当加载成功或者失败后,我们又能返回对应的结果给用户,让用户一目了然,知道什么原因,之后又可以进一步处理。 ...

OpenCV两种方法显示中文

  • 2017年10月07日 16:58
  • 24.23MB
  • 下载

Unity 显示Loading(加载)进度 对于网上流行的方法进行更正

实际上就是MOMO贴出来的方法其实是有问题的,用过的才知道。至于别的几乎不用找,根本一个抄一个,抄来抄去都是一样,没自己的东西。 用过MOMO那个方法的都应该会发现了,当进度条开始显示的时候,基本...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LWUIT显示漂亮的loading界面的两种方法
举报原因:
原因补充:

(最多只允许输入30个字)