如何提高基于Canvas程序对按键响应速度

时间:2021-09-05 19:49:58
写了一个小程序,用户通过手写笔选中Canvas上的按钮输入数字。如果用户连续快速的输入,
会出现某些数字来不及响应输入,因此不会显示出来的。
请问该如何提高输入的频率?
我在每次输入后都调用了Canvas.repaint()方法,用来刷新屏幕,是不是因为这个方法比较慢?
用了SetClip()限制刷新的区域也一样。

13 个解决方案

#1


个人觉得这是你的程序在处理的时候的效率不高导致的。

看看能不能改进一下

#2


我删除了所有的处理代码,直接显示输入的文字,还是不能完全响应快速的输入,但手机自带的程序响应都没有问题,输入速度很快。

不知道应该如何处理?有没有这样的例子?

#3


代码贴出来啊。。。

#4


肯定是在循环中用了很幼稚的错误代码造成程序效率超级低下
你可以打印出每次循环的时间来分析一下

#5


代码如下,请大家看看(查了一下资料,据说要用Thread处理才能提高相应速度,试了一下
没有成功,请指点):

public class CalculatorCanvas extends Canvas {
private StringBuffer screenText=new StringBuffer();
protected void paint(Graphics g) {
g.setColor(255, 255, 255); // 白色
g.fillRect(resultX - resultWidth, resultY, resultWidth,
resultHeight);
g.setColor(0, 0, 0);
g.drawString(screenText.toString(), resultX, resultY,
Graphics.TOP | Graphics.RIGHT);
}
protected void pointerPressed(int x, int y) {
   screenText.append('1');
   repaint();
// serviceRepaints();
}
}

#6


没用Thread?那用什么?Timer?

#7


加个线程

#8


加了线程,也没什么好转,可能用得不对,有没示例代码?

#9


这个可能和触摸屏的响应速度有关,但是如果你的事件处理中的代码很占时间的话,你可以单开一个线程来做,或者是优化你的算法。

#10


你的字符有多少个??
j2me这东西很奇怪,有的机器贴字的速度甚至不如贴图,如果你的字符很长,那慢是很正常的了

#11


字符在10个以内。手机自带的触摸屏键盘输入非常快。

我就是不知道开一个线程的代码应该怎样写,我开了一个线程还是比较慢。

#12


感觉你是个新手!有点不勤奋。
速度慢就应该找瓶颈而不要瞎撞.
教你一个方法,把程序当成很多段落,在每段落执行完毕以后计算处理所花的时间.
long lastTime = System.currentTimeMillis();
..............//执行部分代码
long processTime = System.currentTimeMillis()-lastTime;

模拟器用System.out.println()输出结果
真机就画出来.

哪个部分花的时间不合理就找哪个部分的问题.
老喜欢在论坛上问有什么用,都答得牛头不对马嘴的

#13


楼上正解

#1


个人觉得这是你的程序在处理的时候的效率不高导致的。

看看能不能改进一下

#2


我删除了所有的处理代码,直接显示输入的文字,还是不能完全响应快速的输入,但手机自带的程序响应都没有问题,输入速度很快。

不知道应该如何处理?有没有这样的例子?

#3


代码贴出来啊。。。

#4


肯定是在循环中用了很幼稚的错误代码造成程序效率超级低下
你可以打印出每次循环的时间来分析一下

#5


代码如下,请大家看看(查了一下资料,据说要用Thread处理才能提高相应速度,试了一下
没有成功,请指点):

public class CalculatorCanvas extends Canvas {
private StringBuffer screenText=new StringBuffer();
protected void paint(Graphics g) {
g.setColor(255, 255, 255); // 白色
g.fillRect(resultX - resultWidth, resultY, resultWidth,
resultHeight);
g.setColor(0, 0, 0);
g.drawString(screenText.toString(), resultX, resultY,
Graphics.TOP | Graphics.RIGHT);
}
protected void pointerPressed(int x, int y) {
   screenText.append('1');
   repaint();
// serviceRepaints();
}
}

#6


没用Thread?那用什么?Timer?

#7


加个线程

#8


加了线程,也没什么好转,可能用得不对,有没示例代码?

#9


这个可能和触摸屏的响应速度有关,但是如果你的事件处理中的代码很占时间的话,你可以单开一个线程来做,或者是优化你的算法。

#10


你的字符有多少个??
j2me这东西很奇怪,有的机器贴字的速度甚至不如贴图,如果你的字符很长,那慢是很正常的了

#11


字符在10个以内。手机自带的触摸屏键盘输入非常快。

我就是不知道开一个线程的代码应该怎样写,我开了一个线程还是比较慢。

#12


感觉你是个新手!有点不勤奋。
速度慢就应该找瓶颈而不要瞎撞.
教你一个方法,把程序当成很多段落,在每段落执行完毕以后计算处理所花的时间.
long lastTime = System.currentTimeMillis();
..............//执行部分代码
long processTime = System.currentTimeMillis()-lastTime;

模拟器用System.out.println()输出结果
真机就画出来.

哪个部分花的时间不合理就找哪个部分的问题.
老喜欢在论坛上问有什么用,都答得牛头不对马嘴的

#13


楼上正解