X-Git-Url: https://git.ktnx.net/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Fui%2FHueRing.java;h=71df5bb98f75a98012761b74f8ceed13dea237d9;hb=f973784f579d42988174acf0b24593aa23180fa6;hp=ac3ef612e315bb611eefd0951b10b49928f3e222;hpb=bd5da50ef980c0c9657ec1e9c3e681ab5092f438;p=mobile-ledger.git diff --git a/app/src/main/java/net/ktnx/mobileledger/ui/HueRing.java b/app/src/main/java/net/ktnx/mobileledger/ui/HueRing.java index ac3ef612..71df5bb9 100644 --- a/app/src/main/java/net/ktnx/mobileledger/ui/HueRing.java +++ b/app/src/main/java/net/ktnx/mobileledger/ui/HueRing.java @@ -1,5 +1,5 @@ /* - * Copyright © 2019 Damyan Ivanov. + * Copyright © 2020 Damyan Ivanov. * This file is part of MoLe. * MoLe is free software: you can distribute it and/or modify it * under the term of the GNU General Public License as published by @@ -28,29 +28,28 @@ import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; +import androidx.annotation.Nullable; + import net.ktnx.mobileledger.utils.Colors; import net.ktnx.mobileledger.utils.DimensionUtils; -import androidx.annotation.Nullable; +import java.util.Locale; import static net.ktnx.mobileledger.utils.Logger.debug; public class HueRing extends View { - private static final int hueStepDegrees = 15; + public static final int hueStepDegrees = 5; private Paint ringPaint, initialPaint, currentPaint, markerPaint; - private int centerX, centerY; - private int diameter; + private int center; private int padding; private int initialHueDegrees; private int color, hueDegrees; private float outerR; private float innerR; private float bandWidth; - private float ringR; - private float innerDiameter; private float centerR; - private RectF centerRect; - private RectF ringRect; + private final RectF centerRect = new RectF(); + private final RectF ringRect = new RectF(); private int markerOverflow; private int markerStrokeWidth; public HueRing(Context context, @Nullable AttributeSet attrs) { @@ -114,13 +113,16 @@ public class HueRing extends View { return hueDegrees; } public void setHue(int hueDegrees) { - if (hueDegrees == -1) hueDegrees = Colors.DEFAULT_HUE_DEG; + if (hueDegrees == -1) + hueDegrees = Colors.DEFAULT_HUE_DEG; if (hueDegrees != Colors.DEFAULT_HUE_DEG) { // round to 15 degrees int rem = hueDegrees % hueStepDegrees; - if (rem < (hueStepDegrees / 2)) hueDegrees -= rem; - else hueDegrees += hueStepDegrees - rem; + if (rem < (hueStepDegrees / 2)) + hueDegrees -= rem; + else + hueDegrees += hueStepDegrees - rem; } this.hueDegrees = hueDegrees; @@ -161,8 +163,8 @@ public class HueRing extends View { // p.arcTo(-innerEdge, -innerEdge, innerEdge, innerEdge, -hueStepDegrees / 2f, // hueStepDegrees, true); // p.lineTo(outerEdge * cr, outerEdge * sr); - p.arcTo(-outerEdge, -outerEdge, outerEdge, outerEdge, hueStepDegrees / 2f, - -hueStepDegrees, false); + p.arcTo(-outerEdge, -outerEdge, outerEdge, outerEdge, hueStepDegrees / 2f, -hueStepDegrees, + false); // p.close(); canvas.save(); canvas.translate(center, center); @@ -177,6 +179,7 @@ public class HueRing extends View { int heightMode = View.MeasureSpec.getMode(heightMeasureSpec); int heightSize = View.MeasureSpec.getSize(heightMeasureSpec); + int diameter; if ((widthMode == MeasureSpec.AT_MOST) && (heightMode == MeasureSpec.AT_MOST)) { diameter = Math.min(widthSize, heightSize); } @@ -191,26 +194,29 @@ public class HueRing extends View { // getContext().getResources().getDimension(R.dimen.activity_horizontal_margin)) / 2; diameter -= 2 * padding; outerR = diameter / 2f; - centerX = padding + (int) outerR; - centerY = centerX; + center = padding + (int) outerR; bandWidth = diameter / 3.5f; - ringR = outerR - bandWidth / 2f; + float ringR = outerR - bandWidth / 2f; innerR = outerR - bandWidth; - ringRect = new RectF(-ringR, -ringR, ringR, ringR); + ringRect.set(-ringR, -ringR, ringR, ringR); - innerDiameter = diameter - 2 * bandWidth; + float innerDiameter = diameter - 2 * bandWidth; centerR = innerDiameter * 0.5f; - centerRect = new RectF(-centerR, -centerR, centerR, centerR); + centerRect.set(-centerR, -centerR, centerR, centerR); + } + @Override + public boolean performClick() { + return super.performClick(); } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: case MotionEvent.ACTION_MOVE: - float x = event.getX() - centerX; - float y = event.getY() - centerY; + float x = event.getX() - center; + float y = event.getY() - center; float dist = (float) Math.hypot(x, y); @@ -224,18 +230,22 @@ public class HueRing extends View { float angleRad = (float) Math.atan2(y, x); // angleRad is [-𝜋; +𝜋] float hue = (float) (angleRad / (2 * Math.PI)); - if (hue < 0) hue += 1; - debug("TMP", - String.format("x=%1.3f, y=%1.3f, angle=%1.3frad, hueDegrees=%1.3f", x, y, - angleRad, hue)); + if (hue < 0) + hue += 1; + debug("TMP", String.format(Locale.US, + "x=%1.3f, y=%1.3f, angle=%1.3f rad, hueDegrees=%1.3f", x, y, angleRad, + hue)); setHue(hue); break; + case MotionEvent.ACTION_UP: + performClick(); + break; } - return true; } public void setInitialHue(int initialHue) { - if (initialHue == -1) initialHue = Colors.DEFAULT_HUE_DEG; + if (initialHue == -1) + initialHue = Colors.DEFAULT_HUE_DEG; this.initialHueDegrees = initialHue; this.initialPaint.setColor(Colors.getPrimaryColorForHue(initialHue)); invalidate();