如何在android中触摸时使两个textview不可见

时间:2011-12-20 11:19:45

标签: android multi-touch textview

我想出了一个想法,只要触摸两个TextView就会变得不可见。当我在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 个答案:

答案 0 :(得分:1)

onTouch事件基于每个视图进行处理,因此除了您返回true以吞下事件之外,它将为两个textview触发。你想要的可能更接近:

@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&amp; 2,您声明的对象是您想要消失的当前两个文本视图。

修改

如果您只希望视图在用户触摸它们时消失,那么您将不得不设计更具参与性的方法。我看到两种可能性:

  1. onTouch事件需要调用另一个函数,该函数附加由每个唯一的MotionEvent触发的所有视图。将视图附加到列表后,函数会检查是否存在两个预期视图。如果是,请触发隐身调用。
  2. 使用onTouchEvent方法而不是使用onTouch,并确定getX(索引)getY(索引)坐标是否落在您希望触及的两个视图中。

答案 1 :(得分:0)

您的手机不支持multitouch事件。这就是为什么如果您一次触摸两个文本视图,它一次只能触发一个事件而一个textview变得不可见。

首先检查您的手机是否支持多次触摸。