簡體   English   中英

Android surfaceview onTouchEvent限制?

[英]Android surfaceview onTouchEvent limiting?

當您有用於動畫/游戲/ ...的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如何返回某些內容,而第二個卻沒有。 這告訴我,CurrentlySleeping永遠不會虛假? 我仍然沒有弄清楚事情...?

我認為,一開始不監聽onTouch事件會更簡單,而不是在確實發生onTouch事件時阻止處理代碼,在這種情況下,您仍然會有調用該函數的開銷(在這種情況下,當你不想的時候

因此,實現onTouchListener接口,並使用setOnTouchListener將其設置為視圖。 現在,當您不想監聽任何onTouch事件時,將其設置為NULL。

現在,不要使用睡眠,而是嘗試使用“警報”或將延遲的消息發布到線程處理程序中,以在稍后的時間重置視圖的onTouchListener (個人而言,我認為它比睡覺要整潔得多:))

如果該類具有onTouchEvent方法,則無法阻止其被調用。 只是讓onTouchEvent返回false而不做其他任何事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM