为了账号安全,请及时绑定邮箱和手机立即绑定

使用自定义布局模仿下雨(只是小线条~)

标签:
Android

public abstract class BaseView extends View {

private Thread thread;

public BaseView(Context context, AttributeSet attrs) {
    super(context, attrs);

}

public BaseView(Context context) {
    super(context);
}

protected abstract void drawSub(Canvas canvas);

protected abstract void logic();

protected abstract void init();

@Override
protected void onDraw(Canvas canvas) {
    if (thread == null) {
        thread = new MyThread();
        thread.start();
    } else {
        drawSub(canvas);
    }
}

@Override
protected void onDetachedFromWindow() {
    running = false;
    super.onDetachedFromWindow();
}

private boolean running = true;

class MyThread extends Thread {
    @Override
    public void run() {
        init();
        while (running) {
            logic();
            postInvalidate();
            try {
                Thread.sleep(30);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

}

public RainItem(int width, int height) {
this.width = width;
this.height = height;
init();
}

public RainItem(int width, int height, int size) {
    this.width = width;
    this.height = height;
    this.size = size;
    init();
}

public RainItem(int width, int height, int size, int color) {
    this.width = width;
    this.height = height;
    this.size = size;
    this.color = color;
    init();
}

public RainItem(int width, int height, int size, int color,
        boolean randColor) {
    this.width = width;
    this.height = height;
    this.size = size;
    this.color = color;
    this.randColor = randColor;
    init();
}

private void init() {
    random = new Random();
    sizeX = 1 + random.nextInt(size / 2);
    sizeY = 10 + random.nextInt(size);
    startX = random.nextInt(width);
    startY = random.nextInt(height);
    stopX = startX + sizeX;
    stopY = startY + sizeY;
    opt = 0.2f + random.nextFloat();
    paint = new Paint();
    if (randColor) {

        int r = random.nextInt(256);
        int g = random.nextInt(256);
        int b = random.nextInt(256);
        paint.setARGB(255, r, g, b);
    } else {
        paint.setColor(0xffffffff);
    }
}

public void draw(Canvas canvas) {
    canvas.drawLine(startX, startY, stopX, stopY, paint);
}

public void move() {
    startX += sizeX * opt;
    stopX += sizeX * opt;

    startY += sizeY * opt;
    stopY += sizeY * opt;
    if (startY > height) {
        init();
    }
}

public RainView(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray ta = context.obtainStyledAttributes(attrs,
R.styleable.RainView);
rainNum = ta.getInteger(R.styleable.RainView_rainNum, 80);
size = ta.getInteger(R.styleable.RainView_size, 20);
rainColor = ta.getInteger(R.styleable.RainView_rainColor, 0xffffff);
randColor = ta.getBoolean(R.styleable.RainView_randColor, false);
ta.recycle();
}

public RainView(Context context) {
    super(context);
}

@Override
protected void drawSub(Canvas canvas) {
    for (RainItem item : list) {
        item.draw(canvas);
    }
}

@Override
protected void logic() {
    for (RainItem item : list) {
        item.move();
    }
}

@Override
protected void init() {
    for (int i = 0; i < rainNum; i++) {
        RainItem item = new RainItem(getWidth(), getHeight(), size);
        list.add(item);
    }
}
点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
移动开发工程师
手记
粉丝
4
获赞与收藏
155

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消