首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GridView onTouch

GridView onTouch
EN

Stack Overflow用户
提问于 2010-05-13 22:32:51
回答 4查看 5.6K关注 0票数 3

我正在尝试设置一个响应onTouch的按钮的GridView。例如,如果我在屏幕上水平、垂直或对角滑动手指,那么我想要选中被触摸的按钮。我尝试为按钮设置OnTouchListener,但这不起作用,只有拖动事件中的第一个按钮接收onTouch事件。

接下来,我尝试为GridView创建一个OnTouchListener,然后使用X,Y坐标来确定触摸了哪些按钮。这似乎也不起作用,因为只有当我在GridView的最边缘开始拖动时,才会将MOTION_DOWN事件传递给GridView的onTouch()。事实上,如果我在网格上水平拖动手指,除非我在GridView的边缘开始拖动,否则根本不会触发onTouch事件。有没有人知道更好的方法呢?

提前谢谢。

代码语言:javascript
复制
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;
 }
}
EN

回答 4

Stack Overflow用户

发布于 2011-09-30 01:59:30

如果您有一个适配器实现了一个接口来侦听网格单元格上的单击事件,例如:

代码语言:javascript
复制
public interface OnSaveEditsListener
{
    public abstract void onSaveEdits();
}

private OnSaveEditsListener saveEditsListener = null;
public void setOnSaveEditsListener(OnSaveEditsListener l) {
    saveEditsListener = l;
}

并且您应该在适配器中实现getView(..)方法,特殊的单击侦听器:

代码语言:javascript
复制
        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类中调用:

代码语言:javascript
复制
    adapter.setOnSaveEditsListener(new GridCellAdapter.OnSaveEditsListener() {

        @Override
        public void onSaveEdits() {
            /** methods  *//
    });
}
票数 1
EN

Stack Overflow用户

发布于 2011-07-27 19:33:51

您可能希望尝试使用GestureDetector来触发正确的触摸事件。从那时起,你应该能够确定你做了什么以及具体在哪里。

GestureDetector会给你几种方法,告诉你你做了什么(SingleTapUp,Fling,Scroll,...)以及你在什么位置和多长时间这样做(例如,如果你滑动,你就会得到开始位置,滑动的持续时间和滑动的距离)

票数 0
EN

Stack Overflow用户

发布于 2012-02-24 11:17:37

它并不完整,但可以帮助您

代码语言:javascript
复制
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;
        }
    });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2827611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档