Android画廊实现一滴雨及多滴雨

来源:互联网 发布:公文写作神器软件 编辑:程序博客网 时间:2024/06/07 23:39

Android画廊实现一滴雨及多滴雨

首先我们先定好思路:
先写好一个圆的类(Rian)—然后创建MyView—在MainActivity中把MyView new 出来

代码块

首先圆的类:

public class Rian {    private float cx;//xprivate float cy;//yprivate float r = 10;//半径    private int a = 255;//透明度    public Rian(float cx, float cy) {        super();        this.cx = cx;        this.cy = cy;    }    public int getA() {        return a;    }    public void onDrawSub(Canvas canvas, Paint paint) {        r += 5;        a -= 5;        if (a < 0) {            a = 0;        }        paint.setAlpha(a);        canvas.drawCircle(cx, cy, r, paint);    }}

然后就要创建一个MyView的类:

package com.example.rain;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import android.R.color;import android.content.Context;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.Paint.Style;import android.os.SystemClock;import android.view.MotionEvent;import android.view.View;public class MyView extends View {    Paint paint=new Paint();//画廊    private List<Rian> rians=new ArrayList<Rian>();//多滴雨    public MyView(Context context) {        super(context);        paint.setStyle(Style.STROKE);//空心        paint.setStrokeWidth(1);        paint.setAntiAlias(true);//抗锯齿        paint.setColor(color.black);        new MyThread().start();    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        Iterator<Rian> it=rians.iterator();        Rian rian=null;        while(it.hasNext()){            rian=it.next();            if(rian.getA()==0){                it.remove();                continue;            }            rian.onDrawSub(canvas, paint);        }        //加上这句代码就是多滴雨的实现//      for(Rian rian:rians){//          rian.onDrawSub(canvas, paint);//  }    }    @Override    public boolean onTouchEvent(MotionEvent event) {        if(MotionEvent.ACTION_DOWN==event.getAction()){            float cx=event.getX();            float cy=event.getY();            Rian rian=new Rian(cx, cy);            rians.add(rian);        }        return true;    }    class MyThread extends Thread{        @Override        public void run() {            while(true){                SystemClock.sleep(100);                postInvalidate();            }        }    }}

最后把MainActivity中的那句代码加上就行:

setContentView(new MyView(this));