Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,16 @@
import android.graphics.Canvas;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.Shader;
import android.view.animation.LinearInterpolator;

import androidx.core.text.TextUtilsCompat;
import androidx.core.view.GravityCompat;

import java.util.Locale;

/*
* Copyright 2016 Elye Project
*
Expand Down Expand Up @@ -36,6 +42,7 @@ class LoaderController implements ValueAnimator.AnimatorUpdateListener {
private float heightWeight = LoaderConstant.MAX_WEIGHT;
private boolean useGradient = LoaderConstant.USE_GRADIENT_DEFAULT;
private int corners = LoaderConstant.CORNER_DEFAULT;
private RectF loaderContainer;

private final static int MAX_COLOR_CONSTANT_VALUE = 255;
private final static int ANIMATION_CYCLE_DURATION = 750; //milis
Expand All @@ -56,21 +63,17 @@ public void onDraw(Canvas canvas) {
}

public void onDraw(Canvas canvas, float left_pad, float top_pad, float right_pad, float bottom_pad) {
float margin_height = canvas.getHeight() * (1 - heightWeight) / 2;
rectPaint.setAlpha((int) (progress * MAX_COLOR_CONSTANT_VALUE));
if (useGradient) {
prepareGradient(canvas.getWidth() * widthWeight);
}
canvas.drawRoundRect(new RectF(0 + left_pad,
margin_height + top_pad,
canvas.getWidth() * widthWeight - right_pad,
canvas.getHeight() - margin_height - bottom_pad),
corners, corners,
rectPaint);
prepareLoaderContainer(canvas, left_pad, top_pad, right_pad, bottom_pad);
canvas.drawRoundRect(loaderContainer, corners, corners, rectPaint);
}

public void onSizeChanged() {
linearGradient = null;
loaderContainer = null;
startLoading();
}

Expand All @@ -82,6 +85,23 @@ private void prepareGradient(float width) {
rectPaint.setShader(linearGradient);
}

private void prepareLoaderContainer(Canvas canvas, float left_pad, float top_pad, float right_pad, float bottom_pad) {
if (loaderContainer != null) {
return;
}
final Rect outRect = new Rect();
GravityCompat.apply(loaderView.getLoaderGravity(),
Math.round(canvas.getWidth() * widthWeight),
Math.round(canvas.getHeight() * heightWeight),
new Rect(Math.round(left_pad),
Math.round(top_pad),
Math.round(canvas.getWidth() - right_pad),
Math.round(canvas.getHeight() - bottom_pad)),
outRect,
TextUtilsCompat.getLayoutDirectionFromLocale(Locale.getDefault()));
loaderContainer = new RectF(outRect.left, outRect.top, outRect.right, outRect.bottom);
}

public void startLoading() {
if (valueAnimator != null && !loaderView.valueSet()) {
valueAnimator.cancel();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import android.graphics.drawable.Drawable;
import android.graphics.drawable.Icon;
import android.util.AttributeSet;
import android.view.Gravity;
import androidx.appcompat.widget.AppCompatImageView;
import androidx.core.content.ContextCompat;

Expand Down Expand Up @@ -85,6 +86,11 @@ public boolean valueSet() {
return (getDrawable() != null);
}

@Override
public int getLoaderGravity() {
return Gravity.NO_GRAVITY;
}

@Override
public void setImageBitmap(Bitmap bm) {
super.setImageBitmap(bm);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,10 @@
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Typeface;
import android.os.Build;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.Gravity;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.core.content.ContextCompat;

Expand All @@ -31,6 +33,7 @@ public class LoaderTextView extends AppCompatTextView implements LoaderView {
private LoaderController loaderController;
private int defaultColorResource;
private int darkerColorResource;
private int loaderGravity;

public LoaderTextView(Context context) {
super(context);
Expand All @@ -57,6 +60,23 @@ private void init(AttributeSet attrs) {
defaultColorResource = typedArray.getColor(R.styleable.loader_view_custom_color, ContextCompat.getColor(getContext(), R.color.default_color));
darkerColorResource = typedArray.getColor(R.styleable.loader_view_custom_color, ContextCompat.getColor(getContext(), R.color.darker_color));
typedArray.recycle();
loaderGravity = getGravity();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { // prefer text alignment when available.
final int verticalGravity = loaderGravity & Gravity.VERTICAL_GRAVITY_MASK;
switch (getTextAlignment()) {
case android.view.View.TEXT_ALIGNMENT_CENTER:
loaderGravity = verticalGravity | Gravity.CENTER_HORIZONTAL;
break;
case android.view.View.TEXT_ALIGNMENT_TEXT_END:
case android.view.View.TEXT_ALIGNMENT_VIEW_END:
loaderGravity = verticalGravity | Gravity.END;
break;
case android.view.View.TEXT_ALIGNMENT_TEXT_START:
case android.view.View.TEXT_ALIGNMENT_VIEW_START:
loaderGravity = verticalGravity | Gravity.START;
break;
}
}
}

@Override
Expand Down Expand Up @@ -104,6 +124,11 @@ public boolean valueSet() {
return !TextUtils.isEmpty(getText());
}

@Override
public int getLoaderGravity() {
return loaderGravity;
}

@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,6 @@ interface LoaderView {
void invalidate();

boolean valueSet();

int getLoaderGravity();
}