Как сделать два текстовых обзора невидимыми на ощупь в андроиде - PullRequest
3 голосов
/ 20 декабря 2011

У меня возникла идея, что при прикосновении двух текстовых представлений оба становятся невидимыми. Эта идея работает, когда я касаюсь одного пальца на 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. Может кто-нибудь сказать мне решение для этого?

Ответы [ 2 ]

1 голос
/ 20 декабря 2011

Событие onTouch обрабатывается для каждого представления отдельно, поэтому оно будет запускаться для обоих текстовых представлений, за исключением того, что вы возвращаете значение true, которое поглощает событие. То, что вы хотите, вероятно, ближе к:

@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) getY (index) в два вида, к которым вы ожидаете прикоснуться.
0 голосов
/ 20 декабря 2011

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

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

...