思路比较简单:
在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;
}
在最后触发事件的做下屏蔽,即可大功告成。