0

私はタッチアンドタイプの電話用の1つのアプリを開発しています。これで、アプリケーションの1つの画面に、3つのボタンがあります。

ここで3つのボタンをタッチすると、機能しています。しかし、ボタンの外側、つまりトップバーまたはボトムバーをタッチすると、タッチイベントも機能します。以下で、[さらに追加]ボタンにフォーカスがあるとします。したがって、下部のバーをタッチしている場合は、ボタンタッチも機能しています。この問題を解決するために、私は以下のコードを書きました:

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);
}

しかし、それは機能していません..誰かが私を助けることができますか?また、タッチイベントは、チェックボックスの場合と同様に画面の中央で機能する必要があります。

ありがとう..これは画面のスクリーンショットです

4

1 に答える 1

2

Paul SylliboyArhimedが提供するフィールド トリガー fieldChanged 外の BlackBerry touchEventの質問の回答を確認してください。

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

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;
}
于 2012-04-12T09:38:33.773 に答える