package com.example.myview;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
//自定义View
package com.example.myview;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.util.AttributeSet;
import android.view.View;
public class MyView extends View {
private Paint paint;
private int cx;
private int cy;
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
// 初始化画笔
initView();
}
private void initView() {
// 得到画笔
paint = new Paint();
// 设置画笔属性
paint.setAlpha(255);// 透明度
paint.setStyle(Style.STROKE);// //设置画笔为空心
paint.setStrokeWidth(2);// 画笔线宽
paint.setColor(Color.RED);// 画笔颜色
paint.setAntiAlias(true);// /抗锯齿
}
@Override
// 测量
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// TODO Auto-generated method stub
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
// 从新设置当前view的大小
setMeasuredDimension(widthMeasureSpec, heightMeasureSpec);
}
@Override
// 布局
protected void onLayout(boolean changed, int left, int top, int right,
int bottom) {
if (changed) {
cx = getWidth() / 2;
cy = getHeight() / 2;
}
}
@Override
// 绘制
protected void onDraw(Canvas canvas) {
for (int i = 0; i < getWidth(); i = i + 20) {
// 画直线.
// 直线的x起始点,y起始点y终点,y终点//横线
canvas.drawLine(0, i, getWidth(), i, paint);
// 竖线
canvas.drawLine(i, 0, i, getHeight(), paint);
}
for (int i = 0; i < getWidth(); i = i + 20) {
// 画点
paint.setColor(Color.GREEN);
paint.setStrokeWidth(10);
canvas.drawPoint(i, i, paint);
}
// 画圆
// X坐标
// y坐标
// 半径
// 画笔
paint.setColor(Color.BLUE);
paint.setStrokeWidth(20);
canvas.drawCircle(cx, cy, 60, paint);
}
}
//圆
package com.example.myview;
import java.util.ArrayList;
import android.annotation.SuppressLint;
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.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
public class MyWave extends View {
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" })
@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);
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);
}
}
@Override
protected 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;
}
}