Android Effects--rain of particle effects
Last Update:2015-09-02
Source: Internet
Author: User
<span id="Label3"></p><p><p>1. Behavior of individual Raindrops</p></p><p><p>2. Improve the behavior of raindrops and tectonic rain scenes</p></p><p><p>3. Define properties in XML that can control rain</p></p><p><p>------------------------------------------------------</p></p><p><p>1. Behavior of a single Raindrop: a line segment in motion</p></p><p><p>Starting point: startX, starty;</p></p><p><p>Termination point: stopx, stopy;</p></p><p><p></p></p><p><p>Frame Class for Custom view</p></p><pre><span style="color: #0000ff;"><span style="color: #0000ff;"></span> public</span> <span style="color: #0000ff;"><span style="color: #0000ff;">Abstract</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">class</span></span>Baseview<span style="color: #0000ff;"><span style="color: #0000ff;">extends</span></span><span style="color: #000000;"><span style="color: #000000;">View {thread thread; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> public</span><span style="color: #000000;"><span style="color: #000000;">baseview (context context, attributeset attrs) {</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Super</span></span><span style="color: #000000;"><span style="color: #000000;">(context, attrs); } </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> public</span><span style="color: #000000;"><span style="color: #000000;">Baseview (context Context) {</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Super</span></span><span style="color: #000000;"><span style="color: #000000;">(context); } @Override</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Final</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">protected</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span><span style="color: #000000;"><span style="color: #000000;">OnDraw (canvas Canvas) {</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">prohibit subclass overrides, use final</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(thread = =<span style="color: #0000ff;"><span style="color: #0000ff;">NULL</span></span><span style="color: #000000;"><span style="color: #000000;">) {thread</span></span>=<span style="color: #0000ff;"><span style="color: #0000ff;">New</span></span><span style="color: #000000;"><span style="color: #000000;">MyThread (); Thread.Start (); } </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Else</span></span><span style="color: #000000;"><span style="color: #000000;">{drawsub (canvas); } } </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">protected</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Abstract</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span><span style="color: #000000;"><span style="color: #000000;">Logic (); </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">protected</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Abstract</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span><span style="color: #000000;"><span style="color: #000000;">drawsub (canvas canvas); @Override</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Final</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">protected</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span><span style="color: #000000;"><span style="color: #000000;">Ondetachedfromwindow () {</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">end when leaving the screen</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">Ondetachedfromwindow is called after destroying the resource (both destroying the View)</span></span>running =<span style="color: #0000ff;"><span style="color: #0000ff;">false</span></span><span style="color: #000000;"><span style="color: #000000;">; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Super</span></span><span style="color: #000000;"><span style="color: #000000;">. Ondetachedfromwindow (); } </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Private</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Boolean</span></span>running =<span style="color: #0000ff;"><span style="color: #0000ff;">true</span></span><span style="color: #000000;"><span style="color: #000000;">; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">class</span></span>MyThread<span style="color: #0000ff;"><span style="color: #0000ff;">extends</span></span><span style="color: #000000;"><span style="color: #000000;">Thread {@Override</span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> public</span> <span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span><span style="color: #000000;"><span style="color: #000000;">Run () {</span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> while</span><span style="color: #000000;"><span style="color: #000000;">(running) {logic (); Postinvalidate (); </span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;">the <span style="color: #008000;">thread updates the drawing and calls the OnDraw method again</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Try</span></span><span style="color: #000000;"><span style="color: #000000;">{thread.sleep (</span></span>50);<span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">It's too fast for the naked eye to see, to Sleep.</span></span>}<span style="color: #0000ff;"><span style="color: #0000ff;">Catch</span></span><span style="color: #000000;"><span style="color: #000000;">(interruptedexception E) {</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">TODO auto-generated Catch block</span></span><span style="color: #000000;"><span style="color: #000000;">E.printstacktrace (); } } } }}</span></span></pre><p><p>customizing individual Raindrop Rainview</p></p><pre><span style="color: #0000ff;"><span style="color: #0000ff;"></span> public</span> <span style="color: #0000ff;"><span style="color: #0000ff;">class</span></span>Rainview<span style="color: #0000ff;"><span style="color: #0000ff;">extends</span></span><span style="color: #000000;"><span style="color: #000000;">Baseview {</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Private</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">float</span></span>StartX = 0<span style="color: #000000;"><span style="color: #000000;">; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Private</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">float</span></span>Starty = 0;<span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">Start</span> point</span> <span style="color: #0000ff;"><span style="color: #0000ff;">Private</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">float</span></span>STOPX = 0<span style="color: #000000;"><span style="color: #000000;">; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Private</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">float</span></span>Stopy = 0;<span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">Stop</span> point</span> <span style="color: #0000ff;"><span style="color: #0000ff;">Private</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">float</span></span>Sizex = 0<span style="color: #000000;"><span style="color: #000000;">; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Private</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">float</span></span>Sizey = 0<span style="color: #000000;"><span style="color: #000000;">; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Private</span></span><span style="color: #000000;"><span style="color: #000000;">Paint paint; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> public</span><span style="color: #000000;"><span style="color: #000000;">Rainview (context Context) {</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Super</span></span><span style="color: #000000;"><span style="color: #000000;">(context); </span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">TODO auto-generated Constructor stub</span></span><span style="color: #000000;"><span style="color: #000000;"> } </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> public</span><span style="color: #000000;"><span style="color: #000000;">rainview (context context, attributeset attrs) {</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Super</span></span><span style="color: #000000;"><span style="color: #000000;">(context, attrs); Sizex</span></span>= 10<span style="color: #000000;"><span style="color: #000000;">; Sizey</span></span>= 30<span style="color: #000000;"><span style="color: #000000;">; </span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">the shape of a single raindrop, represented by a line segment</span></span>StartX = 100<span style="color: #000000;"><span style="color: #000000;">; Starty</span></span>= 0<span style="color: #000000;"><span style="color: #000000;">; STOPX</span></span>= StartX +<span style="color: #000000;"><span style="color: #000000;">sizex; Stopy</span></span>= Starty +<span style="color: #000000;"><span style="color: #000000;">sizey; Paint</span></span>=<span style="color: #0000ff;"><span style="color: #0000ff;">New</span></span><span style="color: #000000;"><span style="color: #000000;">Paint (); Paint.setcolor (</span></span>0xFFFFFFFF<span style="color: #000000;"><span style="color: #000000;">); } @Override</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">protected</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span><span style="color: #000000;"><span style="color: #000000;">logic () {</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">Let the rain move</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">float</span></span>opt = 0.3f<span style="color: #000000;"><span style="color: #000000;">; StartX</span></span>+ = Sizex *<span style="color: #000000;"><span style="color: #000000;">opt; STOPX</span></span>+ = Sizex *<span style="color: #000000;"><span style="color: #000000;">opt; Starty</span></span>+ = Sizey *<span style="color: #000000;"><span style="color: #000000;">opt; Stopy</span></span>+ = Sizey *<span style="color: #000000;"><span style="color: #000000;">opt; </span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">when the rain drops out of the screen, let it go back to the starting point</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(starty > GetHeight () | | StartX ><span style="color: #000000;"><span style="color: #000000;">getwidth ()) {startX</span></span>= 100<span style="color: #000000;"><span style="color: #000000;">; Starty</span></span>= 0<span style="color: #000000;"><span style="color: #000000;">; STOPX</span></span>= StartX +<span style="color: #000000;"><span style="color: #000000;">sizex; Stopy</span></span>= Starty +<span style="color: #000000;"><span style="color: #000000;">sizey; }} @Override</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">protected</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span><span style="color: #000000;"><span style="color: #000000;">drawsub (canvas Canvas) {</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">Drawsub completing the drawing operation</span></span><span style="color: #000000;"><span style="color: #000000;">canvas.drawline (startX, starty, stopx, stopy, paint); }}</span></span></pre><p><p>Using in the layout file</p></p><pre><span style="color: #0000ff;"><span style="color: #0000ff;"><</span></span><span style="color: #800000;"><span style="color: #800000;">Framelayout</span></span><span style="color: #ff0000;"><span style="color: #ff0000;">xmlns:android</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">= "http://schemas.android.com/apk/res/android"</span></span><span style="color: #ff0000;"><span style="color: #ff0000;">Xmlns:tools</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">= "http://schemas.android.com/tools"</span></span><span style="color: #ff0000;"><span style="color: #ff0000;">Android:id</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">= "@+id/container"</span></span><span style="color: #ff0000;"><span style="color: #ff0000;">Android:layout_width</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">= "match_parent"</span></span><span style="color: #ff0000;"><span style="color: #ff0000;">Android:layout_height</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">= "match_parent"</span></span><span style="color: #ff0000;"><span style="color: #ff0000;">Tools:context</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">= "com.carloz.raineffect.MainActivity"</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">></span></span> <span style="color: #0000ff;"><span style="color: #0000ff;"><</span></span><span style="color: #800000;"><span style="color: #800000;"> <span style="background-color: #ffff00;">Com.carloz.raineffect.v1.single_rain. Rainvie</span>W</span></span><span style="color: #ff0000;"><span style="color: #ff0000;">Android:layout_width</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">= "match_parent"</span></span><span style="color: #ff0000;"><span style="color: #ff0000;">Android:layout_height</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">= "match_parent"</span></span><span style="color: #ff0000;"><span style="color: #ff0000;">Android:background</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">= "#ff000000"</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">/></span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></</span></span><span style="color: #800000;"><span style="color: #800000;">Framelayout</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">></span></span></pre><p><p>The effect is as Follows:</p></p><p><p></p></p><p><p></p></p><p><p>2. Improve the behavior of raindrops and tectonic rain scenes</p></p><p><p></p></p><p><p>2.1 Abstract The Raindrop effect and behavior</p></p><p><p>* The speed and length of raindrops is variable</p></p><p><p>* The tilt angle of the raindrops is Variable.</p></p><p><p>* The position of raindrops is Variable.</p></p><pre><span style="color: #0000ff;"><span style="color: #0000ff;"></span> public</span> <span style="color: #0000ff;"><span style="color: #0000ff;">class</span></span><span style="color: #000000;"><span style="color: #000000;">Rainitem {</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Private</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span><span style="color: #000000;"><span style="color: #000000;">width; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Private</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span><span style="color: #000000;"><span style="color: #000000;">height; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> public</span>Rainitem (<span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>Width<span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span><span style="color: #000000;"><span style="color: #000000;">Height) { </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> this</span>. width =<span style="color: #000000;"><span style="color: #000000;">width; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> this</span>. Height =<span style="color: #000000;"><span style="color: #000000;">height; Init (); } </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Private</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">float</span></span>StartX = 0<span style="color: #000000;"><span style="color: #000000;">; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Private</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">float</span></span>Starty = 0;<span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">Start</span> point</span> <span style="color: #0000ff;"><span style="color: #0000ff;">Private</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">float</span></span>STOPX = 0<span style="color: #000000;"><span style="color: #000000;">; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Private</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">float</span></span>Stopy = 0;<span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">Stop</span> point</span> <span style="color: #0000ff;"><span style="color: #0000ff;">Private</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">float</span></span>Sizex = 0<span style="color: #000000;"><span style="color: #000000;">; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Private</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">float</span></span>Sizey = 0<span style="color: #000000;"><span style="color: #000000;">; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Private</span></span><span style="color: #000000;"><span style="color: #000000;">Paint paint; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Private</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">float</span></span><span style="color: #000000;"><span style="color: #000000;">opt; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Private</span></span><span style="color: #000000;"><span style="color: #000000;">Random random; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> public</span> <span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span><span style="color: #000000;"><span style="color: #000000;">Init () {</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">TODO auto-generated Method Stub</span></span>Random =<span style="color: #0000ff;"><span style="color: #0000ff;">New</span></span><span style="color: #000000;"><span style="color: #000000;">Random (); Sizex</span></span>= 1 + random.nextint (10);<span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">randomly changing the angle of the raindrops</span></span>Sizey = 1 + random.nextint (20<span style="color: #000000;"><span style="color: #000000;">); </span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">the shape of a single raindrop, represented by a line segment</span></span>StartX = Random.nextint (<span style="color: #0000ff;"><span style="color: #0000ff;"></span> this</span><span style="color: #000000;"><span style="color: #000000;">. width); Starty</span></span>= Random.nextint (<span style="color: #0000ff;"><span style="color: #0000ff;"></span> this</span>. height);<span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">randomly changing the position of raindrops</span></span>STOPX = StartX +<span style="color: #000000;"><span style="color: #000000;">sizex; Stopy</span></span>= Starty +<span style="color: #000000;"><span style="color: #000000;">sizey; Paint</span></span>=<span style="color: #0000ff;"><span style="color: #0000ff;">New</span></span><span style="color: #000000;"><span style="color: #000000;">Paint (); Paint.setcolor (</span></span>0xFFFFFFFF<span style="color: #000000;"><span style="color: #000000;">); } </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> public</span> <span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span><span style="color: #000000;"><span style="color: #000000;">Draw (canvas Canvas) {canvas.drawline (startX, starty, stopx, stopy, paint); } </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> public</span> <span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span><span style="color: #000000;"><span style="color: #000000;">move () {</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">Let the rain move</span></span>opt = 0.2f + random.nextfloat ();<span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">randomly changing the speed and length of raindrops</span></span>StartX + = Sizex *<span style="color: #000000;"><span style="color: #000000;">opt; STOPX</span></span>+ = Sizex *<span style="color: #000000;"><span style="color: #000000;">opt; Starty</span></span>+ = Sizey *<span style="color: #000000;"><span style="color: #000000;">opt; Stopy</span></span>+ = Sizey *<span style="color: #000000;"><span style="color: #000000;">opt; </span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">when the rain drops out of the screen, let it go back to the starting point</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(starty ><span style="color: #0000ff;"><span style="color: #0000ff;"></span> this</span>. Height | | StartX ><span style="color: #0000ff;"><span style="color: #0000ff;"></span> this</span><span style="color: #000000;"><span style="color: #000000;">. Width) {startX</span></span>= Random.nextint (<span style="color: #0000ff;"><span style="color: #0000ff;"></span> this</span><span style="color: #000000;"><span style="color: #000000;">. width); Starty</span></span>= Random.nextint (<span style="color: #0000ff;"><span style="color: #0000ff;"></span> this</span><span style="color: #000000;"><span style="color: #000000;">. height); STOPX</span></span>= StartX +<span style="color: #000000;"><span style="color: #000000;">sizex; Stopy</span></span>= Starty +<span style="color: #000000;"><span style="color: #000000;">sizey; } }}</span></span></pre><p><p>2.2 Defining multiple Raindrops</p></p><p><p>In the Add abstract Baseview method: protected abstract void init ();</p></p><pre><span style="color: #0000ff;"><span style="color: #0000ff;">class</span></span>MyThread<span style="color: #0000ff;"><span style="color: #0000ff;">extends</span></span><span style="color: #000000;"><span style="color: #000000;">Thread {@Override</span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> public</span> <span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span><span style="color: #000000;"><span style="color: #000000;">run () { <span style="background-color: #ffff00;">init ()</span>; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> while</span><span style="color: #000000;"><span style="color: #000000;">(running) {logic (); Postinvalidate (); </span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;">the <span style="color: #008000;">thread updates the drawing and calls the OnDraw method again</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Try</span></span><span style="color: #000000;"><span style="color: #000000;">{thread.sleep (</span></span>50);<span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">It's too fast for the naked eye to see, to Sleep.</span></span>}<span style="color: #0000ff;"><span style="color: #0000ff;">Catch</span></span><span style="color: #000000;"><span style="color: #000000;">(interruptedexception E) {</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">TODO auto-generated Catch block</span></span><span style="color: #000000;"><span style="color: #000000;">E.printstacktrace (); } } }}</span></span></pre><p><p></p></p><p><p></p></p><pre><span style="color: #0000ff;"><span style="color: #0000ff;"></span> public</span> <span style="color: #0000ff;"><span style="color: #0000ff;">class</span></span>Rainview<span style="color: #0000ff;"><span style="color: #0000ff;">extends</span></span><span style="color: #000000;"><span style="color: #000000;">Baseview {ArrayList</span></span><RainItem> rainlist =<span style="color: #0000ff;"><span style="color: #0000ff;">New</span></span>Arraylist<rainitem><span style="color: #000000;"><span style="color: #000000;">(); </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>Size = 80<span style="color: #000000;"><span style="color: #000000;">; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> public</span><span style="color: #000000;"><span style="color: #000000;">Rainview (context Context) {</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Super</span></span><span style="color: #000000;"><span style="color: #000000;">(context); } </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> public</span><span style="color: #000000;"><span style="color: #000000;">rainview (context context, attributeset attrs) {</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Super</span></span><span style="color: #000000;"><span style="color: #000000;">(context, attrs); } @Override</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">protected</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span><span style="color: #000000;"><span style="color: #000000;">Init () {</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">TODO auto-generated Method Stub</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;"></span> for</span>(<span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>i = 0; I < size; i++<span style="color: #000000;"><span style="color: #000000;">) {rainitem Item</span></span>=<span style="color: #0000ff;"><span style="color: #0000ff;">New</span></span><span style="color: #000000;"><span style="color: #000000;">rainitem (getwidth (), getheight ()); Rainlist.add (item); }} @Override</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">protected</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span><span style="color: #000000;"><span style="color: #000000;">logic () {</span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> for</span><span style="color: #000000;"><span style="color: #000000;">(rainitem Item:rainlist) {item.move (); }} @Override</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">protected</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span><span style="color: #000000;"><span style="color: #000000;">drawsub (canvas Canvas) {</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">Drawsub completing the drawing operation</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;"></span> for</span><span style="color: #000000;"><span style="color: #000000;">(rainitem Item:rainlist) {item.draw (canvas); } }}</span></span></pre><p><p>The effect is as Follows:</p></p><p><p></p></p><p><p></p></p><p><p>3. Define properties in XML that can control rain</p></p><p><p></p></p><p><p>Android Effects--rain of particle effects</p></p></span>