2012-06-04 69 views
0

我使用this guide作爲參考創建我的第一個Android應用程序。目前,我的畫布上有一個紅色按鈕,當用戶單擊按鈕時,布爾值(綠色)將設置爲true,以使按鈕的位圖變爲綠色按鈕。Android的onTouchEvent問題()

應用程序的這部分工作,但無論用戶在畫布上點擊的位置如何,它都可以工作。我只想要當用戶點擊按鈕的位圖時更改布爾值。以下是我目前在我的代碼:

的的onTouchEvent()方法

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    if (event.getAction() == MotionEvent.ACTION_DOWN) { 

     button.handleActionDown((int)event.getX(), (int)event.getY()); 

     if (button.isTouched()) { 
      green = true; 
     } 
    } if (event.getAction() == MotionEvent.ACTION_MOVE) { 

    } if (event.getAction() == MotionEvent.ACTION_UP) { 
     if (button.isTouched()) { 
      green = false; 
      button.setTouched(false); 
     } 
    } 
    return true; 
} 

的handleActionDown()方法

public void handleActionDown(int eventX, int eventY) { 
    if (eventX >= (x - bitmap.getWidth()/2) && (eventX <= (x + bitmap.getWidth()/2))) { 
     if (eventY >= (y - bitmap.getHeight()/2) && (eventY <= (y + bitmap.getHeight()/2))) { 
      setTouched(true); 

     } else { 
      setTouched(false); 
     } 
    } else { 
     setTouched(false); 
    } 
} 

任何人都可以看到我很想念爲了使ACTION_DOWN事件生效,只有當位圖的位圖被觸摸時才觸發?

問候

+0

當代碼的方式違反行爲你期望什麼,一個好的第一手段可以是創建一些調試輸出 - 在handleActionDown()中放置一些日誌記錄,特別是eventX vs x和事件Y vs y。甚至在屏幕上顯示這些數字。你最終可能會發現一些簡單的東西,比如x和y沒有被初始化。或者,也許你的位圖沒有你認爲它的尺寸,或者... –

+0

對我來說,如果你正在嘗試做的就是創建一個按鈕,其狀態和狀態可以在一個簡單的狀態下完成按鈕xml文件。 – trumpetlicks

+0

你真的想創建自己的自定義按鈕識別嗎?因爲您的onTouchEvent似乎正在您的頂級視圖上實施。 – trumpetlicks

回答

0

避免使用的onTouchEvent的按鈕,這是更好,因爲操作系統檢測到特定的按鈕是否被點擊,而不是你不必計算一個按鈕的位置

首先使用的onClick,設置onClickListener

btn.setOnClickListener(this); 

這是假定當前類實現View.OnClickListener,所以如果你不執行它,你要麼必須使用不同的類或創建一個匿名內部類。

然後,在onClick方法,確保ID匹配,並添加你想要做的任何行動if語句內(或可替代switch語句)

@Override 
public void onClick(View v) { 

    if(v.getId() == R.id.btn1){ 
     //do whatever you want on press 
    } 
}