- 浏览: 294515 次
- 性别:
- 来自: 上海
最新评论
-
再_见孙悟空:
写的不错
Dialog -
a549262189:
支持下,正好在学习这块的内容!
Android Gesture Detector -
dcsff:
受教了
LayoutInflater -
庆_啊:
真厉害。
LayoutInflater -
ghj234:
学习了,哈哈
LayoutInflater
j2me的Canvas中有一个repeat()回调方法。大部分手机支持这个方法,但也有一些手机不支持。在支持的手机中,也存在或多或少的问题,比如在 S40 手机中,repeat()间隔时间过长,导致程序反应太慢。在一个地图浏览的程序中,如果我想连续移动地图, repeat() 几乎是每隔 1 秒执行一次,地图跳跃感太强了。
所以我就想利用keyPressed()和keyReleased()自定义一个repeat()方法,代码如下,这个应用可以自己控制repeat的时间间隔长短,非常好用。
public class RepeatCanvas extends Canvas { private boolean isRightPressed, isLeftPressed, isDownPressed, isUpPressed; private Object lock = new Object(); private Thread keyOpt; protected void paint(Graphics g) { } protected void keyPressed(int keyCode) { int action = getGameAction(keyCode); switch (action) { case Canvas.RIGHT: isRightPressed = true; break; case Canvas.LEFT: isLeftPressed = true; break; case Canvas.DOWN: isDownPressed = true; break; case Canvas.UP: isUpPressed = true; break; } opt(); } protected void keyReleased(int keyCode) { int action = getGameAction(keyCode); switch (action) { case Canvas.RIGHT: isRightPressed = false; break; case Canvas.LEFT: isLeftPressed = false; break; case Canvas.DOWN: isDownPressed = false; break; case Canvas.UP: isUpPressed = false; break; } } private void opt() { if (keyOpt != null) { synchronized (lock) { lock.notify(); } } else { keyOpt = new Thread(new KeyOpt()); keyOpt.start(); } } private class KeyOpt implements Runnable { public void run() { while (true) { if (isRightPressed) { while (true) { try { Thread.sleep(100); } catch (InterruptedException ex) { break; } System.out.println("move(-1, 'x') -- 地图右移"); if (!isRightPressed) { break; } } } else if (isLeftPressed) { while (true) { try { Thread.sleep(100); } catch (InterruptedException ex) { break; } System.out.println("move(1, 'x') -- 地图左移"); if (!isLeftPressed) { break; } } } else if (isDownPressed) { while (true) { try { Thread.sleep(100); } catch (InterruptedException ex) { break; } System.out.println("move(-1, 'y') -- 地图下移"); if (!isDownPressed) { break; } } } else if (isUpPressed) { while (true) { try { Thread.sleep(100); } catch (InterruptedException ex) { break; } System.out.println("move(1, 'y') -- 地图上移"); if (!isUpPressed) { break; } } } synchronized (lock) { try { lock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } } } }
这个是最简单的一个实现,可以在这个基础上扩展出很多应用,比如两个键同时longPressed。根据需要,自己定制。
ps:以上实现的思路来自于众多j2me前辈,感谢他们的无私奉献。
发表评论
-
线程过多and高效MIDP编程
2010-05-03 17:42 0见附件 -
XML解析
2010-02-02 23:25 1219下面代码用到了jdom和dom4j两个包 public cl ... -
解压缩
2010-02-02 23:25 1105/* * 非面向对象语言要实现保存工作数据(如一个绘图程序 ... -
回车换行符
2010-01-21 13:52 130111 换行符:另起一行,'\n'10,仅仅把一个长行截断成两 ... -
Thread Pool
2010-01-14 15:27 950public class WorkQueue { p ... -
FileConnection
2010-01-12 15:39 15011. 引言 FileConnection API 是一 ... -
Customized Menu for JavaME
2009-10-10 11:36 1060参考文档: http://www.iteye.com/top ... -
J2ME移植-键值
2009-09-23 15:07 16141. J2ME标准api中Canvas中定义的键值有17(方向 ... -
kxml doc
2009-09-22 14:55 18471. KXmlParser java.lang.Ob ... -
Http线程阻塞分析
2009-08-23 16:48 4309先做一个总结:Http连接线程发生阻塞,会影响其他线程也出现阻 ... -
jar和jad解释
2009-08-20 23:22 1211整理电脑,从F盘挖坟挖出的股东,也贴出来吧 如果是K- ... -
图片在程序内存中的占有量
2009-08-20 17:58 26641. 图片占内存容量计算公式为: 图片所占内存大小 ... -
如何从网络中获取png图片
2009-08-03 19:54 19801. J2ME // 方法1 Connector conn ... -
cmnet和cmwap的访问
2009-07-30 11:06 2329CMWAP(通过WAP网关代理,由WAP网关连接服务器,然后将 ... -
JSR75 FileConnection Optional Package 使用方法
2009-07-29 17:09 1609package forrest.fcop; imp ... -
mobile日志
2009-07-29 16:05 9461.项目中的实际应用 这个demo用到了JSR75 - ... -
DoubleBuffer 实现
2009-07-29 10:22 1247绘制地图的时候会出现图片断裂,屏幕闪烁等绘图效率问题 ... -
System.getProperty(String key)和MIDlet.getAppProperty(String key)
2009-07-13 17:53 19711. System.getProperty(String ... -
WTK的安全特性
2009-07-01 17:28 10601. MIDlet套件签名的背景 ... -
纳米星开发遇到的一些bug
2009-06-30 17:01 10211.Stream和Connection使用后要关闭 ...
相关推荐
大家都知道对于处理小数量,ng-repeat是非常有用的,但是如果需要处理非常大的数量集,还是采用自定义的方法更好一些。特别是数据大多都是静态的或已预存储好的,这个时候应避免使用ng-repeat指令。 ng-repeat中的...
今天用angular写table的时候,遇到了一个问题。在ng-repeat中,含有动态的html,而这些html中含有自定义指令,怎么...下面小编给大家分享AngularJs中 ng-repeat指令中实现含有自定义指令的动态html的方法,一起看看吧
大家都知道Angular.js可以用ng-repeat来显示列表数据,可是如果想要自定义显示数据列表的话ng-repeat就实现不了了,这个时候可以利用ng-repeat-start 和 ng-repeat-end来实现,下面通过本文来详细看看实现的方法吧。
background:url(xjt.png) no-repeat right center;} #divselect ul{width:184px;border:1px solid #333333; background-color:#ffffff; position:absolute; z-index:20000; margin-top:-1px; display:none;} #...
主要介绍了AngularJS使用Filter自定义过滤器控制ng-repeat去除重复功能,结合实例形式分析了AngularJS自定义过滤器的定义及数组过滤相关操作技巧,需要的朋友可以参考下
本篇文章主要介绍了angularjs过滤器-filter与ng-repeat的相关知识。具有很好的参考价值。下面跟着小编一起来看下吧
JSF-UIREPEAT 亲测可试 源代码
前言 ...$index会随着每次遍历(从0开始)递增,当遍历到最后一个时,$last的值为true,so,通过判断$last的值来监听ng-repeat的执行状态,怎么在遍历过程中拿到$last的值:自定义指令 小实例,我只
一、问题 1.默认播放按键不好看 2.设置自定义封面图 以上这两点都想自定义 二、思路 1.使用div把video标签盖住 2.div中显示自定义的海报图片与按钮 三、步骤分解 ... background-repeat: no-repeat; backgroun
1.3.1、存储过程的优点:1.3.2、存储过程 与 函数 的区别二、自定义函数 udf(user-defined function )2.1、自定义函数 udf2.2、示例2.2.1、 无参数的自定义函数2.2.2、有参数的自定义函数三、复合结构3.1、语法格式...
在示例的基础上,这是如何使用的自定义指令collection-repeat的简单演示。 用于填充此演示的数据来自 。 如何最好地获取此演示数据的灵感来自( 在 2014上的演讲,该演讲可在上。 要了解有关collection-repeat...
液体拉动刷新从Ramotion Pull Down to Refresh汲取灵感的美丽而自定义的刷新指示器,用于扑动。 目录Inst Liquid Pull to Refresh美观,自定义的刷新指示符,深受Ramotion Pull Down to Refresh的启发。 目录安装...
$index会随着每次遍历(从0开始)递增,当遍历到最后一个时,$last的值为true,so,通过判断$last的值来监听ng-repeat的执行状态,怎么在遍历过程中拿到$last的值:自定义指令 小实例,我只写了最重要的部分 /
一个美丽而自定义的刷新指示器,从获得很大启发。 目录 正在安装 1.依赖它 将此添加到包的pubspec.yaml文件中: dependencies : liquid_pull_to_refresh : ^2.0.0 2.安装 您可以从命令行安装软件包: 与pub : $...
主要介绍了AngularJS监听ng-repeat渲染完成的两种方法,结合实例形式分析了AngularJS基于自定义指令及广播事件实现监听功能的相关操作技巧,需要的朋友可以参考下
节点SASS缓存缓存URL Sass自定义函数,用带有缓存无效符字符串的URL替换URL。 可在节点资源中使用。用法让情况如下: // example.scssbody { background : cache-busted-url ( " /images/bg.png " ) no-repeat ;}// ...