有时候有ImageView的点击效果,而且需要把点击效果加在图片之上。虽然AblistView 组件有android:drawSelectorOnTop 这个参数,但是不是所有的组件都行。
所以没办法,就把ImageView 的方法重新实现了一下,当然其他的View也适用
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if(drawFocusCover){ int count = canvas.getSaveCount(); if(isRound){ //如果是头像之类的,圆形图片,可以用这个 canvas.drawOval(rectF, mPaint); }else{ canvas.drawRect(rect, mPaint); } canvas.restoreToCount(count); } } public void init(){ mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mPaint.setColor(0x70000000); } @Override protected void drawableStateChanged () { super.drawableStateChanged (); if(canDraw){ for(int state :getDrawableState()){ if (state ==android.R.attr.state_focused || state == android.R.attr.state_pressed || state == android.R.attr.state_selected) { Drawable drawable = getDrawable(); if(drawable!=null){ // 本来可以这样的,但是GridView这样的自适应组件,会导致压缩变形 // drawable.copyBounds(rect); } this.getDrawingRect(rect); rect.top = this.getPaddingTop(); rect.right = rect.right - this.getPaddingRight(); rect.bottom = rect.bottom-this.getPaddingBottom(); rect.left = this.getPaddingLeft(); rectF = new RectF(rect); drawFocusCover = true; invalidate(); return; } } drawFocusCover = false; invalidate(); } return; }