Skip to content

Commit 53dbada

Browse files
committed
performance optimizations
add new resource attrs
1 parent a2babcf commit 53dbada

File tree

3 files changed

+32
-17
lines changed

3 files changed

+32
-17
lines changed

particle/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ android {
77
defaultConfig {
88
minSdkVersion 22
99
targetSdkVersion 28
10-
versionCode 1
11-
versionName "1.0"
10+
versionCode 2
11+
versionName "1.1"
1212

1313
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
1414

particle/src/main/java/me/ibrahimsn/particle/ParticleView.kt

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,32 +9,45 @@ import android.util.AttributeSet
99
import android.view.View
1010
import android.view.ViewTreeObserver
1111
import kotlin.random.Random
12-
import android.support.v4.content.ContextCompat
13-
1412

1513
class ParticleView : View {
1614

15+
private lateinit var particles: Array<Particle>
16+
1717
private var count = 20
1818
private var background = Color.RED
19-
20-
private var paint: Paint = Paint()
21-
private lateinit var particles: Array<Particle>
19+
private var minRadius = 5
20+
private var maxRadius = 10
21+
22+
private val paint: Paint = Paint().apply {
23+
isAntiAlias = true
24+
style = Paint.Style.FILL_AND_STROKE
25+
color = Color.WHITE
26+
strokeWidth = 2F
27+
}
2228

2329
constructor(context: Context) : super(context)
2430
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {
2531
val a = context.obtainStyledAttributes(attrs, R.styleable.ParticleView, 0, 0)
26-
count = a.getInt(R.styleable.ParticleView_particleCount, 15)
27-
background = a.getColor(R.styleable.ParticleView_backgroundColor, ContextCompat.getColor(context, android.R.color.holo_red_light))
28-
a.recycle()
2932

33+
count = a.getInt(R.styleable.ParticleView_particleCount, count)
34+
minRadius = a.getInt(R.styleable.ParticleView_minParticleRadius, minRadius)
35+
maxRadius = a.getInt(R.styleable.ParticleView_maxParticleRadius, maxRadius)
36+
background = a.getColor(R.styleable.ParticleView_backgroundColor, background)
37+
38+
if (count > 50)
39+
count = 50
40+
41+
if (minRadius <= 0)
42+
minRadius = 1
43+
44+
if (maxRadius <= minRadius)
45+
maxRadius = minRadius + 1
46+
47+
a.recycle()
3048
}
3149

3250
init {
33-
paint.isAntiAlias = true
34-
paint.style = Paint.Style.FILL_AND_STROKE
35-
paint.color = Color.WHITE
36-
paint.strokeWidth = 2F
37-
3851
viewTreeObserver.addOnPreDrawListener(object: ViewTreeObserver.OnPreDrawListener {
3952
override fun onPreDraw(): Boolean {
4053
if (viewTreeObserver.isAlive)
@@ -44,7 +57,7 @@ class ParticleView : View {
4457

4558
for (i in 0 until count)
4659
array[i] = Particle(
47-
Random.nextInt(5, 10).toFloat(),
60+
Random.nextInt(minRadius, maxRadius).toFloat(),
4861
Random.nextInt(0, width).toFloat(),
4962
Random.nextInt(0, height).toFloat(),
5063
Random.nextInt(-2, 2),
@@ -83,7 +96,7 @@ class ParticleView : View {
8396
canvas.drawCircle(particles[i].x, particles[i].y, particles[i].radius, paint)
8497
}
8598

86-
postInvalidateDelayed(5)
99+
postInvalidateDelayed(20)
87100
invalidate()
88101
}
89102

particle/src/main/res/values/attrs.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,7 @@
33
<declare-styleable name="ParticleView">
44
<attr name="backgroundColor" format="color" />
55
<attr name="particleCount" format="integer" />
6+
<attr name="minParticleRadius" format="integer" />
7+
<attr name="maxParticleRadius" format="integer" />
68
</declare-styleable>
79
</resources>

0 commit comments

Comments
 (0)