有时候有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;
}