2011-12-20 47 views
3

我想出了一個想法,這樣的觸摸兩個TextViews都變得不可見。當我在TextView上觸摸單個手指並且只有一個TextView變爲不可見時,這個想法很有用。但是當我用兩根手指測試它時,只有一個Textview變得不可見。它不會使兩個文本視圖都無法呈現。如何使兩個文字看不見的觸摸在Android

我寫了下面的代碼。

public class MatchMeaning1 extends Activity implements OnTouchListener{ 

    private static final String TAG = MatchMeaning1.class.getSimpleName(); 

    TextView[] txtWord, txtMeaning; 

    int [] wordID = {R.id.txtWord1, R.id.txtWord2, R.id.txtWord3, R.id.txtWord4, R.id.txtWord5}; 
    int[] meaningID = {R.id.txtMeaning1,R.id.txtMeaning2, R.id.txtMeaning3, R.id.txtMeaning4, R.id.txtMeaning5 }; 

    String[] word = {"1.abidcation","2.abhor","3.abide","4.abyssmal","5.award"}; 
    String[] meaning = {"a.deep","b.stay","c.cede","d.accolade","5.hate"}; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.match_meaning); 
     txtWord = new TextView[5]; 
     txtMeaning = new TextView[5]; 

     for(int i = 0; i < txtWord.length; i++){ 
      txtWord[i] = (TextView)findViewById(wordID[i]); 
      txtMeaning[i] = (TextView)findViewById(meaningID[i]); 
      txtWord[i].setText(word[i]); 
      txtMeaning[i].setText(meaning[i]); 
      txtWord[i].setOnTouchListener(this); 
      txtMeaning[i].setOnTouchListener(this); 
     } 

    } 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     int pointerCount = event.getPointerCount(); 

     if(pointerCount == 2){ 
      TextView [] tv = new TextView[2]; 
      for(int i = 0; i < tv.length ;i++){ 
       tv[i] = (TextView)v; 
       tv[i].setVisibility(TextView.INVISIBLE); 
      } 
     } 
     return true; 
    } 

} 

上面的代碼不會對pointerCount = 2的工作,但它適用於pointerCount = 1 誰能告訴我該如何解決?

回答

1

onTouch事件是在每個視圖基礎上處理的,所以它會觸發兩個文本查看,除非您返回真正的吞噬事件。你想要的是可能接近:

@Override 
public boolean onTouch(View v, MotionEvent event) { 
    if(v != YOUR_TEXT_VIEW1 && v != YOUR_TEXT_VIEW2) return false; 
    ((TextView)v).setVisibility(TextView.INVISIBLE); 
    return false; 
} 

與聲明,只要你想消失,目前的兩個文本視圖對象替換YOUR_TEXT_VIEW 1 & 2。

編輯:

如果只想意見消失,如果用戶觸摸他們兩個你將不得不制定一個更復雜的方法。我看到兩種可能性:

  1. onTouch事件需要調用另一個函數,該函數附加由每個唯一MotionEvent觸發的所有視圖。將視圖追加到列表後,函數會檢查兩個預期視圖是否存在。如果是這樣,觸發隱形電話。
  2. 不是使用onTouch,而是使用onTouchEvent方法,並確定getX(index)getY(index)座標是否落在您期望觸摸的兩個視圖內。
+0

上述代碼僅適用於單點觸摸,與pointerCount = 1一樣好。您上面提到的代碼允許在textview上一次點一個手指並使其消失。我想立即消失兩個文本。 – 2011-12-21 07:12:31

0

您的手機不支持multitouch Event.That就是爲什麼如果你是在同一時間接觸兩個文本視圖,其採取只有一個事件的時間和一個textview成爲無形。

所以首先檢查您的手機是否支持多點觸摸。

相關問題