From 87e349d02a949e722878a0f93542611314693f65 Mon Sep 17 00:00:00 2001 From: wesaphzt Date: Sat, 7 Sep 2019 16:00:32 +0100 Subject: [PATCH] animation scaling issues fixed --- .../wesaphzt/privatelock/MainActivity.java | 25 +++++++++++++++++-- .../privatelock/animation/Circle.java | 17 +++++++++---- app/src/main/res/layout/content_main.xml | 18 +++++++------ 3 files changed, 45 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/com/wesaphzt/privatelock/MainActivity.java b/app/src/main/java/com/wesaphzt/privatelock/MainActivity.java index a6e5b97..16d88b8 100644 --- a/app/src/main/java/com/wesaphzt/privatelock/MainActivity.java +++ b/app/src/main/java/com/wesaphzt/privatelock/MainActivity.java @@ -22,10 +22,11 @@ import androidx.fragment.app.FragmentTransaction; import android.os.CountDownTimer; import android.preference.PreferenceManager; -import android.util.Log; import android.view.View; import android.view.Menu; import android.view.MenuItem; +import android.view.ViewTreeObserver; +import android.widget.RelativeLayout; import android.widget.SeekBar; import android.widget.TextView; import android.widget.Toast; @@ -126,10 +127,30 @@ public class MainActivity extends AppCompatActivity { } }); - //https://stackoverflow.com/questions/29381474/how-to-draw-a-circle-with-animation-in-android-with-circle-size-based-on-a-value circle = findViewById(R.id.circle); circle_bg = findViewById(R.id.circle_bg); + final RelativeLayout relativeLayout = findViewById(R.id.content_main); + final RelativeLayout rlCircle = findViewById(R.id.rlCircle); + + //scale height/width of animation + relativeLayout.getViewTreeObserver().addOnGlobalLayoutListener( + new ViewTreeObserver.OnGlobalLayoutListener() { + + @Override + public void onGlobalLayout() { + //only want to do this once + relativeLayout.getViewTreeObserver().removeGlobalOnLayoutListener(this); + + circle.setRect((circle.getHeight() / 2), (circle.getHeight()) / 2); + circle_bg.setRect((circle_bg.getHeight() / 2), (circle_bg.getHeight()) / 2); + + circle.setX((rlCircle.getWidth() - circle.getRect()) / 2); + circle_bg.setX((rlCircle.getWidth() - circle.getRect()) / 2); + } + }); + + circle.setColor(circleDefaultR, circleDefaultG, circleDefaultB); //set background circle CircleAngleAnimation animation = new CircleAngleAnimation(circle_bg, 360); diff --git a/app/src/main/java/com/wesaphzt/privatelock/animation/Circle.java b/app/src/main/java/com/wesaphzt/privatelock/animation/Circle.java index fc914ef..229d5ce 100644 --- a/app/src/main/java/com/wesaphzt/privatelock/animation/Circle.java +++ b/app/src/main/java/com/wesaphzt/privatelock/animation/Circle.java @@ -13,15 +13,14 @@ public class Circle extends View { private static final int START_ANGLE_POINT = 90; private final Paint paint; - private final RectF rect; + private RectF rect; private float angle; + private final int strokeWidth = 10; public Circle(Context context, AttributeSet attrs) { super(context, attrs); - final int strokeWidth = 10; - paint = new Paint(); paint.setAntiAlias(true); paint.setStyle(Paint.Style.FILL); @@ -29,8 +28,8 @@ public class Circle extends View { //circle color (currently set upon instance) //paint.setColor(Color.BLUE); - //size - rect = new RectF(strokeWidth, strokeWidth, 600 + strokeWidth, 600 + strokeWidth); + //size (currently set upon instance) + //rect = new RectF(strokeWidth, strokeWidth, 230 + strokeWidth, 230 + strokeWidth); //initial angle (optional) angle = 0; @@ -53,4 +52,12 @@ public class Circle extends View { public void setAngle(float angle) { this.angle = angle; } + + public void setRect(int right, int bottom) { + this.rect = new RectF(strokeWidth, strokeWidth, right, bottom); + } + + public float getRect() { + return rect.right; + } } \ No newline at end of file diff --git a/app/src/main/res/layout/content_main.xml b/app/src/main/res/layout/content_main.xml index 87ea85d..5718324 100644 --- a/app/src/main/res/layout/content_main.xml +++ b/app/src/main/res/layout/content_main.xml @@ -142,22 +142,24 @@ + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_centerHorizontal="true" + android:gravity="center_horizontal" />