自定义View
2016-07-14 08:03
295 查看
package com.rong.bean; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Paint.Style; import android.os.Handler; import android.os.Message; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; public class Circle extends View { private List<Wave> list; private int[] colors = new int[] { Color.BLUE, Color.RED, Color.YELLOW, Color.GREEN, Color.LTGRAY, Color.DKGRAY }; // 控制是否继续动画 private boolean isRunning = false; private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case 1: // 刷新数据 flushCircle(); // 刷新页面 invalidate(); if (isRunning) { handler.sendEmptyMessageDelayed(1, 50); } break; default: break; } } }; public Circle(Context context, AttributeSet attrs) { super(context, attrs); list = new ArrayList<Wave>(); } /** * 绘制 */ @Override protected void onDraw(Canvas canvas) { // TODO Auto-generated method stub super.onDraw(canvas); for (int i = 0; i < list.size(); i++) { Wave wave=list.get(i); canvas.drawCircle(wave.cx, wave.cy, wave.r, wave.p); } } /** * 滑动监听 */ @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_MOVE: int x = (int) event.getX(); int y = (int) event.getY(); setCircle(x, y); break; case MotionEvent.ACTION_DOWN: int x1 = (int) event.getX(); int y1 = (int) event.getY(); setCircle(x1, y1); break; default: break; } return true; } /** * @author lcr 圆的封装 */ class Wave { // 圆心 int cx; int cy; // 画笔 Paint p; // 半径 int r; } /** * 更新圆的大小和透明度 */ private void flushCircle() { for (int i = 0; i < list.size(); i++) { Wave wave = list.get(i); // 获取画笔的透明度 int alpha = wave.p.getAlpha(); // 透明度越来越高 alpha = alpha - 5; if (alpha < 5) { alpha = 0; list.remove(i);// 当完全透明时,移除该对象 } // 设置透明度越来越高 wave.p.setAlpha(alpha); // 扩大半径 wave.r += 3; wave.p.setStrokeWidth(wave.r / 3); // if (list.size() == 0) { isRunning = false;// 当集合为空时,停止运行 } } } /** * 设置圆 * */ private void setCircle(int x, int y) { if (list.size() == 0) { createAndAddCirlce(x, y); isRunning = true; handler.sendEmptyMessage(1); } else { createAndAddCirlce(x, y); } } /** * 创造圆并且封装 */ private void createAndAddCirlce(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; list.add(wave);// 封装进集合 } }
相关文章推荐
- 用代码创建约束,实现屏幕适配
- pull解析和生成xml
- 函数增删改查数据库
- 深入Objective-C的动态特性(基于runtime实现)
- Cocos2d-x 3.0数据结构——cocos2d::Map
- HttpUtils请求数据
- topk--堆排序--小顶堆
- 下载服务器中的apk
- 1308 取数游戏
- C语言中遇到的问题
- poj1185
- JAVA 十大算法
- 佳肴 (Standard IO)
- 取数游戏 纪中 1308 蜜汁dp
- hdu_5104 Primes Problem()
- Activity给Fragment传参
- elk
- Cocos2d-x 3.0数据结构——cocos2d::Vector
- nginx默认虚拟主机
- 编写一个makefile的简单实例