2011-06-15 68 views
0

當你有一個surfaceView類,用於動畫/遊戲/ ...你在同一個類中有onTouchEvent()方法和繪圖/屏幕刷新方法。現在我只想睡onTouchEvent方法,所以它不會每秒調用-80次,並且溢出cpu(並因此導致延遲)。問題是,如果我睡這個班,它也會停止繪圖/更新/刷新。什麼可能是一個很好的解決方案呢?如何在不溢出onTouchEvent的情況下繼續更新屏幕? (android SurfaceView)

編輯
@tanner,這確實是我想要,要停止的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是如何返回的,第二個不是。這告訴我CurrentlySleeping永遠不會是假的?我還沒有弄清楚......?

回答

1

看一看這樣的:

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    int action = event.getAction(); 

    if (action == MotionEvent.ACTION_UP) { 
     // Do something here 
    } 
} 

也有看MotionEvent的javadoc不同事件類型的說明。

通過覆蓋onTouchEvent,您可以控制該方法中發生的情況。你可以設置你的活動(boolean touchEnabled = true)的標誌,並做onTouchEvent()檢查:

if (!touchEnabled) { 
    return; 
} 

// continue with whatever you wanted to do. 

// Remove the following line if you don't want to pass the event to the parent. 
super.onTouchEvent(event); 

UPDATE

如果您的問題很簡單,就是onTouchEvent()被射擊太快,那麼你可以做什麼像這樣:

private long lastTime = -1; 

private long threshold = 1000; 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    long now = System.currentTimeMillis(); 
    if (lastTime > -1 && (now - lastTime) < threshold) { 
     // Return if a touch event was receive less than "threshold" time ago 
     return; 
    } 

    lastTime = now; 

    super.onTouchEvent(event); 
} 
+0

@usealbarazer我不能真正給你一個答案,直到我明白你想要在你的應用程序中做什麼。當onTouchEvent()應該關閉或什麼時候不應該控制什麼?我可以告訴你,你不想循環,因爲這會導致應用程序無響應。我發佈了一個更新到我的答案,看看這個。 – 2011-06-15 15:51:08

+0

@usealbarazer現在有更新......無法讓我的更新首先完成。 – 2011-06-15 16:36:20

+0

最近的問題:是不是有一些方法來降低onTouchEvent的頻率甚至被調用,而不是僅僅阻止methodbody中的代碼?導致主要的性能下降來自onTouchEvent(),甚至被android頻繁調用。 – usealbarazer 2011-07-01 22:37:00

相關問題