`

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

阅读更多

    转载: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();
}
}
}

 

 

分享到:
评论
1 楼 wangxc 2010-05-06  
lz,能把你res资源文件夹中的resources.res主体文件上传一下吗?谢谢!

相关推荐

    lwuit实例 lwuit j2me 界面

    最新开源 j2me 资源代码,如果有人可以改成在eclipse 的项目,就感激不尽

    最新LWUIT_1_5

    LWUIT哦,最新的包,学习学习。非常好用哦

    lwuit界面在eclipse下的例子

    lwuit界面在eclipse下的例子,原为netbean下的例子,现在改为eclipse下,以供eclipse下的大家共同交流。本程序仅为编程参考,希望lwuit能发展得更快些,那我们就有福了

    LWUIT.jar LWUIT.jar

    LWUIT.jarLWUIT.jarLWUIT.jarLWUIT.jarLWUIT.jarLWUIT.jar

    j2me记事本lwuit高级界面

    本项目为j2me实现的记事本程序,包括新建 保存 读取 修改 等功能,内建lwuit类库,实现了aero效果。(本项目创建平台为NetBeans6.8)

    Lwuit入门程序测试一下Demo

    Lwuit入门程序测试一下Demo 里面需要用到LWUIT的jar包

    lwuit-blackberry上移植的版本

    Lwuit在blackberry上的移植版本,使用subversion签下来的,我把这个从lwuit-incubator中提取出来的,里面有DOC和源码,不过它把4.2-4.7版本放在一起了,应用的时候需要根据自己项目实际进行裁剪和修改。

    LWUIT_3_1英文原版.part1

    The Lightweight UI Toolkit (LWUIT) 是一个轻量级JavaME UI工具包。LWUIT类似Swing 的MVC架构, 支持多种布局(Layouts), 皮肤更换, 字体, 触摸屏, 动画效果, Rich控件, 3D集成, Painter, 模式对画框, I18N/L10N等...

    LWUIT最新工具包

    Lightweight UI Toolkit (LWUIT) 是一个轻量...LWUIT类似Swing 的MVC架构, 支持多种布局(Layouts), 皮肤更换, 字体, 触摸屏, 动画效果, Rich 使用LWUIT的应用程序界面 控件, 3D集成, Painter, 模式对画框, I18N/L10N

    lwuit 1.2.1lwuit 最新

    The Lightweight UI Toolkit (LWUIT) 是一个轻量级JavaME UI工具包。LWUIT类似Swing 的MVC架构, 支持多种布局(Layouts), 皮肤更换, 字体, 触摸屏, 动画效果, Rich控件, 3D集成, Painter, 模式对画框, I18N/L10N等...

    lwuit1.4介绍

    根据搜索翻译出来的lwuit1.4的介绍,有兴趣的朋友可以看看

    LWUIT的最新源代码(官方的LWUIT.jar反编译)

    在网上找了很久源代码,基本上都是缺胳膊少腿的,svn上1.3版的代码还处于测试阶段...官方的只通了LWUIT.jar和Demo的下载,没有源代码,我把这个LWUIT.jar反编译了一下,把反编译过后产生的错误修改好了,已经可以用了。

    lwuit1.4 jar包

    lwuit1.4 jar包 lwuit1.4 jar包 lwuit1.4 jar包 lwuit1.4 jar包

    LWUIT最新源代码

    Sun发布了LWUIT(Light-Weight UI Toolkit)的源代码。项目主页访问:LWUIT。 The Lightweight UI Toolkit (LWUIT) 是一个轻量级JavaME UI工具包。LWUIT类似Swing 的MVC架构, 支持多种布局(Layouts), 皮肤更换, ...

    lwuit Developer_Guide

    lwuit的开发文档 Hello World for MIDP import com.sun.lwuit.Display; import com.sun.lwuit.Form; import com.sun.lwuit.Label; import com.sun.lwuit.layouts.BorderLayout; import ...

    lwuit_demo_src.rar_DEMO_J2ME lwuit de_LWUIT_lwuit demo

    lwuit demo 的源代码,基本重要的函数都在这里进行了展示

    lwuit 1.4 api文档

    lwuit 1.4 api文档,lwuit 1.4 api文档。

    lwuit api文档下载

    lwuit api文档下载,lwuit api文档下载

Global site tag (gtag.js) - Google Analytics