0

当您有一个用于动画/游戏/...的surfaceView 类时,您在同一个类中有 onTouchEvent() 方法和绘图/屏幕刷新方法。现在我只想让 onTouchEvent 方法休眠,这样它就不会被每秒调用 +-80 次并淹没 cpu(从而导致延迟)。问题是,如果我在这堂课上睡觉,它也会停止绘画。

**Edit88 我正在尝试停止过于频繁地调用 onTouchEvent()。我的尝试:

@Override
public boolean onTouchEvent(MotionEvent event) {
Log.d("firstTest",Integer.toString(event.getAction()));   //shows up
if (!sleeper.CurrentlySleeping) {
    Log.d("2ndTest",Integer.toString(event.getAction())); //not showing up
    ~~  some calculations and stuff  ~~

.

public class TouchSleeper extends Thread {
// If Thread is sleeping or not.
public static Boolean CurrentlySleeping;
public TouchSleeper() {
CurrentlySleeping = false;
this.setPriority(MIN_PRIORITY);
}

@Override
public void run() {
try {
    while (true) {
        CurrentlySleeping = true;
        TouchSleeper.sleep(50);
        CurrentlySleeping = false; }
    ~end~

首先是我的 SurfaceView 类中的一段代码。类/线程的第二部分,一直在改变一个布尔值。注意我的第一个 Log.d 是如何返回一些东西的,而第二个没有。这告诉我 CurrentSleeping 永远不会是假的?我还没有弄清楚……?

4

2 回答 2

1

我认为首先不听 onTouch 事件而不是在 onTouch 事件确实发生时阻塞处理代码会更简单,在这种情况下,您仍然会有调用函数的开销(在这种情况下当你不想要它时)

所以实现onTouchListener接口并使用setOnTouchListener. 现在,当您不想收听视图的任何 onTouch 事件时,请将其设置为 NULL。

现在不要使用睡眠,而是尝试使用警报或将延迟消息发布到您的线程处理程序以onTouchListener在稍后的时间点重置视图。(就个人而言,我认为它比睡眠要整洁得多:))

于 2011-06-16T18:46:13.197 回答
0

如果该类具有 onTouchEvent 方法,则无法阻止它被调用。只需让 onTouchEvent 返回 false 并且什么都不做。

于 2011-06-16T18:45:53.667 回答