- 浏览: 297749 次
- 性别:
- 来自: 上海
最新评论
-
再_见孙悟空:
写的不错
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 1261下面代码用到了jdom和dom4j两个包 public cl ... -
解压缩
2010-02-02 23:25 1149/* * 非面向对象语言要实现保存工作数据(如一个绘图程序 ... -
回车换行符
2010-01-21 13:52 135111 换行符:另起一行,'\n'10,仅仅把一个长行截断成两 ... -
Thread Pool
2010-01-14 15:27 974public class WorkQueue { p ... -
FileConnection
2010-01-12 15:39 15261. 引言 FileConnection API 是一 ... -
Customized Menu for JavaME
2009-10-10 11:36 1090参考文档: http://www.iteye.com/top ... -
J2ME移植-键值
2009-09-23 15:07 16481. J2ME标准api中Canvas中定义的键值有17(方向 ... -
kxml doc
2009-09-22 14:55 18881. KXmlParser java.lang.Ob ... -
Http线程阻塞分析
2009-08-23 16:48 4362先做一个总结:Http连接线程发生阻塞,会影响其他线程也出现阻 ... -
jar和jad解释
2009-08-20 23:22 1246整理电脑,从F盘挖坟挖出的股东,也贴出来吧 如果是K- ... -
图片在程序内存中的占有量
2009-08-20 17:58 27091. 图片占内存容量计算公式为: 图片所占内存大小 ... -
如何从网络中获取png图片
2009-08-03 19:54 20311. J2ME // 方法1 Connector conn ... -
cmnet和cmwap的访问
2009-07-30 11:06 2359CMWAP(通过WAP网关代理,由WAP网关连接服务器,然后将 ... -
JSR75 FileConnection Optional Package 使用方法
2009-07-29 17:09 1634package forrest.fcop; imp ... -
mobile日志
2009-07-29 16:05 9791.项目中的实际应用 这个demo用到了JSR75 - ... -
DoubleBuffer 实现
2009-07-29 10:22 1283绘制地图的时候会出现图片断裂,屏幕闪烁等绘图效率问题 ... -
System.getProperty(String key)和MIDlet.getAppProperty(String key)
2009-07-13 17:53 19991. System.getProperty(String ... -
WTK的安全特性
2009-07-01 17:28 10831. MIDlet套件签名的背景 ... -
纳米星开发遇到的一些bug
2009-06-30 17:01 10541.Stream和Connection使用后要关闭 ...
相关推荐
为了避免这种情况,我们可以使用自定义指令来替代`ng-repeat`。自定义指令允许我们更精细地控制DOM操作和渲染过程,从而提高性能。以下是使用自定义指令实现类似`ng-repeat`功能的步骤: 1. **创建容器**:首先,...
今天用angular写table的时候,遇到了一个问题。在ng-repeat中,含有动态的html,而这些html中含有自定义指令,怎么...下面小编给大家分享AngularJs中 ng-repeat指令中实现含有自定义指令的动态html的方法,一起看看吧
`$uibModal`服务可以创建一个独立于当前视图的新窗口,这个窗口可以包含自定义的HTML内容,比如我们的`alert`或`confirm`对话框。 下面是如何使用`ng-repeat`实现双层嵌套的例子: 1. 首先,确保在项目中安装了...
这样的模块化设计遵循DRY(Don't Repeat Yourself)原则,提高了代码复用性和可维护性。 10. **测试与调试** 创建自定义信息框后,需进行详尽的测试,确保在各种场景下都能正确显示和操作。这可能涉及到单元测试、...
通过以上代码,我们就实现了自定义的`repeat`方法,它可以处理大多数常见情况。然而,需要注意的是,这种方法仍然无法完全复制原生`repeat`的行为,例如处理Unicode字符的能力。在实际开发中,如果对性能和兼容性有...
然而,当需要对数据进行更复杂的布局或自定义显示时,简单的`ng-repeat`可能无法满足需求。这时,我们可以利用`ng-repeat-start`和`ng-repeat-end`这对指令来实现更加灵活的迭代控制。 `ng-repeat-start`和`ng-...
### Ajax TabContainer 自定义CSS样式知识点解析 在Web开发领域,特别是使用ASP.NET AJAX进行页面构建时,TabContainer 是一个非常实用的控件,用于创建动态的、交互式的标签页界面。通过自定义CSS样式,我们可以使...
AngularJS还支持其他动画事件,如`ng-repeat-start`、`ng-hide-add`、`ng-show-remove`等,可以根据需要选择合适的事件来实现不同的动画效果。此外,可以使用JavaScript动画或者CSS3动画,通过设置`ngAnimate`的配置...
这种做法有助于提升代码的复用性和可维护性,符合“Don't Repeat Yourself”(DRY)的原则。`BaseActivity`通常包含一些基本的初始化操作、UI布局加载、事件处理以及通用的业务逻辑。 创建`BaseActivity`的主要步骤...
此外,自定义控件的设计应遵循DRY(Don't Repeat Yourself)原则,确保代码可复用和易于维护。 通过以上步骤,你将能够创建出具有独特功能和外观的自定义控件。这个项目中的"自定义控件"可能包含了这些实现过程,...
1. 减少过滤器数量:尽量合并多个过滤器为一个自定义过滤器,减少计算次数。 2. 缓存过滤结果:对于不经常变化的过滤,可以将结果存储在缓存中,避免重复计算。 四、数据预处理 在数据到达视图之前对其进行预处理...
在Java 8之前,很多功能需要通过自定义方法或者第三方库来实现,而Repeat则为这些常见需求提供了直接的支持。 Repeat库的设计围绕Java 8引入的新特性,特别是Stream API和Lambda表达式。这些新特性使得处理集合、...
background-repeat: no-repeat; /* 防止图像平铺 */ background-position: center; /* 将图像居中 */ background-size: cover; /* 使图像完全覆盖背景区域,保持宽高比 */ } ``` 如果需要对特定元素设置背景,...
标题中提到的“AngularJS使用Filter自定义过滤器控制ng-repeat去除重复功能示例”说明了如何通过自定义一个filter来达到去除重复的目的。这需要我们在AngularJS模块中定义一个新的filter,并在ng-repeat指令中应用这...
本文将详细介绍Android自定义控件实现望远镜效果的方法,并提供了详细的示例代码。望远镜效果的实现主要依赖于Shader和BitmapShader这两个类。 Shader是Android中的一个类,用于给图形元素着色。它可以将颜色、渐变...
但是,这个方法在 IE6 中是不支持的。 此外,我们还可以使用以下代码来添加边框到任务队列和任务状态: /* add a border for buildQueue, executors */ table#buildQueue.pane, table#executors.pane { border: 1...
10. **代码组织**:为了保持代码的可维护性,可以将自定义逻辑封装在独立的类别或子类中,遵循DRY(Don't Repeat Yourself)原则。 总之,自定义`UITabBarController`不仅需要熟悉`UIKit`的基本操作,还需要掌握UI...