亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

使用自定義布局模仿下雨(只是小線條~)

標簽:
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下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消