本文共 1921 字,大约阅读时间需要 6 分钟。
今天做了一个girdview,要求长按item出现删除按钮,点击空白处取消,长按出现按钮可以,但是点击空白处有问题,如果点击到书籍的空白处 可以用适配器的布局点击事件处理,但是空白区域不是item,不能使用setonitemclick事件解决,而且gridview也不允许直接设置 onclick事件,因此只有重写gridview的touch事件才可以,以下是别人的代码,稍加修改后完成的
自定义gridview
package com.issmobile.numlibrary.view;
import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; import android.widget.GridView; /** * 自定义GridView */ public class CustomGridView extends GridView { private float mTouchX; private float mTouchY; private OnTouchBlankPositionListener mTouchBlankPosListener; public CustomGridView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public CustomGridView(Context context, AttributeSet attrs) { super(context, attrs); } public CustomGridView(Context context) { super(context); } @Override public boolean onTouchEvent(MotionEvent event) { if (mTouchBlankPosListener != null) { if (!isEnabled()) { return isClickable() || isLongClickable(); } int action = event.getActionMasked(); float x = event.getX(); float y = event.getY(); final int motionPosition = pointToPosition((int) x, (int) y); if (motionPosition == INVALID_POSITION) { switch (action) { case MotionEvent.ACTION_DOWN: mTouchX = x; mTouchY = y; mTouchBlankPosListener.onTouchBlank(event); break; case MotionEvent.ACTION_MOVE: if (Math.abs(mTouchX - x) > 10 || Math.abs(mTouchY - y) > 10) { mTouchBlankPosListener.onTouchBlank(event); } break; case MotionEvent.ACTION_UP: mTouchX = 0; mTouchY = 0; mTouchBlankPosListener.onTouchBlank(event); break; } } } return super.onTouchEvent(event); } /** * 设置GridView的空白区域的触摸事件 * * @param listener */ public void setOnTouchBlankPositionListener( OnTouchBlankPositionListener listener) { mTouchBlankPosListener = listener; } public interface OnTouchBlankPositionListener { void onTouchBlank(MotionEvent event); } }本文转自 一点点征服 博客园博客,原文链接:http://www.cnblogs.com/ldq2016/p/5819164.html,如需转载请自行联系原作者