android

安卓自定义View的技巧记录

2018-08-22  本文已影响7人  奋斗小青年Jerome

一、基础API的使用

更多详细API请看官方文档

1.记录一些常用但是易混淆的API案例

画线:
当设置画笔(paint)的宽度之后,真正draw时,坐标原点在Y轴上是去掉了线宽的一半,而不是从直线的最左下角开始的,这一点尤其是在画笔宽度设置过大时很明显

  private void initView(Context context) {
        mPaint = new Paint();
        mPaint.setColor(Color.RED);
        mPaint.setAntiAlias(true);
        mPaint.setStrokeWidth(10);
    }


    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawLine(50,50,300,50,mPaint);
    }
drawLine的坐标.png

画矩形:画矩形时,画笔宽度对矩形的宽度没有影响

矩形.png image.png

画圆弧
canvas.drawArc()接收的前部分参数,可以是坐标,也可以是矩形,它其实就是一个矩形的内切圆


image.png
上面的代码绘制出来的圆弧
可以看到,绿色矩形坐标分别为:左上角(150,150),右下角(300,300),那么红色圆弧就是其内切圆
startAngle是圆弧绘制的起始位置,0°即时钟的三点钟位置,扫描的方向跟时钟方向一致
注意:画圆弧同样要注意画笔的宽度,某些情况,矩形坐上右下的坐标原点需要减掉画笔宽度

画路径
drawPath涉及的API主要是moveTo和lineTo,moveTo是将path移动到某个点,lineTo是沿着坐标进行绘制,并连接下一个坐标点,形成路径
path其实是一个很伟大的api,能够做非常多炫酷的东西,案例给出了pathMeasure结合属性动画,得到一个path动画
PathMeasuer结合Path来做炫酷的path动画

image.png
image.png

利用pathMeasure进行动画

        //path进行测量之后,每个比例下的path片段被存放在这个dst中
        mDst = new Path();
        mPathMeasure = new PathMeasure();

        mPath.reset();
        mPath.moveTo(mPathStartX, mPathStartY);
        mPath.lineTo(mPathStopX1, mPathStopY1);
        mPath.lineTo(mMPathStop2X, mMPathStop2Y);
        mPath.lineTo(mPathStop3X, mPathStop3Y);
        //测量path片段
        mPathMeasure.setPath(mPath, false);
        mPathLength = mPathMeasure.getLength();

`
        mDst.reset();
        //解决硬件加速的bug
        mDst.lineTo(0, 0);
        //一个变化因子内,path的长度
        float stop = mPathLength * mRate;
        mPathMeasure.getSegment(0, stop, mDst, true);
        canvas.drawPath(mDst, mPathPaint);
使用pathMeasure做的下拉刷新动画
上一篇 下一篇

猜你喜欢

热点阅读