2011-12-20 2 views
3

Я придумал такую ​​идею, что на ощупь оба TextViews становятся невидимыми. Эта идея работает, когда я касаюсь одного пальца на TextView, и только один TextView становится невидимым. Но когда я тестирую его двумя пальцами, только один Textview становится невидимым. Это не делает невидимым текстовое изображение.Как сделать два текстовых изображения невидимыми на ощупь в андроиде

Я написал следующий код.

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 с объектами вы объявляете как текущие две точки зрения текста, которые вы хотите, чтобы исчезнуть.

EDIT:

Если вы хотите взгляды исчезнуть, если пользователь прикасается к обоим вы будете иметь, чтобы разработать более сложный подход. Я вижу две возможности:

  1. Событие onTouch требует вызова другой функции, которая добавляет все представления, инициируемые каждым уникальным MotionEvent. После добавления представления в список функция проверяет наличие обоих ожидаемых представлений. Если это так, вызовите вызовы невидимости.
  2. Вместо использования onTouch используйте метод onTouchEvent и определите, попадают ли координаты getX (index) getX (index) внутри двух видов, которые вы ожидаете коснуться.
+0

Вышеупомянутый код работает только с одним касанием, который не хуже pointerCount = 1. Ваш вышеупомянутый код позволяет указывать один палец за раз на текстовое изображение и заставляет его исчезать. Я хочу сразу удалить оба текста. –

0

Ваш телефон не поддерживает multitouch Event.That поэтому, если вы прикасаетесь два вид текста, в то время, его принимать только одно событие в то время, и один textview стал невидимым.

так что сначала проверьте, поддерживает ли ваш телефон более одного момента времени.