Android 将OnTouchListener添加到GridView中的每个文本视图
我已经为我的GridView实现了一个OnTouchListener,这样我就可以检测到用户是否触摸了TextView,如果是这样,我会改变它的形状,然后在发布时,它应该将形状重置为原始形状。除了一种情况外,它是有效的。如果我触碰一个文本视图,然后将手指拖动到另一个文本视图,然后释放,当我需要它重置第一个触碰的文本视图时,它将重置手指在释放时结束的文本视图的形状 为了解决这个问题,我想在每个TextView中添加一个OnTouchListener,而不是整个GridView。然后,我可以确定释放后形状会重置。但是如何做到这一点,我无法将OnItemTouchListerner应用于GridView。(我不能使用OnItemClickListener,因为我已经在使用它了,它需要在触摸时调用,而不仅仅是单击。) 如果您不能做到这一点,我如何修复此代码,以确保即使触摸在屏幕上的其他位置被释放,在触摸释放时形状也始终被重置?当手指离开触摸文本视图的边界时,应立即重置Android 将OnTouchListener添加到GridView中的每个文本视图,android,gridview,textview,ontouchlistener,Android,Gridview,Textview,Ontouchlistener,我已经为我的GridView实现了一个OnTouchListener,这样我就可以检测到用户是否触摸了TextView,如果是这样,我会改变它的形状,然后在发布时,它应该将形状重置为原始形状。除了一种情况外,它是有效的。如果我触碰一个文本视图,然后将手指拖动到另一个文本视图,然后释放,当我需要它重置第一个触碰的文本视图时,它将重置手指在释放时结束的文本视图的形状 为了解决这个问题,我想在每个TextView中添加一个OnTouchListener,而不是整个GridView。然后,我可以确定释放
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
。