将OnTouchListener添加到GridView中的每个TextView

时间:2014-11-22 20:58:45

标签: android gridview textview ontouchlistener

我已经为我的GridView实现了一个OnTouchListener,以便我可以检测用户是否触摸了TextView,如果是这样我改变了它的形状,然后在释放时它应该将形状重置为原始形状。它有效,除了一个案例。如果我触摸TextView然后将手指拖动到另一个TextView然后释放,它将重置手指在释放时的TextView形状,当我需要它来重置第一个触摸的TextView时。

要解决此问题,我想为每个TextView而不是整个GridView添加一个OnTouchListener。然后我可以确定在释放时形状被重置。你是怎么做到的,没有OnItemTouchListerner我可以应用于GridView。 (我无法使用OnItemClickListener,因为我已经在使用它,并且需要在触摸时调用它而不仅仅是点击。)

如果您不能这样做,我该如何修复此代码以确保即使在屏幕上的其他位置发布触摸,触控释放也会始终重置形状?一旦手指离开触摸的TextView的边界,就应该重置它。

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;
    }
});

0 个答案:

没有答案