zoukankan      html  css  js  c++  java
  • 实现gridview空白处的点击事件

    今天做了一个girdview,要求长按item出现删除按钮,点击空白处取消,长按出现按钮可以,但是点击空白处有问题,如果点击到书籍的空白处可以用适配器的布局点击事件处理,但是空白区域不是item,不能使用setonitemclick事件解决,而且gridview也不允许直接设置onclick事件,因此只有重写gridview的touch事件才可以,以下是别人的代码,稍加修改后完成的

    自定义gridview

     1 package com.issmobile.numlibrary.view;
     2 
     3 import android.content.Context;
     4 import android.util.AttributeSet;
     5 import android.view.MotionEvent;
     6 import android.widget.GridView;
     7 
     8 /**
     9  * 自定义GridView
    10  */
    11 public class CustomGridView extends GridView {
    12 
    13     private float mTouchX;
    14     private float mTouchY;
    15     private OnTouchBlankPositionListener mTouchBlankPosListener;
    16 
    17     public CustomGridView(Context context, AttributeSet attrs, int defStyle) {
    18         super(context, attrs, defStyle);
    19     }
    20 
    21     public CustomGridView(Context context, AttributeSet attrs) {
    22         super(context, attrs);
    23     }
    24 
    25     public CustomGridView(Context context) {
    26         super(context);
    27     }
    28 
    29 
    30     @Override
    31     public boolean onTouchEvent(MotionEvent event) {
    32         if (mTouchBlankPosListener != null) {
    33             if (!isEnabled()) {
    34                 return isClickable() || isLongClickable();
    35             }
    36             int action = event.getActionMasked();
    37             float x = event.getX();
    38             float y = event.getY();
    39             final int motionPosition = pointToPosition((int) x, (int) y);
    40             if (motionPosition == INVALID_POSITION) {
    41                 switch (action) {
    42                 case MotionEvent.ACTION_DOWN:
    43                     mTouchX = x;
    44                     mTouchY = y;
    45                     mTouchBlankPosListener.onTouchBlank(event);
    46                     break;
    47                 case MotionEvent.ACTION_MOVE:
    48                     if (Math.abs(mTouchX - x) > 10
    49                             || Math.abs(mTouchY - y) > 10) {
    50                         mTouchBlankPosListener.onTouchBlank(event);
    51                     }
    52                     break;
    53                 case MotionEvent.ACTION_UP:
    54                     mTouchX = 0;
    55                     mTouchY = 0;
    56                     mTouchBlankPosListener.onTouchBlank(event);
    57                     break;
    58                 }
    59             }
    60         }
    61         return super.onTouchEvent(event);
    62     }
    63 
    64     /**
    65      * 设置GridView的空白区域的触摸事件
    66      * 
    67      * @param listener
    68      */
    69     public void setOnTouchBlankPositionListener(
    70             OnTouchBlankPositionListener listener) {
    71         mTouchBlankPosListener = listener;
    72     }
    73 
    74     public interface OnTouchBlankPositionListener {
    75         void onTouchBlank(MotionEvent event);
    76     }
    77 
    78 }
  • 相关阅读:
    微软经典面试笔试题
    Websense一面、二面及Offer
    微软2014年技术岗位在线笔试题
    2013年微软面试经历 – 终究离他们的要求还是有一定距离
    Mesos:数据库使用的持久化卷
    Mesos和Docker的集成
    可扩展架构取舍
    组织架构适配下的敏捷开发
    TensorFlow与主流深度学习框架对比
    Pokémon Go呼应设计:让全世界玩家疯狂沉迷
  • 原文地址:https://www.cnblogs.com/dongweiq/p/3873552.html
Copyright © 2011-2022 走看看