Android Launcher 解决BubbleTextView 点击事件只在ICON上面触发,防止误触

来源:互联网 发布:西安java招聘 编辑:程序博客网 时间:2024/06/03 15:00

思路比较简单:

在OnTouch手指抬起的时候,进行判断。

//是不是触摸在图标上面    public boolean getRectTouchIcon(MotionEvent event){        if(getCompoundDrawables()!=null&&getCompoundDrawables().length==4){            final Drawable topDrawable = getCompoundDrawables()[1];            if(topDrawable!=null){                Rect compoundRect= topDrawable.getBounds();                int hspace = getRight() - getLeft() - getCompoundPaddingRight() - getCompoundPaddingLeft();                int left=  getCompoundPaddingLeft() +                        (hspace - compoundRect.width()) / 2;                int top= getPaddingTop();                Rect iconRect=new Rect(left,top,left+compoundRect.width(),top+compoundRect.height());                int touchX=(int)event.getX();                int touchY=(int)event.getY();                int l=iconRect.left;                int t=iconRect.top;                int r=iconRect.right;                int b=iconRect.bottom;                if(touchX>=l&&touchX<=r&&touchY>=t&&touchY<= b){                    return true;                }            }        }        return false;    }



如果不是点击在ICON上面,则屏蔽掉点击事件即可。

  if (!isPressed()) {                    mPressedBackground = null;                }else{                    //在手指抬起来的时候,判断是否触摸位置在图标上面                    isCanClick=true;                    boolean touchIcon=getRectTouchIcon(event);                    if(!touchIcon){                        isCanClick=false;                    }                }


当然还需要,重写下,

boolean isCanClick=false;    @Override    public boolean performClick() {        if(isCanClick){            return super.performClick();        }        return true;    }
在最后触发事件的做下屏蔽,即可大功告成。

0 0
原创粉丝点击