先上图,效果图是这样
这是我自定义一个view来生成的
很简单 代码就不贴了 原理就是自己写一个VIew控件 在里面重写onDraw方法
然后自己画点
canvas.drawCircle(x, y, 半径, 透明度);
划线
canvas.drawLine(x,y,x2,y2,线的样式)通过一系列的逻辑就可以实现了算了 还是贴代码吧 下面是我写死的5个点public class MyView extends View{ private Canvas css=new Canvas(); private String SHIBAI="-1";//获取颜色失败 private List<String> colorlist=new ArrayList<>();//颜色集合 防止重复 private List<MyBean> list ; private boolean START = true;// 如果不设置这个START进行判断,每次点击屏幕后,屏幕只允许出现一个圆 //获取传递过来的X,Y private int width; private int hight; private Context context; public MyView(Context context) { super(context); this.context=context; } public MyView(Context context,AttributeSet attrs) { super(context, attrs); } /** * MyView大小 */ @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); list = new ArrayList<MyBean>(); suijiDian(); } @Override protected void onDraw(Canvas canvas) { for (int i = 0; i < list.size(); i++) { MyBean wave = list.get(i); canvas.drawCircle(wave.x, wave.y, wave.radius, wave.paint); } if(list.size()>1) { Paint paint = new Paint(); paint.setColor(Color.BLACK); for(int i=1;i<list.size();i++) { canvas.drawLine(list.get(0).x,list.get(0).y,list.get(i).x,list.get(i).y,paint); } } } public void suijiDian() { List<Myzuobiao> listtwo=new ArrayList<>(); listtwo=MyDome.list; for(int i=0;i<listtwo.size();i++) { MyBean bean=new MyBean();//自己定义的一个bean 只有X,Y属性 bean.radius=20; bean.x= listtwo.get(i).getX(); bean.y=listtwo.get(i).getY(); bean.paint = initPaint(bean.alpha); list.add(bean); } if (list.size() == 0) { // 如果不设置这个START进行判断,每次点击屏幕后,屏幕只允许出现一个圆 START = true; } invalidate(); if (START) { handler.sendEmptyMessage(0); } } /** * 初始化paint */ private Paint initPaint(int alpha) { Paint paint = new Paint(); paint.setAntiAlias(true);// 抗锯齿 paint.setStyle(Paint.Style.FILL);// STROKE圆环 这个是实心的 paint.setAlpha(alpha);// 透明度 String getcolor=getColormy(); while(getcolor==SHIBAI) { getcolor=getColormy(); } paint.setColor(Color.parseColor("#"+getcolor));// 颜色 return paint; } private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case 0: Refresh(); invalidate(); if (list != null && list.size() > 0) { //下面这个代码如果不注释的话 会一直刷新 我们要它重写一下 如果传入的list值不变的话 就不要刷新 //handler.sendEmptyMessageDelayed(0, 1000);// 每50毫秒发送 } break; default: break; } } }; /*** * 刷新 */ private void Refresh() { for (int i = 0; i < list.size(); i++) { MyBean bean = list.get(i); if (START == false && bean.alpha == 0) { list.remove(i); bean.paint = null; continue; } else if (START == true) { START = false; } bean.radius = 20; //半径 bean.alpha = 110;// 透明度 bean.width = 20; bean.paint.setAlpha(bean.alpha); bean.paint.setStrokeWidth(bean.width); } } /** * 产生一个或多个唯一的颜色 * @return 产生的颜色 */ public String getColormy() { int ss= (int) (Math.random()*(255-0)+0); int ss1= (int) (Math.random()*(255-0)+0); int ss2= (int) (Math.random()*(255-0)+0); // Log.e("hgx",ss+":"+ss1+":"+ss2); String mycolor=Integer.toHexString(ss)+Integer.toHexString(ss1)+Integer.toHexString(ss2); // Log.e("hgx",mycolor); while(mycolor.length()<6) { mycolor=mycolor+"0"; } for(int i=0;i<colorlist.size();i++) { if(colorlist.get(i).equals(mycolor)) { return SHIBAI; } } colorlist.add(mycolor); return mycolor; } }