2011-10-05 134 views
0

此touchevent給了我一個問題的完整列表..這是純粹的圖形,我有另一個線程同時運行在從UI接收信息的同時。Touchevent中的android線程/處理程序

無論如何我試圖運行一個方法,而你的手指按在屏幕上。

所以我只是簡化我的編碼ALOT。

// global up top 
boolean finderdown; 
//... lots of code 
if (event.getAction() == MotionEvent.ACTION_DOWN) 
{ 
    HoldingDown(event.getX(), event.getY(), heightf, widthf); 
} 

if (event.getAction() == MotionEvent.ACTION_UP) 
{ 
    HodlingDown(event.getX(), event.getY(), heightf, widthf); 
    fingerdown = false 
} 

//.. lots of code 


public HoldingDown Click(final float x, final float y, final float height, final float width) 
{ 
    Thread myThread = new Thread() { 
     @Override 
     public void run() { 
      while(fingerdown==true); 
      { 
       // class object = new class() in the activity area 
       object.function(x ,y , height, width); 
      } 
     } 
    }; 
    myThread.start(); 
} 

// manages Threads messages 
private Handler threadHandler = new Handler() { 
     public void handleMessage(android.os.Message msg) { 
      // handle message 
    } 
}; 

我運行這樣的東西,它似乎是加快我的其他線程?

+0

你的問題好友在哪裏... –

+0

線程只是不執行..我需要它不斷運行,直到你舉起你的手指。它適用於我的手機,但不適用於我的平板電腦..不是代碼的B/C ..但B/C靜止的手指似乎總是在手機上註冊爲ACTION_MOVE。 – DJPlayer

回答

0

根據您的代碼,您每次觸摸屏幕時都會創建一個新線程,並且您還在MotionEvent.ACTION_UP中使fingerdown爲false,但是您在哪裏轉向它。

我建議你做x, y , width, height作爲實例變量,並通過在事件代碼中使fingerdown爲true或false來控制線程內代碼的執行。

嘗試在觸及事件uou只會讓布爾真假的代碼控制執行使用下面的代碼

boolean var = false; //instance variable to check if thread has started running for first time 
int x, y, width, height; // variables as instance variables 
boolean fingerdown; 

Thread myThread = new Thread() { 
     @Override 
     public void run() { 
      while(fingerdown==true); 
      { 
       // class object = new class() in the activity area 
       object.function(this.x ,this.y , this.height, this.width); 
      } 
     } 
    }; 

if (event.getAction() == MotionEvent.ACTION_DOWN) 
{ 
    this.x = event.getX(); 
    this.y = event.getY(); 
    this.width = widthf; 
    this.height = heightf; 
    fingerdown = true; 


    if(!var){ 
     var = true; 
     myThread.start(); 
    } 
} 


if (event.getAction() == MotionEvent.ACTION_UP) 
{ 
    fingerdown = false 
} 

所以每次而不是創建新的線程。

+0

當我回來的時候,我會試着去嘗試。布爾錯誤只是我在打字時(不得不編輯我的代碼,因此它不是成千上萬行)。希望這個工程..會非常感激..(手指交叉) – DJPlayer

+0

不會採取..不喜歡我試圖傳遞一個實例變量到我的函數的事實。繼續暗示變量應該在新線程()中聲明的事實 – DJPlayer