编写实体类: public class Cricle { float x; float y; int pointIndex; float r=0;//初始半径 int alpha=255;//初始透明度 public Cricle(float x,float y,int pointIndex){ this.x=x; this.y=y; this.pointIndex=pointIndex; } }public class Point { float pointx; float pointy; int pointIndex; public Point(float pointx, float pointy, int pointIndex) { super(); this.pointx = pointx; this.pointy = pointy; this.pointIndex = pointIndex; } } 编写控件:public class MyView extends View { public List<Cricle> cs=new ArrayList<Cricle>(); public List<Point> ps=new ArrayList<Point>(); Context context; Thread thread=new Thread(); ViewThread3 thread3=new ViewThread3(); createCircle thread4=new createCircle(); float x=100; float y=100; float x2=80; float y2=80; int i=0; public MyView(Context context) { super(context); this.context=context; thread.start(); thread4.start(); thread3.start(); } @Override public void draw(Canvas canvas) { super.draw(canvas); Paint paint=new Paint(); paint.setColor(Color.GREEN); paint.setStyle(Paint.Style.STROKE); //从list中拿到圆并画出来 for (int i = 0; i < cs.size(); i++) { paint.setStyle(Paint.Style.STROKE); paint.setAntiAlias(true); paint.setStrokeWidth(3); paint.setColor(Color.argb(cs.get(i).alpha, 0, 0, 255)); canvas.drawCircle(cs.get(i).x, cs.get(i).y, cs.get(i).r, paint); } } //线程改变圆的半径和透明度和移除圆 public class ViewThread3 extends Thread { @Override public void run() { super.run(); while(true){ try { thread.sleep(300); for(int i = 0; i < cs.size(); i++){ cs.get(i).r+=3; cs.get(i).alpha-=8; if(cs.get(i).alpha<0){ cs.remove(cs.get(i)); } postInvalidate(); } } catch (InterruptedException e) { e.printStackTrace(); } } } } //线程创建圆 public class createCircle extends Thread { @SuppressWarnings("static-access") @Override public void run() { super.run(); while(true){ try { thread.sleep(200); for(int i = 0; i < ps.size(); i++){ Cricle c=new Cricle(ps.get(i).pointx, ps.get(i).pointy, ps.get(i).pointIndex); cs.add(c); } } catch (InterruptedException e) { e.printStackTrace(); } } } } }编写Activity:public class MainActivity extends Activity { MyView view; GestureDetector gs=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); view=new MyView(MainActivity.this); setContentView(view); } @Override public boolean onTouchEvent(MotionEvent event) { int action=event.getAction(); int actionCode=(action&0x000000ff)>=5?(action&0x000000ff)-5:(action&0x000000ff); int pointIndex=action>>8; int pointId=event.getPointerId(pointIndex); switch(actionCode){ case MotionEvent.ACTION_DOWN: Point cp=new Point(event.getX(pointIndex), event.getY(pointIndex), pointIndex); addPoint(cp); break; case MotionEvent.ACTION_CANCEL: case MotionEvent.ACTION_OUTSIDE: case MotionEvent.ACTION_UP: removePoint(pointId); break; case MotionEvent.ACTION_MOVE: for(int i=0;i<event.getPointerCount();i++){ int id=event.getPointerId(i); Point p=getPoint(id); if(null!=p){ p.pointx=event.getX(i); p.pointy=event.getY(i); } } break; } return true; } public void addCircle(Cricle circle){ view.cs.add(circle); } public void addPoint(Point p){ view.ps.add(p); } public void removePoint(int id){ Iterator<Point> it= view.ps.iterator(); while(it.hasNext()){ Point p=it.next(); if(p.pointIndex==id){ it.remove(); } } } public void removeCircle(int id){ Iterator<Cricle> it= view.cs.iterator(); while(it.hasNext()){ Cricle c=it.next(); if(c.pointIndex==id){ it.remove(); } } } public Cricle getCircle(int id){ for(int i=0;i<view.cs.size();i++){ if(view.cs.get(i).pointIndex==id){ return view.cs.get(i); } } return null; } public Point getPoint(int id){ for(int i=0;i<view.ps.size();i++){ if(view.ps.get(i).pointIndex==id){ return view.ps.get(i); } } return null; } }
Android_实现水滴效果
最新推荐文章于 2021-05-26 07:12:57 发布