自定义View实现雪花飘落效果

通过自定义view实现简单的雪花飘落效果 :

public class snowFlakeView extends View {

private List<loadBean> loadBeans =new ArrayList<>();

private Paint paint;

public snowFlakeView(Context context) {

super(context);

init();

}

public snowFlakeView(Context context, @Nullable AttributeSet attrs) {

super(context, attrs);

init();

}

Random random = new Random();

@Override

protected void onLayout(boolean changed, int left, int top, int right, int bottom) {

super.onLayout(changed, left, top, right, bottom);

for (int i = 0; i <getWidth()/3 ; i++) {

loadBean loadBean = new loadBean();

int x = random.nextInt(getWidth());

int y = random.nextInt(getHeight());

loadBean.setStartLoad(new Point(x,0));

loadBean.setNowLoad(new Point(x,y));

loadBean.setColor(Color.WHITE);

loadBean.setRadius(random.nextFloat()*6+1);

loadBean.setVelocity(random.nextInt(3)+1);

loadBeans.add(loadBean);

}

}

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

for (loadBean loadBean: loadBeans){

Point point = loadBean.getNowLoad();

point.y+=loadBean.getVelocity();

float randValue = random.nextFloat() *2 -0.5f;

point.x+=randValue;

if(point.y>getHeight()){

point.y = 0;

}

}

for (loadBean loadBean : loadBeans) {

paint.setColor(loadBean.getColor());

canvas.drawCircle(loadBean.getNowLoad().x, loadBean.getNowLoad().y, loadBean.getRadius(), paint);

}

}

@Override

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

super.onMeasure(widthMeasureSpec, heightMeasureSpec);

}

private void init() {

paint = new Paint();

paint.setAntiAlias(true);

paint.setColor(Color.WHITE);

}

class loadBean {

//位置

private Point nowLoad;

//初始位置

private Point startLoad;

//速度

private int velocity;

//半径

private float radius;

//颜色

private int color;

public Point getNowLoad() {

return nowLoad;

}

public void setNowLoad(Point nowLoad) {

this.nowLoad = nowLoad;

}

public Point getStartLoad() {

return startLoad;

}

public void setStartLoad(Point startLoad) {

this.startLoad = startLoad;

}

public int getVelocity() {

return velocity;

}

public void setVelocity(int velocity) {

this.velocity = velocity;

}

public float getRadius() {

return radius;

}

public void setRadius(float radius) {

this.radius = radius;

}

public int getColor() {

return color;

}

public void setColor(int color) {

this.color = color;

}

}

public void startAnim(){

invalidate();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值