自定义view水波纹

来源:互联网 发布:网址域名大全 编辑:程序博客网 时间:2024/04/28 01:07
===========新建一个MyWave类====================
private int [] colors = new int[]{Color.BLUE,Color.RED,Color.YELLOW,Color.GREEN,Color.BLACK,Color.DKGRAY};///控制是否继续执行动画protected boolean isRunning = false;/** * 装圆的集合 */private ArrayList<Wave> wList;public MyWave(Context context, AttributeSet attrs) {super(context, attrs);wList = new ArrayList<MyWave.Wave>();}Handler handler=new Handler(){public void handleMessage(android.os.Message msg) {switch (msg.what) {case 1:System.out.println(wList.size()+"-----------");//刷新数据flushData();//刷新页面invalidate();if(isRunning){handler.sendEmptyMessageDelayed(1, 50);}break;default:break;}};};@SuppressLint({ "ClickableViewAccessibility", "NewApi" })@Overridepublic boolean onTouchEvent(MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_MOVE:int x = (int)event. getX();int y = (int)event. getY();setCircle(x, y);System.out.println(x+"===="+y);break;}return true;}/** * 更新圆的大小和透明度 */protected void flushData() {for(int i=0;i<wList.size();i++){Wave wave = wList.get(i);//获得画笔透明度int alpha = wave.p.getAlpha();//透明的越来越高alpha= alpha-5;if(alpha<5){alpha=0;wList.remove(i);//isRunning=false;}//设置的透明度越来越高wave.p.setAlpha(alpha);//扩大半径wave.r=wave.r+3;wave.p.setStrokeWidth(wave.r/3);}if(wList.size() == 0){isRunning = false;}}/** * 设置圆 * @param x * @param y */private void setCircle(int x, int y) {if(wList.size()==0){createAndAddCircle(x,y);isRunning=true;handler.sendEmptyMessage(1);}else{createAndAddCircle(x,y);}}@Overrideprotected void onDraw(Canvas canvas) {for(int i=0;i<wList.size();i++){Wave wave = wList.get(i);canvas.drawCircle(wave.cx, wave.cy, wave.r, wave.p);}}/** * 创造圆并且添加 */private void createAndAddCircle(int x, int y) {Wave wave=new Wave();wave.cx=x;wave.cy=y;Paint paint=new Paint();paint.setStyle(Style.STROKE);paint.setAntiAlias(true);paint.setColor(colors[(int) (Math.random()*6)]);wave.p=paint;wList.add(wave);}// 圆的封装类private class Wave {// 圆心int cx;int cy;// 画笔Paint p;// 半径int r;}
=======================布局=============================
<pre name="code" class="java"><com.example.myview.MyWave        android:layout_width="fill_parent"        android:layout_height="fill_parent"          android:layout_centerHorizontal="true"        android:layout_centerVertical="true"         />



0 0