-
Notifications
You must be signed in to change notification settings - Fork 375
RippleView
ZieIony edited this page May 19, 2015
·
2 revisions
public interface RippleView {
RippleDrawable getRippleDrawable();
void setRippleDrawable(RippleDrawable rippleDrawable);
}
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
if (!changed)
return;
if (getWidth() == 0 || getHeight() == 0)
return;
if (rippleDrawable != null)
rippleDrawable.setBounds(0, 0, getWidth(), getHeight());
}
@Override
public void draw(Canvas canvas) {
super.draw(canvas);
if (rippleDrawable != null && rippleDrawable.getStyle() == RippleDrawable.Style.Over)
rippleDrawable.draw(canvas);
}
private RippleDrawable rippleDrawable;
private EmptyDrawable emptyBackground = new EmptyDrawable();
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
if (rippleDrawable != null && event.getAction() == MotionEvent.ACTION_DOWN)
rippleDrawable.setHotspot(event.getX(), event.getY());
return super.dispatchTouchEvent(event);
}
@Override
public RippleDrawable getRippleDrawable() {
return rippleDrawable;
}
public void setRippleDrawable(RippleDrawable newRipple) {
if (rippleDrawable != null) {
rippleDrawable.setCallback(null);
if (rippleDrawable.getStyle() == RippleDrawable.Style.Background)
super.setBackgroundDrawable(rippleDrawable.getBackground() == null ? emptyBackground : rippleDrawable.getBackground());
}
if (newRipple != null) {
newRipple.setCallback(this);
if (newRipple.getStyle() == RippleDrawable.Style.Background) {
super.setBackgroundDrawable((Drawable) newRipple);
}
}
rippleDrawable = newRipple;
}
@Override
protected boolean verifyDrawable(Drawable who) {
return super.verifyDrawable(who) || rippleDrawable == who;
}
@Override
public void invalidateDrawable(Drawable drawable) {
super.invalidateDrawable(drawable);
if (rippleDrawable != null && getParent() != null && rippleDrawable.getStyle() == RippleDrawable.Style.Borderless)
((View) getParent()).postInvalidate();
}
@Override
public void setBackground(Drawable background) {
setBackgroundDrawable(background);
}
@Override
public void setBackgroundDrawable(Drawable background) {
if (background instanceof RippleDrawable) {
setRippleDrawable((RippleDrawable) background);
return;
}
if (rippleDrawable != null && rippleDrawable.getStyle() == RippleDrawable.Style.Background) {
rippleDrawable.setCallback(null);
rippleDrawable = null;
}
super.setBackgroundDrawable(background == null ? emptyBackground : background);
}
Copyright 2015 Marcin Korniluk 'Zielony'