Android 将OnTouchListener添加到GridView中的每个文本视图

Android 将OnTouchListener添加到GridView中的每个文本视图,android,gridview,textview,ontouchlistener,Android,Gridview,Textview,Ontouchlistener,我已经为我的GridView实现了一个OnTouchListener,这样我就可以检测到用户是否触摸了TextView,如果是这样,我会改变它的形状,然后在发布时,它应该将形状重置为原始形状。除了一种情况外,它是有效的。如果我触碰一个文本视图,然后将手指拖动到另一个文本视图,然后释放,当我需要它重置第一个触碰的文本视图时,它将重置手指在释放时结束的文本视图的形状 为了解决这个问题,我想在每个TextView中添加一个OnTouchListener,而不是整个GridView。然后,我可以确定释放

我已经为我的GridView实现了一个OnTouchListener,这样我就可以检测到用户是否触摸了TextView,如果是这样,我会改变它的形状,然后在发布时,它应该将形状重置为原始形状。除了一种情况外,它是有效的。如果我触碰一个文本视图,然后将手指拖动到另一个文本视图,然后释放,当我需要它重置第一个触碰的文本视图时,它将重置手指在释放时结束的文本视图的形状

为了解决这个问题,我想在每个TextView中添加一个OnTouchListener,而不是整个GridView。然后,我可以确定释放后形状会重置。但是如何做到这一点,我无法将OnItemTouchListerner应用于GridView。(我不能使用OnItemClickListener,因为我已经在使用它了,它需要在触摸时调用,而不仅仅是单击。)

如果您不能做到这一点,我如何修复此代码,以确保即使触摸在屏幕上的其他位置被释放,在触摸释放时形状也始终被重置?当手指离开触摸文本视图的边界时,应立即重置

gridView.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        float currentXPosition = event.getX();
        float currentYPosition = event.getY();
        int position = gridView.pointToPosition((int) currentXPosition, (int) currentYPosition);

        //get real position, because of item reuse position might not be the correct position
        int firstPosition = gridView.getFirstVisiblePosition();
        int childPosition = position - firstPosition;

        if (gridView.getChildAt(childPosition) != null) {
            TextView touchedTextView = (TextView)gridView.getChildAt(childPosition);

            int action = event.getActionMasked();

            if (action == MotionEvent.ACTION_DOWN) {
                Log.d("test", "touch down");
                touchedTextView.setBackground(getResources().getDrawable(R.drawable.button_shape_active));
                }
            } else if (action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP) {
                Log.d("test", "touch released"); 
                touchedTextView.setBackground(getResources().getDrawable(R.drawable.button_shape));
                }
            }
        }

        return false;
    }
});

使
touchedTextView
成为
OnTouchListener
的类成员,并在
if(action==MotionEvent.action\u DOWN)
块中设置它。或者,您可以在适配器的
getView()
方法中的每个
TextView
上设置一个
OnTouchListener