Skip to content

Commit a0f45d6

Browse files
committed
Rewrote library in Kotlin
1 parent 1a60f53 commit a0f45d6

6 files changed

Lines changed: 417 additions & 629 deletions

File tree

Lines changed: 94 additions & 135 deletions
Original file line numberDiff line numberDiff line change
@@ -1,177 +1,136 @@
1-
package com.github.nikartm.support;
2-
3-
import android.animation.Animator;
4-
import android.animation.AnimatorListenerAdapter;
5-
import android.animation.ValueAnimator;
6-
import android.graphics.Canvas;
7-
import android.graphics.ColorFilter;
8-
import android.graphics.LinearGradient;
9-
import android.graphics.Paint;
10-
import android.graphics.PixelFormat;
11-
import android.graphics.Rect;
12-
import android.graphics.RectF;
13-
import android.graphics.Shader;
14-
import android.graphics.drawable.Drawable;
15-
import androidx.annotation.NonNull;
16-
import androidx.annotation.Nullable;
1+
package com.github.nikartm.support
2+
3+
import android.animation.ValueAnimator
4+
import android.graphics.*
5+
import android.graphics.drawable.Drawable
6+
import androidx.core.animation.doOnRepeat
177

188
/**
199
* Animated striped drawable
2010
* @author Ivan V on 30.03.2018.
21-
* @version 1.0
11+
* @version 2.0
2212
*/
23-
public class AnimatedStripedDrawable extends Drawable {
24-
25-
private int viewHeight;
26-
private int viewWidth;
27-
private float tiltLeft = 0f;
28-
private float tiltRight = 0f;
29-
private boolean running = false;
30-
31-
private StripedDrawable drawable;
32-
private ValueAnimator animator;
33-
private Shader stripesShader;
34-
35-
public AnimatedStripedDrawable(StripedDrawable drawable) {
36-
this.drawable = drawable;
37-
}
38-
39-
@Override
40-
protected void onBoundsChange(Rect bounds) {
41-
super.onBoundsChange(bounds);
42-
viewHeight = bounds.height();
43-
viewWidth = bounds.width();
44-
adjustStripes();
13+
internal class AnimatedStripedDrawable(private val stripedDrawable: StripedDrawable) : Drawable() {
14+
15+
private var viewHeight = 0
16+
private var viewWidth = 0
17+
private var tiltLeft = 0f
18+
private var tiltRight = 0f
19+
private var animator: ValueAnimator? = null
20+
private var stripesShader: Shader? = null
21+
22+
override fun onBoundsChange(bounds: Rect) {
23+
super.onBoundsChange(bounds)
24+
with(bounds) {
25+
viewHeight = height()
26+
viewWidth = width()
27+
}
28+
adjustStripes()
4529
}
4630

47-
private void adjustStripes() {
48-
if (!drawable.isStripeRevert()) {
49-
tiltLeft = drawable.getTilt();
50-
tiltRight = 0;
51-
} else {
52-
tiltRight = drawable.getTilt();
53-
tiltLeft = 0;
54-
}
31+
private fun adjustStripes() = with(stripedDrawable) {
32+
tiltLeft = if (!isStripeRevert) tilt else 0f
33+
tiltRight = if (isStripeRevert) tilt else 0f
5534
}
5635

57-
private void initAnimator() {
36+
private fun initAnimator() = with(stripedDrawable) {
5837
if (animator == null) {
59-
animator = ValueAnimator.ofInt(0, 1);
60-
animator.setRepeatCount(ValueAnimator.INFINITE);
61-
animator.setDuration(drawable.getStripeDuration());
62-
animator.addListener(new AnimatorListenerAdapter() {
63-
@Override
64-
public void onAnimationRepeat(Animator animation) {
65-
shiftColor(drawable.getColorMain(), drawable.getColorSub());
66-
invalidateSelf();
38+
animator = ValueAnimator.ofInt(0, 1).apply {
39+
repeatCount = ValueAnimator.INFINITE
40+
duration = stripeDuration.toLong()
41+
doOnRepeat {
42+
shiftColor(colorMain, colorSub)
43+
invalidateSelf()
6744
}
68-
});
45+
}
6946
}
7047
}
7148

72-
@Override
73-
public int getIntrinsicWidth() {
74-
return viewWidth > 0 ? viewWidth : super.getIntrinsicWidth();
49+
override fun getIntrinsicWidth(): Int {
50+
return if (viewWidth > 0) viewWidth else super.getIntrinsicWidth()
7551
}
7652

77-
@Override
78-
public int getIntrinsicHeight() {
79-
return viewHeight > 0 ? viewHeight : super.getIntrinsicHeight();
53+
override fun getIntrinsicHeight(): Int {
54+
return if (viewHeight > 0) viewHeight else super.getIntrinsicHeight()
8055
}
8156

82-
@Override
83-
public void setAlpha(int alpha) {}
57+
override fun setAlpha(alpha: Int) {}
8458

85-
@Override
86-
public void setColorFilter(@Nullable ColorFilter colorFilter) {}
59+
override fun setColorFilter(colorFilter: ColorFilter?) {}
8760

88-
@Override
89-
public int getOpacity() {
90-
return PixelFormat.TRANSLUCENT;
91-
}
61+
override fun getOpacity(): Int = PixelFormat.TRANSLUCENT
9262

93-
@Override
94-
public void draw(@NonNull Canvas canvas) {
95-
drawStripes(canvas);
96-
startStripesAnimation();
63+
override fun draw(canvas: Canvas) {
64+
drawStripes(canvas)
65+
startStripesAnimation()
9766
}
9867

99-
private void startStripesAnimation() {
100-
if (running) {
101-
start();
102-
} else {
103-
drawable.setShowStripes(false);
104-
}
68+
private fun startStripesAnimation() {
69+
if (isRunning()) start() else stop()
10570
}
10671

107-
private void drawStripes(Canvas canvas) {
108-
final Paint paintBack = new Paint(Paint.ANTI_ALIAS_FLAG);
109-
final Paint paintStripes = new Paint(Paint.ANTI_ALIAS_FLAG);
110-
final Rect rect = new Rect(0, 0, viewWidth, viewHeight);
111-
final RectF rectF = new RectF(rect);
112-
final int stripesAlpha = Util.computeAlpha(drawable.getStripeAlpha());
113-
114-
if (drawable.isStripeGradient()) {
115-
stripesShader = createGradientShader();
116-
} else {
117-
stripesShader = createShader();
118-
}
119-
120-
paintBack.setColor(drawable.getColorBack());
121-
float cornerRadius = drawable.getCornerRadius();
122-
canvas.drawRoundRect(rectF, cornerRadius, cornerRadius, paintBack);
123-
124-
if (drawable.isShowStripes()) {
125-
paintStripes.setAlpha(stripesAlpha);
126-
paintStripes.setShader(stripesShader);
127-
canvas.drawRoundRect(rectF, cornerRadius, cornerRadius, paintStripes);
72+
private fun drawStripes(canvas: Canvas) = with(stripedDrawable) {
73+
val paintBack = Paint(Paint.ANTI_ALIAS_FLAG)
74+
val paintStripes = Paint(Paint.ANTI_ALIAS_FLAG)
75+
val rect = Rect(0, 0, viewWidth, viewHeight)
76+
val rectF = RectF(rect)
77+
val stripesAlpha = Util.computeAlpha(stripeAlpha)
78+
stripesShader = if (isStripeGradient) createGradientShader() else createShader()
79+
paintBack.color = colorBack
80+
val cornerRadius = cornerRadius
81+
canvas.drawRoundRect(rectF, cornerRadius, cornerRadius, paintBack)
82+
if (isShowStripes) {
83+
paintStripes.alpha = stripesAlpha
84+
paintStripes.shader = stripesShader
85+
canvas.drawRoundRect(rectF, cornerRadius, cornerRadius, paintStripes)
12886
}
12987
}
13088

131-
@NonNull
132-
private LinearGradient createShader() {
133-
return new LinearGradient(drawable.getStripeWidth(), tiltLeft, 0, tiltRight,
134-
new int[] { drawable.getColorMain(), drawable.getColorSub() }, new float[] { .5f, .5f },
135-
Shader.TileMode.REPEAT);
89+
private fun createShader(): LinearGradient = with(stripedDrawable) {
90+
val position = .5f
91+
return LinearGradient(
92+
stripeWidth,
93+
tiltLeft,
94+
0f,
95+
tiltRight,
96+
intArrayOf(colorMain, colorSub),
97+
floatArrayOf(position, position),
98+
Shader.TileMode.REPEAT
99+
)
136100
}
137101

138-
@NonNull
139-
private LinearGradient createGradientShader() {
140-
return new LinearGradient(drawable.getStripeWidth(), tiltLeft, 0, tiltRight,
141-
drawable.getColorMain(), drawable.getColorSub(), Shader.TileMode.REPEAT);
102+
private fun createGradientShader(): LinearGradient = with(stripedDrawable) {
103+
return LinearGradient(
104+
stripeWidth, tiltLeft, 0f, tiltRight,
105+
colorMain, colorSub, Shader.TileMode.REPEAT
106+
)
142107
}
143108

144-
private void shiftColor(int mainColor, int subColor) {
145-
drawable.setColorMain(subColor);
146-
drawable.setColorSub(mainColor);
109+
private fun shiftColor(mainColor: Int, subColor: Int) = with(stripedDrawable) {
110+
colorMain = subColor
111+
colorSub = mainColor
147112
}
148113

149114
// Start stripes animation
150-
protected void start() {
151-
if (isRunning()) {
152-
return;
153-
}
154-
running = true;
155-
initAnimator();
156-
animator.start();
157-
drawable.setShowStripes(true);
158-
invalidateSelf();
115+
fun start() {
116+
if (isRunning()) return
117+
initAnimator()
118+
animator?.start()
119+
stripedDrawable.isShowStripes = true
120+
invalidateSelf()
159121
}
160122

161123
// Stop stripes animation
162-
protected void stop() {
163-
if (!isRunning()) {
164-
return;
165-
}
166-
running = false;
167-
animator.cancel();
168-
drawable.setShowStripes(false);
169-
invalidateSelf();
124+
fun stop() {
125+
if (!isRunning()) return
126+
animator?.cancel()
127+
animator = null
128+
stripedDrawable.isShowStripes = false
129+
invalidateSelf()
170130
}
171131

172132
// Check if stripes animation running
173-
protected boolean isRunning() {
174-
return animator != null && animator.isStarted();
133+
fun isRunning(): Boolean {
134+
return animator?.isStarted == true
175135
}
176-
177-
}
136+
}

0 commit comments

Comments
 (0)