我已经为我的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;
}
});