我正在尝试设置一个响应onTouch的按钮的GridView。例如,如果我在屏幕上水平、垂直或对角滑动手指,那么我想要选中被触摸的按钮。我尝试为按钮设置OnTouchListener,但这不起作用,只有拖动事件中的第一个按钮接收onTouch事件。
接下来,我尝试为GridView创建一个OnTouchListener,然后使用X,Y坐标来确定触摸了哪些按钮。这似乎也不起作用,因为只有当我在GridView的最边缘开始拖动时,才会将MOTION_DOWN事件传递给GridView的onTouch()。事实上,如果我在网格上水平拖动手指,除非我在GridView的边缘开始拖动,否则根本不会触发onTouch事件。有没有人知道更好的方法呢?
提前谢谢。
gridview.setOnTouchListener(new View.OnTouchListener()
{
@Override
public boolean onTouch(@SuppressWarnings("unused") View view, MotionEvent event)
{
float X = event.getX();
float Y = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
System.out.println("Down: " + X + "," + Y);
break;
case MotionEvent.ACTION_MOVE:
System.out.println("Move: " + X + "," + Y);
break;
case MotionEvent.ACTION_UP:
System.out.println("Up: " + X + "," + Y);
break;
}
return true;
}
}发布于 2011-09-30 01:59:30
如果您有一个适配器实现了一个接口来侦听网格单元格上的单击事件,例如:
public interface OnSaveEditsListener
{
public abstract void onSaveEdits();
}
private OnSaveEditsListener saveEditsListener = null;
public void setOnSaveEditsListener(OnSaveEditsListener l) {
saveEditsListener = l;
}并且您应该在适配器中实现getView(..)方法,特殊的单击侦听器:
holder.gridcell.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
CalendarPosition = position;
v.requestFocusFromTouch();
try{
saveEditsListener.onSaveEdits();
holder.gridcell.invalidate();
}catch(Exception ex){}
}
});建议对适配器内的视图元素使用限定符。
最后,从您的Activity类中调用:
adapter.setOnSaveEditsListener(new GridCellAdapter.OnSaveEditsListener() {
@Override
public void onSaveEdits() {
/** methods *//
});
}发布于 2011-07-27 19:33:51
您可能希望尝试使用GestureDetector来触发正确的触摸事件。从那时起,你应该能够确定你做了什么以及具体在哪里。
GestureDetector会给你几种方法,告诉你你做了什么(SingleTapUp,Fling,Scroll,...)以及你在什么位置和多长时间这样做(例如,如果你滑动,你就会得到开始位置,滑动的持续时间和滑动的距离)
发布于 2012-02-24 11:17:37
它并不完整,但可以帮助您
gridview.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_MOVE){
gridview.requestFocusFromTouch();
gridview.setSelection(gridview.pointToPosition((int)event.getX(),(int)event.getY()));
return true;
}
if(event.getAction() == MotionEvent.ACTION_UP){
gridview.clearFocus();
return true;
}
return false;
}
});https://stackoverflow.com/questions/2827611
复制相似问题