Android ArcHeaderView和ArcHeaderD

作者: SwitchLife | 来源:发表于2018-02-28 17:39 被阅读157次

    前言

      阅读完Android大神依然范特稀西的文章Android 弧形ViewPager和弧形HeaderView(升级版)之后,感觉不错。弧形HeaderView很漂亮,于是乎想自己亲手写一个易于理解和使用的弧形HeaderView。我扩展了向上弧形的效果,分享给童鞋们。另外我还写了一个弧形ArcHeaderDrawable,传入一个Bitmap就可以构建出漂亮的弧形Drawable。

    效果图





      看到上面的效果,估计有的童鞋们会嗤之以鼻了:不就是美工动动手指的事情吗?何必这么麻烦?美工作图确实是省时省力,快捷方便,但是扩展性就灰常之差了,这不是我们想要的,那就自定义吧。如何画出以上形状,通用思路有二:

    • 思路一:矩形 + 弧形 组合。
    • 弧形向下。先画上面矩形部分,再画下面弧形部分。
    • 弧形向上。先画整个矩形,在用橡皮檫擦掉弧形区域。
    • 思路二:Path路径。

    沿着形状边缘画出Path路径(调用二阶贝塞尔曲线生成弧形线)。
    这里采用的是思路二。

    立即体验

    扫描以下二维码下载体验App(从0.2.3版本开始,体验App内嵌版本更新检测功能):


    JSCKit库传送门:https://github.com/JustinRoom/JSCKit

    实现

        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            mPaint.setShader(shader);
            canvas.drawPath(mPath, mPaint);
        }
    

    有了ShaderPath,我们就可以很轻松的画出来了。
    Shader很多:

    shader list.png
    所以我们可以抽象出来一个获取Shader的方法,如此使用者可以随心所欲创建自己的Shader
    上面的效果图1、2是一个颜色渐变的LinearGradient,效果图3、4是BitmapShader
    Path计算也很简单:起点,连接中间点,连接弧线,再闭环。
    private void calPath(){
            int w = getWidth();
            int h = getHeight();
            mPath.reset();
            mPath.moveTo(0, 0);
            switch (direction){
                case DIRECTION_DOWN_OUT_SIDE:
                    mPath.lineTo(0, h - mArcHeight);
                    mPath.quadTo(w / 2.0f, h + mArcHeight, w, h - mArcHeight);
                    mPath.lineTo(w, 0);
                    break;
                case DIRECTION_DOWN_IN_SIDE:
                    mPath.lineTo(0, h);
                    mPath.quadTo(w / 2.0f, h - mArcHeight * 2, w, h);
                    mPath.lineTo(w, 0);
                    break;
            }
            mPath.close();
        }
    

    DIRECTION_DOWN_OUT_SIDE——弧形向下。
    DIRECTION_DOWN_IN_SIDE——弧形向上。

    如何使用

    这里是使用示例和相关参数说明:
    https://github.com/JustinRoom/JSCKit/blob/master/doc/baseComponent/arc_header.md

    对外方法:
    LGradientArcHeaderView

    //设置渐变颜色
    public void setColors(@ColorInt int startColor, @ColorInt int endColor)
    

    PictureArcHeaderView

    //设置要显示的Drawable资源文件
    public void setDrawableResource(@DrawableRes int drawableId)
    //设置要显示的Bitmap
    public void setBitmap(@NonNull Bitmap bitmap) 
    

    共用方法:

        //设置弧形显示的方向
        public void setDirection(@Direction int direction)
    
        public static final int DIRECTION_DOWN_OUT_SIDE = 0;//弧形向下
        public static final int DIRECTION_DOWN_IN_SIDE = 1;//弧形向上
        @IntDef({DIRECTION_DOWN_OUT_SIDE, DIRECTION_DOWN_IN_SIDE})
        @Retention(RetentionPolicy.SOURCE)
        public @interface Direction {
        }
    

    详细请参照源码。

    结尾

      曲折的人生并不可怕,大多数人正是毫无曲折地一路滑下去的。

    如果使用过程中有问题,可以在下面给我留言。谢谢大家的鼎力支持,加个关注、给个赞吧!QQ:1006368252

    相关文章

      网友评论

        本文标题:Android ArcHeaderView和ArcHeaderD

        本文链接:https://www.haomeiwen.com/subject/bmcixftx.html