【自定义View】一起来画个风车吧~

先来一张效果图:
这里写图片描述


Chrome上使用Infinity标签页,看到右下角有个 风车,点击更换壁纸:
这里写图片描述

觉得挺简单的,就用自定义View实现了。
一般来讲可以先考虑那些属性可以配置,进行自定义属性。不过这里不为具体生产使用,就简单的画一画。就直接开搞。

先分析 风车 的组成:

这里写图片描述

根据 绘制顺序 可以 分析出
- 一根棒子
- 8个三角形
- 最后一个圆点

分析出来之后呢 就开始画吧。
棒子呢直接 一个很粗的 线段即可:

   canvas.drawLine(pointX1, pointY1, pointX1, pointY1 + 400, mPaint);

这个棒棒下面要多出来 多少距离合适 可以自己 配置,我只是为了先画出来。

然后就是8个三角形,这里 每对颜色 一深一浅,九浅一深。使用 Path来记录三角形路径。
这里贴出一段 ,因为这些三角形都是等腰的,画两个边就行,不用花多大功夫就能计算出路径:

  path1 = new Path();
        path1.moveTo(pointX, pointY);        
        path1.lineTo(pointX - 300, pointY);   
        path1.lineTo(pointX - 150, pointY + 150);
        path1.close();

唰唰唰,最后画一个实心圆就好了。一番绘制 就大功告成了:
这里写图片描述

最后就是动画转起来吧:

      ValueAnimator  animator=ValueAnimator.ofFloat(0,360);
        animator.setDuration(1500);
        animator.setInterpolator(new LinearInterpolator());
        animator.setRepeatCount(ObjectAnimator.INFINITE);
        animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator valueAnimator) {
                degree= (float) valueAnimator.getAnimatedValue();
                postInvalidate();
            }
        });
        animator.start();

onDraw里

   canvas.drawLine(pointX1, pointY1, pointX1, pointY1 + 400, mPaint);
        canvas.save();
        canvas.translate(pointX1, pointY1);
        canvas.rotate(-degree);
        canvas.drawPath(path1, mPaint1);
        ...
        canvas.drawCircle(pointX, pointY, 30, mPaint);
        canvas.restore();

是不是很简单?
git地址:https://github.com/VongVia1209/WindmillView

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值