From 3b55d0cdd0523f0350df3f9f57f13f6290532780 Mon Sep 17 00:00:00 2001 From: srdubya Date: Sat, 3 Jan 2015 09:42:05 -0700 Subject: [PATCH 1/2] Addeded shadowing. --- .../java/at/markushi/ui/CircleButton.java | 45 ++++++++++++++----- library/src/main/res/values/attrs.xml | 3 ++ 2 files changed, 38 insertions(+), 10 deletions(-) diff --git a/library/src/main/java/at/markushi/ui/CircleButton.java b/library/src/main/java/at/markushi/ui/CircleButton.java index 0e0ca84..b277db4 100644 --- a/library/src/main/java/at/markushi/ui/CircleButton.java +++ b/library/src/main/java/at/markushi/ui/CircleButton.java @@ -3,6 +3,7 @@ import android.animation.ObjectAnimator; import android.content.Context; import android.content.res.TypedArray; +import android.graphics.BlurMaskFilter; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; @@ -10,13 +11,13 @@ import android.util.TypedValue; import android.widget.ImageView; -import at.markushi.circlebutton.R; - public class CircleButton extends ImageView { private static final int PRESSED_COLOR_LIGHTUP = 255 / 25; private static final int PRESSED_RING_ALPHA = 75; private static final int DEFAULT_PRESSED_RING_WIDTH_DIP = 4; + private static final int DEFAULT_SHADOW_X_OFFSET_DIP = 1; + private static final int DEFAULT_SHADOW_Y_OFFSET_DIP = 2; private static final int ANIMATION_TIME_ID = android.R.integer.config_shortAnimTime; private int centerY; @@ -29,6 +30,15 @@ public class CircleButton extends ImageView { private float animationProgress; + private float density = 3.0f; + private int shadowColor = Color.GRAY; + private int shadowXOffset = (int) TypedValue + .applyDimension(TypedValue.COMPLEX_UNIT_DIP, DEFAULT_SHADOW_X_OFFSET_DIP, + getResources().getDisplayMetrics()); + private int shadowYOffset = (int) TypedValue + .applyDimension(TypedValue.COMPLEX_UNIT_DIP, DEFAULT_SHADOW_Y_OFFSET_DIP, + getResources().getDisplayMetrics()); + private int pressedRingWidth; private int defaultColor = Color.BLACK; private int pressedColor; @@ -66,10 +76,12 @@ public void setPressed(boolean pressed) { @Override protected void onDraw(Canvas canvas) { - canvas.drawCircle(centerX, centerY, pressedRingRadius + animationProgress, focusPaint); - canvas.drawCircle(centerX, centerY, outerRadius - pressedRingWidth, circlePaint); - super.onDraw(canvas); - } + circlePaint.setShadowLayer(getShadowRadius(), shadowXOffset, shadowYOffset, shadowColor); + + canvas.drawCircle(centerX, centerY, pressedRingRadius + animationProgress, focusPaint); + canvas.drawCircle(centerX, centerY, outerRadius - pressedRingWidth, circlePaint); + super.onDraw(canvas); + } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { @@ -94,7 +106,7 @@ public void setColor(int color) { this.pressedColor = getHighlightColor(color, PRESSED_COLOR_LIGHTUP); circlePaint.setColor(defaultColor); - focusPaint.setColor(defaultColor); + focusPaint.setColor(defaultColor); focusPaint.setAlpha(PRESSED_RING_ALPHA); this.invalidate(); @@ -117,6 +129,7 @@ private void init(Context context, AttributeSet attrs) { circlePaint = new Paint(Paint.ANTI_ALIAS_FLAG); circlePaint.setStyle(Paint.Style.FILL); + setLayerType(LAYER_TYPE_SOFTWARE, circlePaint); focusPaint = new Paint(Paint.ANTI_ALIAS_FLAG); focusPaint.setStyle(Paint.Style.STROKE); @@ -129,18 +142,30 @@ private void init(Context context, AttributeSet attrs) { final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CircleButton); color = a.getColor(R.styleable.CircleButton_cb_color, color); pressedRingWidth = (int) a.getDimension(R.styleable.CircleButton_cb_pressedRingWidth, pressedRingWidth); - a.recycle(); + shadowColor = a.getColor(R.styleable.CircleButton_cb_shadowColor, shadowColor); + shadowXOffset = (int) a.getDimension(R.styleable.CircleButton_cb_shadowXOffset, shadowXOffset); + shadowYOffset = (int) a.getDimension(R.styleable.CircleButton_cb_shadowYOffset, shadowYOffset); + a.recycle(); } setColor(color); - focusPaint.setStrokeWidth(pressedRingWidth); + focusPaint.setStrokeWidth(pressedRingWidth); final int pressedAnimationTime = getResources().getInteger(ANIMATION_TIME_ID); pressedAnimator = ObjectAnimator.ofFloat(this, "animationProgress", 0f, 0f); pressedAnimator.setDuration(pressedAnimationTime); + + density = getResources().getDisplayMetrics().density; } - private int getHighlightColor(int color, int amount) { + private float getShadowRadius() { + if(isPressed()){ + return 0.0f; + } + return density * 2.0f; + } + + private int getHighlightColor(int color, int amount) { return Color.argb(Math.min(255, Color.alpha(color)), Math.min(255, Color.red(color) + amount), Math.min(255, Color.green(color) + amount), Math.min(255, Color.blue(color) + amount)); } diff --git a/library/src/main/res/values/attrs.xml b/library/src/main/res/values/attrs.xml index 747de0a..c80926b 100644 --- a/library/src/main/res/values/attrs.xml +++ b/library/src/main/res/values/attrs.xml @@ -3,5 +3,8 @@ + + + \ No newline at end of file From b31cb4d3755be898c2d71e1d22d72ec2b76e0a1c Mon Sep 17 00:00:00 2001 From: srdubya Date: Sat, 3 Jan 2015 10:04:15 -0700 Subject: [PATCH 2/2] Fixed indentations back to tabs. --- .../java/at/markushi/ui/CircleButton.java | 63 ++++++++++--------- 1 file changed, 32 insertions(+), 31 deletions(-) diff --git a/library/src/main/java/at/markushi/ui/CircleButton.java b/library/src/main/java/at/markushi/ui/CircleButton.java index b277db4..77a3089 100644 --- a/library/src/main/java/at/markushi/ui/CircleButton.java +++ b/library/src/main/java/at/markushi/ui/CircleButton.java @@ -3,7 +3,6 @@ import android.animation.ObjectAnimator; import android.content.Context; import android.content.res.TypedArray; -import android.graphics.BlurMaskFilter; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; @@ -11,13 +10,15 @@ import android.util.TypedValue; import android.widget.ImageView; +import at.markushi.circlebutton.R; + public class CircleButton extends ImageView { private static final int PRESSED_COLOR_LIGHTUP = 255 / 25; private static final int PRESSED_RING_ALPHA = 75; private static final int DEFAULT_PRESSED_RING_WIDTH_DIP = 4; - private static final int DEFAULT_SHADOW_X_OFFSET_DIP = 1; - private static final int DEFAULT_SHADOW_Y_OFFSET_DIP = 2; + private static final int DEFAULT_SHADOW_X_OFFSET_DIP = 1; + private static final int DEFAULT_SHADOW_Y_OFFSET_DIP = 2; private static final int ANIMATION_TIME_ID = android.R.integer.config_shortAnimTime; private int centerY; @@ -30,14 +31,14 @@ public class CircleButton extends ImageView { private float animationProgress; - private float density = 3.0f; - private int shadowColor = Color.GRAY; - private int shadowXOffset = (int) TypedValue - .applyDimension(TypedValue.COMPLEX_UNIT_DIP, DEFAULT_SHADOW_X_OFFSET_DIP, - getResources().getDisplayMetrics()); - private int shadowYOffset = (int) TypedValue - .applyDimension(TypedValue.COMPLEX_UNIT_DIP, DEFAULT_SHADOW_Y_OFFSET_DIP, - getResources().getDisplayMetrics()); + private float density = 3.0f; + private int shadowColor = Color.GRAY; + private int shadowXOffset = (int) TypedValue + .applyDimension(TypedValue.COMPLEX_UNIT_DIP, DEFAULT_SHADOW_X_OFFSET_DIP, + getResources().getDisplayMetrics()); + private int shadowYOffset = (int) TypedValue + .applyDimension(TypedValue.COMPLEX_UNIT_DIP, DEFAULT_SHADOW_Y_OFFSET_DIP, + getResources().getDisplayMetrics()); private int pressedRingWidth; private int defaultColor = Color.BLACK; @@ -76,12 +77,12 @@ public void setPressed(boolean pressed) { @Override protected void onDraw(Canvas canvas) { - circlePaint.setShadowLayer(getShadowRadius(), shadowXOffset, shadowYOffset, shadowColor); + circlePaint.setShadowLayer(getShadowRadius(), shadowXOffset, shadowYOffset, shadowColor); - canvas.drawCircle(centerX, centerY, pressedRingRadius + animationProgress, focusPaint); - canvas.drawCircle(centerX, centerY, outerRadius - pressedRingWidth, circlePaint); - super.onDraw(canvas); - } + canvas.drawCircle(centerX, centerY, pressedRingRadius + animationProgress, focusPaint); + canvas.drawCircle(centerX, centerY, outerRadius - pressedRingWidth, circlePaint); + super.onDraw(canvas); + } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { @@ -106,7 +107,7 @@ public void setColor(int color) { this.pressedColor = getHighlightColor(color, PRESSED_COLOR_LIGHTUP); circlePaint.setColor(defaultColor); - focusPaint.setColor(defaultColor); + focusPaint.setColor(defaultColor); focusPaint.setAlpha(PRESSED_RING_ALPHA); this.invalidate(); @@ -129,7 +130,7 @@ private void init(Context context, AttributeSet attrs) { circlePaint = new Paint(Paint.ANTI_ALIAS_FLAG); circlePaint.setStyle(Paint.Style.FILL); - setLayerType(LAYER_TYPE_SOFTWARE, circlePaint); + setLayerType(LAYER_TYPE_SOFTWARE, circlePaint); focusPaint = new Paint(Paint.ANTI_ALIAS_FLAG); focusPaint.setStyle(Paint.Style.STROKE); @@ -142,30 +143,30 @@ private void init(Context context, AttributeSet attrs) { final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CircleButton); color = a.getColor(R.styleable.CircleButton_cb_color, color); pressedRingWidth = (int) a.getDimension(R.styleable.CircleButton_cb_pressedRingWidth, pressedRingWidth); - shadowColor = a.getColor(R.styleable.CircleButton_cb_shadowColor, shadowColor); - shadowXOffset = (int) a.getDimension(R.styleable.CircleButton_cb_shadowXOffset, shadowXOffset); - shadowYOffset = (int) a.getDimension(R.styleable.CircleButton_cb_shadowYOffset, shadowYOffset); - a.recycle(); + shadowColor = a.getColor(R.styleable.CircleButton_cb_shadowColor, shadowColor); + shadowXOffset = (int) a.getDimension(R.styleable.CircleButton_cb_shadowXOffset, shadowXOffset); + shadowYOffset = (int) a.getDimension(R.styleable.CircleButton_cb_shadowYOffset, shadowYOffset); + a.recycle(); } setColor(color); - focusPaint.setStrokeWidth(pressedRingWidth); + focusPaint.setStrokeWidth(pressedRingWidth); final int pressedAnimationTime = getResources().getInteger(ANIMATION_TIME_ID); pressedAnimator = ObjectAnimator.ofFloat(this, "animationProgress", 0f, 0f); pressedAnimator.setDuration(pressedAnimationTime); - density = getResources().getDisplayMetrics().density; + density = getResources().getDisplayMetrics().density; } - private float getShadowRadius() { - if(isPressed()){ - return 0.0f; - } - return density * 2.0f; - } + private float getShadowRadius() { + if(isPressed()){ + return 0.0f; + } + return density * 2.0f; + } - private int getHighlightColor(int color, int amount) { + private int getHighlightColor(int color, int amount) { return Color.argb(Math.min(255, Color.alpha(color)), Math.min(255, Color.red(color) + amount), Math.min(255, Color.green(color) + amount), Math.min(255, Color.blue(color) + amount)); }