@@ -9,32 +9,45 @@ import android.util.AttributeSet
99import android.view.View
1010import android.view.ViewTreeObserver
1111import kotlin.random.Random
12- import android.support.v4.content.ContextCompat
13-
1412
1513class 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
0 commit comments