Skip to content

Commit 817af41

Browse files
committed
Finish initial version
1 parent 2f42a26 commit 817af41

13 files changed

+329
-62
lines changed

app/build.gradle

+1
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,5 @@ dependencies {
2323
compile fileTree(dir: 'libs', include: ['*.jar'])
2424
testCompile 'junit:junit:4.12'
2525
compile 'com.android.support:appcompat-v7:23.3.0'
26+
compile 'io.reactivex:rxandroid:1.1.0'
2627
}

app/src/main/java/com/github/yasic/particletextview/MainActivity.java

+53-16
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,11 @@
33
import android.support.v7.app.AppCompatActivity;
44
import android.os.Bundle;
55

6+
import com.github.yasic.particletextview.MovingStrategy.BidiverticalStrategy;
7+
import com.github.yasic.particletextview.MovingStrategy.BidizontalStrategy;
8+
import com.github.yasic.particletextview.MovingStrategy.CornerStrategy;
9+
import com.github.yasic.particletextview.MovingStrategy.HorizontalStrategy;
10+
import com.github.yasic.particletextview.MovingStrategy.VerticalStrategy;
611
import com.github.yasic.particletextview.Object.ParticleTextViewConfig;
712
import com.github.yasic.particletextview.View.ParticleTextView;
813

@@ -15,48 +20,80 @@ protected void onCreate(Bundle savedInstanceState) {
1520

1621
ParticleTextView particleTextView1 = (ParticleTextView) findViewById(R.id.particleTextView1);
1722
ParticleTextViewConfig config1 = new ParticleTextViewConfig.Builder()
18-
.setTargetText("YASIC")
19-
.setReleasing(0.1)
20-
.setParticleRadius(1.5f)
23+
.setTargetText("Loading")
24+
.setReleasing(0.4)
25+
.setParticleRadius(4)
2126
.setMiniDistance(1)
27+
.setTextSize(150)
28+
.setRowStep(9)
29+
.setColumnStep(9)
2230
.instance();
2331
particleTextView1.setConfig(config1);
24-
particleTextView1.startAnimation();
2532

2633
ParticleTextView particleTextView2 = (ParticleTextView) findViewById(R.id.particleTextView2);
34+
VerticalStrategy verticalStrategy = new VerticalStrategy();
2735
ParticleTextViewConfig config2 = new ParticleTextViewConfig.Builder()
2836
.setTargetText("ParticleTextView")
29-
.setReleasing(0.1)
30-
.setParticleRadius(2)
31-
.setTextSize(80)
32-
.setMiniDistance(0.8)
37+
.setReleasing(0.5)
38+
.setParticleRadius(3)
39+
.setTextSize(120)
40+
.setMiniDistance(0.5)
41+
.setColumnStep(5)
42+
.setRowStep(5)
43+
.setParticleColorArray(new String[]{"#333333", "#222222", "#111111"})
44+
.setMovingStrategy(verticalStrategy)
3345
.instance();
3446
particleTextView2.setConfig(config2);
35-
particleTextView2.startAnimation();
3647

3748
ParticleTextView particleTextView3 = (ParticleTextView) findViewById(R.id.particleTextView3);
49+
CornerStrategy cornerStrategy = new CornerStrategy();
3850
ParticleTextViewConfig config3 = new ParticleTextViewConfig.Builder()
39-
.setTargetText("十万嬉皮")
51+
.setTargetText("Java")
4052
.setReleasing(0.3)
41-
.setParticleRadius(2)
42-
.setTextSize(60)
53+
.setParticleRadius(4)
54+
.setTextSize(150)
55+
.setColumnStep(6)
56+
.setRowStep(6)
57+
.setMovingStrategy(cornerStrategy)
58+
.setParticleColorArray(new String[]{"#9933ff"})
4359
.instance();
4460
particleTextView3.setConfig(config3);
45-
particleTextView3.startAnimation();
4661

4762
ParticleTextView particleTextView4 = (ParticleTextView) findViewById(R.id.particleTextView4);
63+
BidiverticalStrategy movingStrategy4 = new BidiverticalStrategy();
4864
ParticleTextViewConfig config4 = new ParticleTextViewConfig.Builder()
4965
.setTargetText("Android")
5066
.setReleasing(0.1)
51-
.setParticleRadius(1)
52-
.setTextSize(120)
53-
.setMiniDistance(1)
67+
.setTextSize(150)
68+
.setMiniDistance(0.01)
5469
.setParticleRadius(4)
5570
.setColumnStep(6)
5671
.setRowStep(6)
72+
.setDelay((long) 500)
73+
.setParticleColorArray(new String[]{"#99ff33"})
74+
.setMovingStrategy(movingStrategy4)
5775
.instance();
5876
particleTextView4.setConfig(config4);
77+
78+
ParticleTextView particleTextView5 = (ParticleTextView) findViewById(R.id.particleTextView5);
79+
BidizontalStrategy movingStrategy5 = new BidizontalStrategy();
80+
ParticleTextViewConfig config5 = new ParticleTextViewConfig.Builder()
81+
.setTargetText("Canvas")
82+
.setReleasing(0.3)
83+
.setTextSize(150)
84+
.setMiniDistance(0.01)
85+
.setParticleRadius(4)
86+
.setColumnStep(8)
87+
.setRowStep(8)
88+
.setMovingStrategy(movingStrategy5)
89+
.instance();
90+
particleTextView5.setConfig(config5);
91+
92+
particleTextView1.startAnimation();
93+
particleTextView2.startAnimation();
94+
particleTextView3.startAnimation();
5995
particleTextView4.startAnimation();
96+
particleTextView5.startAnimation();
6097
}
6198

