NeumorphismView in Android
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;
public class NeumorphismView extends View {
private Paint mPaint;
private RectF mRectF;
private int mRadius = 60;
private int mShadowSize = 20;
private int mBackgroundColor = 0xffe0e0e0;
private int mShadowColor = 0xffa0a0a0;
private int mHighlightColor = 0xffffffff;
public NeumorphismView(Context context) {
super(context);
init();
}
public NeumorphismView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public NeumorphismView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setStyle(Paint.Style.FILL);
mRectF = new RectF();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int centerX = getWidth() / 2;
int centerY = getHeight() / 2;
// Draw background
mPaint.setColor(mBackgroundColor);
mRectF.set(centerX - mRadius, centerY - mRadius, centerX + mRadius, centerY + mRadius);
canvas.drawRoundRect(mRectF, mRadius, mRadius, mPaint);
// Draw shadow
mPaint.setColor(mShadowColor);
mRectF.set(centerX - mRadius + mShadowSize, centerY - mRadius + mShadowSize,
centerX + mRadius + mShadowSize, centerY + mRadius + mShadowSize);
canvas.drawRoundRect(mRectF, mRadius, mRadius, mPaint);
// Draw highlight
mPaint.setColor(mHighlightColor);
mRectF.set(centerX - mRadius - mShadowSize, centerY - mRadius - mShadowSize,
centerX + mRadius - mShadowSize, centerY + mRadius - mShadowSize);
canvas.drawRoundRect(mRectF, mRadius, mRadius, mPaint);
}
public void setBackgroundColor(int color) {
mBackgroundColor = color;
invalidate();
}
public void setShadowColor(int color) {
mShadowColor = color;
invalidate();
}
public void setHighlightColor(int color) {
mHighlightColor = color;
invalidate();
}
}