2012-04-12 39 views
0

私はタッチアンドタイプの携帯電話用のアプリを1つ開発しています。アプリケーションの1つの画面には、3つのボタンがあります。タッチイベントが機能していません

ここで私が3つのボタンをタッチすると、動作しています。しかし、私がボタンの外側をタッチすると、トップバーまたはボトムバーにあることを意味し、タッチイベントも機能しています。以下では、Add Moreボタンがフォーカスされているとします。だから、私は下のバーに触れている場合は、ボタンのタッチも機能しています。この問題を解決するために、私は以下のコードを書いた:

protected boolean touchEvent(TouchEvent event) { 
    try { 

     int touchXPos = event.getX(1); 
     int touchYPos = event.getY(1); 
     int addBtnXPos = btnAddMore.getLeft(); 
     int saveBtnXPos = btnSave.getLeft(); 
     int helpBtnXpos = btnHelp.getLeft(); 

     int vfmTitleTouch = m_vfmTitle.getHeight(); 
if(event.getEvent() == TouchEvent.CLICK) 
     { 
     if ((touchXPos >= addBtnXPos + 40) && (touchXPos <= (addBtnXPos + btnAddMore.getWidth() + 40)) && (touchYPos <= screenHeight -10) && (touchYPos >= (screenHeight -10 - btnAddMore.getHeight())) /*&& (touchYPos < (screenHeight-gmYPos)) */) { 
      Logger.out("touchEvent", "------------------------------1"); 
      showPopUp(); 

     } else if ((touchXPos >= saveBtnXPos + 40) && (touchXPos <= (saveBtnXPos + 40 + btnSave.getWidth())) && (touchYPos <= screenHeight -10) && (touchYPos >= (screenHeight -10 - btnSave.getHeight())) /* && (touchYPos < (screenHeight-gmYPos))*/) { 
      Logger.out("touchEvent", "------------------------------2"); 
      saveToDb(); 

     } else if ((touchXPos >= helpBtnXpos) && (touchXPos <= (helpBtnXpos + btnHelp.getWidth())) && (touchYPos <= (btnHelp.getTop() + btnHelp.getHeight())) && (touchYPos >= btnHelp.getTop()) /* && (touchYPos < (screenHeight-gmYPos))*/) { 
      Logger.out("touchEvent", "------------------------------3"); 
      UiApplication.getUiApplication().pushScreen(new HelpScreen()); 

     } else if ((touchYPos <= screenHeight - hfmBtn.getHeight()) && (touchYPos >= (vfmTitleTouch))) { 
      Logger.out("touchEvent", "------------------------------4"); 
      //Logger.out("touchEvent", "touchY::::" +touchYPos + "Vfm Title::::" +vfmTitleTouch + " "+"GM Y Pos"+ gmYPos); 

     } 
      return true; 
     } 
    } catch (Exception e) { 
    } 

    return super.touchEvent(event); 
} 

しかし、それは働いていません。 とタッチイベントが

答えて

2

This is the screen shot of the screenPaul SylliboyArhimedが提供する質問BlackBerry touchEvent outside Field triggers fieldChangedの答えをチェックし

おかげで.. ..また、チェックボックスのような画面の真ん中に動作するはずです。

私はこれらのリンクを最初にコメントに貼り付けましたが、後でそれを削除して不要なタッチイベントを殺すためのコードスニペットを共有しました。

protected boolean touchEvent(TouchEvent message) { 
    int event = message.getEvent(); 
    // you can add other events 
    if (event == TouchEvent.CLICK || event == TouchEvent.UNCLICK) { 
     // Kill all click events that happen outside any fields 
     if (getFieldAtLocation(message.getX(1), message.getY(1)) == -1)   
      return true; 
    } 

    return super.touchEvent(message); 
} 

// The regular getFieldAtLocation returns wrong values in 
// open spaces in complex managers, so we override it 
public int getFieldAtLocation(int x, int y) { 
    XYRect rect = new XYRect(); 
    int index = getFieldCount() - 1; 
    while (index >= 0) { 
     getField(index).getExtent(rect); 
     if (rect.contains(x, y)) 
      break; 
     --index; 
    } 

    return index; 
} 
+0

ありがとうございます。私もコードにいくつか変更を加えました。しかしそれは何とか働いています。今、私はボタンの外側をクリックしているとき、それはボタンに関連するコードを実行していませんが、フォーカスはボタンに来ているだけです。これは、保存ボタンの外側に触れると、フォーカスが保存ボタンに表示されることを意味します。 –

+0

私は簡単な質問をしています。それらの 'ButtonField'のために' FieldChangeListener'を設定しましたか?もしそうなら、不要なイベントを殺すことを除いて、 'touchEvent(..)'で何もする必要はありません。そして、焦点の問題を引き起こす可能性があることについて私は確信していません。上記の回答リンクに記載されている戦略に従うことができます。 – Rupak

+0

はい。ボタンのfieldChange Listenerを使用しています。 –

関連する問題