188 lines
4.1 KiB
Java
188 lines
4.1 KiB
Java
package net.simonvt.menudrawer;
|
|
|
|
import android.graphics.Canvas;
|
|
import android.graphics.ColorFilter;
|
|
import android.graphics.PorterDuff;
|
|
import android.graphics.Rect;
|
|
import android.graphics.Region;
|
|
import android.graphics.drawable.Drawable;
|
|
|
|
public class SlideDrawable extends Drawable implements Drawable.Callback {
|
|
|
|
private Drawable mWrapped;
|
|
private float mOffset;
|
|
|
|
private final Rect mTmpRect = new Rect();
|
|
|
|
private boolean mIsRtl;
|
|
|
|
public SlideDrawable(Drawable wrapped) {
|
|
mWrapped = wrapped;
|
|
}
|
|
|
|
public void setOffset(float offset) {
|
|
mOffset = offset;
|
|
invalidateSelf();
|
|
}
|
|
|
|
public float getOffset() {
|
|
return mOffset;
|
|
}
|
|
|
|
void setIsRtl(boolean isRtl) {
|
|
mIsRtl = isRtl;
|
|
invalidateSelf();
|
|
}
|
|
|
|
@Override
|
|
public void draw(Canvas canvas) {
|
|
mWrapped.copyBounds(mTmpRect);
|
|
canvas.save();
|
|
if (mIsRtl) {
|
|
canvas.translate(1.f / 3 * mTmpRect.width() * mOffset, 0);
|
|
} else {
|
|
canvas.translate(1.f / 3 * mTmpRect.width() * -mOffset, 0);
|
|
}
|
|
mWrapped.draw(canvas);
|
|
canvas.restore();
|
|
}
|
|
|
|
@Override
|
|
public void setChangingConfigurations(int configs) {
|
|
mWrapped.setChangingConfigurations(configs);
|
|
}
|
|
|
|
@Override
|
|
public int getChangingConfigurations() {
|
|
return mWrapped.getChangingConfigurations();
|
|
}
|
|
|
|
@Override
|
|
public void setDither(boolean dither) {
|
|
mWrapped.setDither(dither);
|
|
}
|
|
|
|
@Override
|
|
public void setFilterBitmap(boolean filter) {
|
|
mWrapped.setFilterBitmap(filter);
|
|
}
|
|
|
|
@Override
|
|
public void setAlpha(int alpha) {
|
|
mWrapped.setAlpha(alpha);
|
|
}
|
|
|
|
@Override
|
|
public void setColorFilter(ColorFilter cf) {
|
|
mWrapped.setColorFilter(cf);
|
|
}
|
|
|
|
@Override
|
|
public void setColorFilter(int color, PorterDuff.Mode mode) {
|
|
mWrapped.setColorFilter(color, mode);
|
|
}
|
|
|
|
@Override
|
|
public void clearColorFilter() {
|
|
mWrapped.clearColorFilter();
|
|
}
|
|
|
|
@Override
|
|
public boolean isStateful() {
|
|
return mWrapped.isStateful();
|
|
}
|
|
|
|
@Override
|
|
public boolean setState(int[] stateSet) {
|
|
return mWrapped.setState(stateSet);
|
|
}
|
|
|
|
@Override
|
|
public int[] getState() {
|
|
return mWrapped.getState();
|
|
}
|
|
|
|
@Override
|
|
public Drawable getCurrent() {
|
|
return mWrapped.getCurrent();
|
|
}
|
|
|
|
@Override
|
|
public boolean setVisible(boolean visible, boolean restart) {
|
|
return super.setVisible(visible, restart);
|
|
}
|
|
|
|
@Override
|
|
public int getOpacity() {
|
|
return mWrapped.getOpacity();
|
|
}
|
|
|
|
@Override
|
|
public Region getTransparentRegion() {
|
|
return mWrapped.getTransparentRegion();
|
|
}
|
|
|
|
@Override
|
|
protected boolean onStateChange(int[] state) {
|
|
mWrapped.setState(state);
|
|
return super.onStateChange(state);
|
|
}
|
|
|
|
@Override
|
|
protected void onBoundsChange(Rect bounds) {
|
|
super.onBoundsChange(bounds);
|
|
mWrapped.setBounds(bounds);
|
|
}
|
|
|
|
@Override
|
|
public int getIntrinsicWidth() {
|
|
return mWrapped.getIntrinsicWidth();
|
|
}
|
|
|
|
@Override
|
|
public int getIntrinsicHeight() {
|
|
return mWrapped.getIntrinsicHeight();
|
|
}
|
|
|
|
@Override
|
|
public int getMinimumWidth() {
|
|
return mWrapped.getMinimumWidth();
|
|
}
|
|
|
|
@Override
|
|
public int getMinimumHeight() {
|
|
return mWrapped.getMinimumHeight();
|
|
}
|
|
|
|
@Override
|
|
public boolean getPadding(Rect padding) {
|
|
return mWrapped.getPadding(padding);
|
|
}
|
|
|
|
@Override
|
|
public ConstantState getConstantState() {
|
|
return super.getConstantState();
|
|
}
|
|
|
|
@Override
|
|
public void invalidateDrawable(Drawable who) {
|
|
if (who == mWrapped) {
|
|
invalidateSelf();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void scheduleDrawable(Drawable who, Runnable what, long when) {
|
|
if (who == mWrapped) {
|
|
scheduleSelf(what, when);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void unscheduleDrawable(Drawable who, Runnable what) {
|
|
if (who == mWrapped) {
|
|
unscheduleSelf(what);
|
|
}
|
|
}
|
|
}
|