animation scaling issues fixed

This commit is contained in:
wesaphzt 2019-09-07 16:00:32 +01:00
parent cd8226cddc
commit 87e349d02a
3 changed files with 45 additions and 15 deletions

View file

@ -22,10 +22,11 @@ import androidx.fragment.app.FragmentTransaction;
import android.os.CountDownTimer; import android.os.CountDownTimer;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
import android.util.Log;
import android.view.View; import android.view.View;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.ViewTreeObserver;
import android.widget.RelativeLayout;
import android.widget.SeekBar; import android.widget.SeekBar;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast; 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 = findViewById(R.id.circle);
circle_bg = findViewById(R.id.circle_bg); 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); circle.setColor(circleDefaultR, circleDefaultG, circleDefaultB);
//set background circle //set background circle
CircleAngleAnimation animation = new CircleAngleAnimation(circle_bg, 360); CircleAngleAnimation animation = new CircleAngleAnimation(circle_bg, 360);

View file

@ -13,15 +13,14 @@ public class Circle extends View {
private static final int START_ANGLE_POINT = 90; private static final int START_ANGLE_POINT = 90;
private final Paint paint; private final Paint paint;
private final RectF rect; private RectF rect;
private float angle; private float angle;
private final int strokeWidth = 10;
public Circle(Context context, AttributeSet attrs) { public Circle(Context context, AttributeSet attrs) {
super(context, attrs); super(context, attrs);
final int strokeWidth = 10;
paint = new Paint(); paint = new Paint();
paint.setAntiAlias(true); paint.setAntiAlias(true);
paint.setStyle(Paint.Style.FILL); paint.setStyle(Paint.Style.FILL);
@ -29,8 +28,8 @@ public class Circle extends View {
//circle color (currently set upon instance) //circle color (currently set upon instance)
//paint.setColor(Color.BLUE); //paint.setColor(Color.BLUE);
//size //size (currently set upon instance)
rect = new RectF(strokeWidth, strokeWidth, 600 + strokeWidth, 600 + strokeWidth); //rect = new RectF(strokeWidth, strokeWidth, 230 + strokeWidth, 230 + strokeWidth);
//initial angle (optional) //initial angle (optional)
angle = 0; angle = 0;
@ -53,4 +52,12 @@ public class Circle extends View {
public void setAngle(float angle) { public void setAngle(float angle) {
this.angle = 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;
}
} }

View file

@ -142,22 +142,24 @@
</androidx.cardview.widget.CardView> </androidx.cardview.widget.CardView>
<RelativeLayout <RelativeLayout
android:layout_width="match_parent" android:id="@+id/rlCircle"
android:layout_height="match_parent" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/activity_margin_large" android:layout_marginTop="@dimen/activity_margin_large"
android:layout_gravity="center_horizontal"> android:layout_gravity="center_horizontal">
<com.wesaphzt.privatelock.animation.Circle <com.wesaphzt.privatelock.animation.Circle
android:id="@+id/circle_bg" android:id="@+id/circle_bg"
android:layout_width="240dp" android:layout_width="wrap_content"
android:layout_height="240dp" android:layout_height="wrap_content"
android:layout_centerHorizontal="true" /> android:layout_centerHorizontal="true"
android:gravity="center_horizontal" />
<com.wesaphzt.privatelock.animation.Circle <com.wesaphzt.privatelock.animation.Circle
android:id="@+id/circle" android:id="@+id/circle"
android:layout_width="240dp" android:layout_width="wrap_content"
android:layout_height="240dp" android:layout_height="wrap_content"
android:layout_centerHorizontal="true" android:layout_centerInParent="true"
android:gravity="center_horizontal" /> android:gravity="center_horizontal" />
</RelativeLayout> </RelativeLayout>