6299
@Override
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.github.yasic.particletextview.MovingStrategy;
2+
3+
import com.github.yasic.particletextview.Object.Particle;
4+
5+
public class BidiverticalStrategy extends MovingStrategy {
6+
@Override
7+
public void setMovingPath(Particle particle, int rangeWidth, int rangeHeight, double[] targetPosition) {
8+
Double[][] path = new Double[4][2];
9+
path[0][0] = rangeWidth * Math.random();
10+
path[0][1] = (Math.random() < 0.5) ? Double.valueOf(-particle.getRadius()) : Double.valueOf(rangeHeight + particle.getRadius());
11+
path[1][0] = targetPosition[0];
12+
path[1][1] = targetPosition[1];
13+
path[2][0] = rangeWidth * Math.random();
14+
path[2][1] = (Math.random() < 0.5) ? Double.valueOf(-particle.getRadius()) : Double.valueOf(rangeHeight + particle.getRadius());
15+
path[3][0] = targetPosition[0];
16+
path[3][1] = targetPosition[1];
17+
particle.setPath(path);
18+
}
19+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.github.yasic.particletextview.MovingStrategy;
2+
3+
import com.github.yasic.particletextview.Object.Particle;
4+
5+
public class BidizontalStrategy extends MovingStrategy {
6+
@Override
7+
public void setMovingPath(Particle particle, int rangeWidth, int rangeHeight, double[] targetPosition) {
8+
Double[][] path = new Double[4][2];
9+
path[0][0] = (Math.random() < 0.5)?Double.valueOf(-particle.getRadius()) : Double.valueOf(rangeWidth + particle.getRadius());
10+
path[0][1] = Math.random() * rangeHeight;
11+
path[1][0] = targetPosition[0];
12+
path[1][1] = targetPosition[1];
13+
path[2][0] = (Math.random() < 0.5)?Double.valueOf(-particle.getRadius()) : Double.valueOf(rangeWidth + particle.getRadius());
14+
path[2][1] = Math.random() * rangeHeight;
15+
path[3][0] = targetPosition[0];
16+
path[3][1] = targetPosition[1];
17+
particle.setPath(path);
18+
}
19+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.github.yasic.particletextview.MovingStrategy;
2+
3+
import com.github.yasic.particletextview.Object.Particle;
4+
5+
public class CornerStrategy extends MovingStrategy {
6+
7+
@Override
8+
public void setMovingPath(Particle particle, int rangeWidth, int rangeHeight, double[] targetPosition) {
9+
Double[][] path = new Double[4][2];
10+
path[0][0] = (double) ((Math.random() < 0.5) ? 0 : rangeWidth);
11+
if (path[0][0] == 0){
12+
path[0][0] -= Math.random() * rangeWidth/10;
13+
} else {
14+
path[0][0] += Math.random() * rangeWidth/10;
15+
}
16+
path[0][1] = (double) ((Math.random() < 0.5) ? 0 : rangeHeight);
17+
if (path[0][1] == 0){
18+
path[0][1] -= Math.random() * rangeHeight/10;
19+
} else {
20+
path[0][1] += Math.random() * rangeHeight/10;
21+
}
22+
path[1][0] = targetPosition[0];
23+
path[1][1] = targetPosition[1];
24+
path[2][0] = Double.valueOf(rangeWidth/2);
25+
path[2][1] = Double.valueOf(rangeHeight/2);
26+
path[3][0] = targetPosition[0];
27+
path[3][1] = targetPosition[1];
28+
particle.setPath(path);
29+
}
30+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.github.yasic.particletextview.MovingStrategy;
2+
3+
import com.github.yasic.particletextview.Object.Particle;
4+
5+
public class HorizontalStrategy extends MovingStrategy {
6+
@Override
7+
public void setMovingPath(Particle particle, int rangeWidth, int rangeHeight, double[] targetPosition) {
8+
Double[][] path = new Double[4][2];
9+
path[0][0] = Double.valueOf(-particle.getRadius());
10+
path[0][1] = Math.random() * rangeHeight;
11+
path[1][0] = targetPosition[0];
12+
path[1][1] = targetPosition[1];
13+
path[2][0] = Double.valueOf(rangeWidth + particle.getRadius());
14+
path[2][1] = Math.random() * rangeHeight;
15+
path[3][0] = targetPosition[0];
16+
path[3][1] = targetPosition[1];
17+
particle.setPath(path);
18+
}
19+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.github.yasic.particletextview.MovingStrategy;
2+
3+
import com.github.yasic.particletextview.Object.Particle;
4+
5+
public abstract class MovingStrategy {
6+
public abstract void setMovingPath(Particle particle, int rangeWidth, int rangeHeight, double[] targetPosition);
7+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.github.yasic.particletextview.MovingStrategy;
2+
3+
import com.github.yasic.particletextview.Object.Particle;
4+
5+
public class RandomMovingStrategy extends MovingStrategy{
6+
7+
@Override
8+
public void setMovingPath(Particle particle, int rangeWidth, int rangeHeight, double[] targetPosition) {
9+
Double[][] path = new Double[2][2];
10+
path[0][0] = Math.random() * rangeWidth;
11+
path[0][1] = Math.random() * rangeHeight;
12+
path[1][0] = targetPosition[0];
13+
path[1][1] = targetPosition[1];
14+
particle.setPath(path);
15+
}
16+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.github.yasic.particletextview.MovingStrategy;
2+
3+
import com.github.yasic.particletextview.Object.Particle;
4+
5+
public class VerticalStrategy extends MovingStrategy{
6+
@Override
7+
public void setMovingPath(Particle particle, int rangeWidth, int rangeHeight, double[] targetPosition) {
8+
Double[][] path = new Double[4][2];
9+
path[0][0] = rangeWidth * Math.random();
10+
path[0][1] = Double.valueOf(-particle.getRadius());
11+
path[1][0] = targetPosition[0];
12+
path[1][1] = targetPosition[1];
13+
path[2][0] = rangeWidth * Math.random();
14+
path[2][1] = Double.valueOf(rangeHeight + particle.getRadius());
15+
path[3][0] = targetPosition[0];
16+
path[3][1] = targetPosition[1];
17+
particle.setPath(path);
18+
}
19+
}

app/src/main/java/com/github/yasic/particletextview/Object/Particle.java

+42-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.github.yasic.particletextview.Object;
22

3+
import android.util.Log;
4+
35
public class Particle {
46
private float radius;
57
private String particleColor;
@@ -9,17 +11,20 @@ public class Particle {
911
private double targetY = 0;
1012
private double vx = 0;
1113
private double vy = 0;
14+
private Double[][] path = null;
15+
private int pathProcess = 0;
1216

1317
public Particle(float radius, String particleColor) {
1418
this.radius = radius;
1519
this.particleColor = particleColor;
1620
}
1721

18-
public void setPath(double sourceX, double sourceY, double targetX, double targetY){
19-
this.sourceX = sourceX;
20-
this.sourceY = sourceY;
21-
this.targetX = targetX;
22-
this.targetY = targetY;
22+
public void updatePath(){
23+
addPathProcess();
24+
setSourceX(path[pathProcess][0]);
25+
setSourceY(path[pathProcess][1]);
26+
setTargetX(path[(pathProcess + 1) % path.length][0]);
27+
setTargetY(path[(pathProcess + 1) % path.length][1]);
2328
}
2429

2530
public void setSourceX(double sourceX) {
@@ -30,6 +35,14 @@ public void setSourceY(double sourceY) {
3035
this.sourceY = sourceY;
3136
}
3237

38+
public void setTargetX(double targetX) {
39+
this.targetX = targetX;
40+
}
41+
42+
public void setTargetY(double targetY) {
43+
this.targetY = targetY;
44+
}
45+
3346
public void setVx(double vx) {
3447
this.vx = vx;
3548
}
@@ -38,6 +51,22 @@ public void setVy(double vy) {
3851
this.vy = vy;
3952
}
4053

54+
public void setParticleColor(String particleColor) {
55+
this.particleColor = particleColor;
56+
}
57+
58+
public void setPath(Double[][] path){
59+
this.path = path;
60+
this.setSourceX(path[0][0]);
61+
this.setSourceY(path[0][1]);
62+
this.setTargetX(path[1][0]);
63+
this.setTargetY(path[1][1]);
64+
}
65+
66+
private void addPathProcess() {
67+
this.pathProcess = (pathProcess + 1) % path.length;
68+
}
69+
4170
public float getRadius() {
4271
return radius;
4372
}
@@ -69,4 +98,12 @@ public double getVx() {
6998
public double getVy() {
7099
return vy;
71100
}
101+
102+
public Double[][] getPath() {
103+
return path;
104+
}
105+
106+
public int getPathProcess() {
107+
return pathProcess;
108+
}
72109
}

0 commit comments

Comments
 (0)