游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1588|回复: 0

Canvas与屏幕事件处理wxh zt

[复制链接]

1367

主题

1993

帖子

2118

积分

金牌会员

Rank: 6Rank: 6

积分
2118
发表于 2006-3-1 21:17:00 | 显示全部楼层 |阅读模式
J2ME专题 发表
Canvas本身有两种状态,一种是普通默认情况下的,一种是全屏状态,可以用setFullScreenMode()方法来对其设定,两者之间的区别在于当我们使用全屏幕状态的时候,Title、Ticker以及我们的Command都无法在屏幕上显示。

当我们调用setFullScreenMode()的时候,不管是什么模式,都会调用seizeChanged()这个方法,并传入屏幕的高度和宽度作为其参数。

对于某些突发事件,比如说来电等等,屏幕会被系统画面所覆盖的时候,就会调用hideNotify()这个方法,当恢复原状时,就会调用我们原本的画面,那么系统就会同时调用showNotify()这个方法。在实际操作过程当中,应该覆写这两个方法,以便在可见性变化时,使程序做出相应的反应,Canvas会在它被显示的时候自动调用paint()方法,所以我们不必去调用repaint()方法。















下面给出一段代码,让大家体会一下如何在实际开发过程当中妥善处理屏幕事件:

import javax.microedition.lcdui.*;

import javax.microedition.midlet.*;

public class test4 extends Canvas

implements CommandListener

{

        public test4()

        {

                setTitle("全屏幕测试") ;

                setTicker(new Ticker("Ticker ")) ;

                addCommand(new Command("全屏幕",Command.SCREEN,1)) ;

                addCommand(new Command("正常",Command.SCREEN,1)) ;

                setCommandListener(this) ;

        }

        public void paint(Graphics g)

        {

                g.setColor(125,125,125);//灰色

                g.fillRect(0,0,getWidth(),getHeight());

                g.setColor(0,0,0);//黑色

                g.drawLine(10,10,150,10);

        }

        public void commandAction(Command c,Displayable s)

        {

                String cmd = c.getLabel();

                if(cmd.equals("全屏幕"))

                {

                        setFullScreenMode(true) ;

                }else if(cmd.equals("正常"))

                {

                        setFullScreenMode(false) ;

                }



        }

        protected void sizeChanged(int w,int h)

        {

                System.out.println("改变后的宽度:"+w) ;

                System.out.println("改变后的高度:"+h) ;

        }

        protected void hideNotify()

        {

                System.out.println("屏幕被系统遮蔽") ;//会在WTK控制台中显示,

//读者需要注意

        }

        protected void showNotify()

        {

                System.out.println("屏幕显示在屏幕上") ;

        }

}

从截图1和截图3可以看出全屏幕和普通模式的区别,全屏幕的Canvas的显示区域覆盖了原来显示标题和Ticker的地方。


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-23 19:55

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表