android中生成随机点

 先上图,效果图是这样



这是我自定义一个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;
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值