自定义 view - paint

ps:本文并不长于详细讲解 paint ,只在于记录常用的 API 和设置

详细讲解 paint 的技术文章请看:


paint 常用 API :

// 设置颜色
paint.setColor(int color) 
// color 的取值
Color.RED  
Color.rgb(255,100,100)
Color.argb(50,255,100,100)
getResources().getColor(android.R.color.holo_blue_bright)

// 参数 alpha 透明度
paint.setAlpha(int a)

// 设置抗锯齿
paint.setAntiAlias(boolean aa) 

// 设置文本缩放倍数
paint.setTextScaleX(float scaleX)

// 设置字符之间的间距
paint.setLetterSpacing(float size)

// 设置字体大小
paint.setTextSize(float textSize)

// 设置下划线
paint.setUnderlineText(true)

// 设置文本删除线
paint.setStrikeThruText(true);

// 设置画笔的粗细
paint.setStrokeWidth(10);

下面我们来说说本文重点吧,paint 的特性

Style 填充模式


API:

mPaint.setStyle(Paint.Style.FILL); 

paint 的 Style 有3种:

  • STROKE - 描边
  • FILL - 填充
  • FILL_AND_STROKE - 描边加填充

做个演示看的清楚

Paint paint = new Paint();
paint.setColor(Color.BLUE);
paint.setStrokeWidth(40);     //为了实验效果明显,特地设置描边宽度非常大

// 描边
paint.setStyle(Paint.Style.STROKE);
canvas.drawCircle(200,200,100,paint);

// 填充
paint.setStyle(Paint.Style.FILL);
canvas.drawCircle(200,500,100,paint);

// 描边加填充
paint.setStyle(Paint.Style.FILL_AND_STROKE);
canvas.drawCircle(200, 800, 100, paint);
005Xtdi2jw1f8f0j4t36dj308c0ett8n.jpg

StrokeCap 字帽


啥叫字帽,简单来说就是画一条线,左边和右边起始点的样式

API:

paint.setStrokeCap(Paint.Cap.BUTT);

StrokeCap 字帽有3种:

  • BUTT - 无线冒
  • ROUND - 圆形线冒
  • SQUARE - 方形线冒

跑个例子看看:

private void drawStrokeCap(Canvas canvas) {
        Paint paint = new Paint();

        paint.setAntiAlias(true);
        paint.setStrokeWidth(200);
        paint.setColor(Color.parseColor("#00ff00"));
        // 线帽,即画的线条两端是否带有圆角,butt,无圆角
        paint.setStrokeCap(Paint.Cap.BUTT);       
        canvas.drawLine(200, 200, 500, 200, paint);

        paint.setColor(Color.parseColor("#ff0000"));
        // 线帽,即画的线条两端是否带有圆角,ROUND,圆角
        paint.setStrokeCap(Paint.Cap.ROUND);       
        canvas.drawLine(200, 500, 500, 500, paint);

        paint.setColor(Color.parseColor("#0000ff"));
        // 线帽,即画的线条两端是否带有圆角,SQUARE,矩形
        paint.setStrokeCap(Paint.Cap.SQUARE);      
        canvas.drawLine(200, 800, 500, 800, paint);
    }

StrokeJoin 折线样式


折线样式,简单说就是线段折叠处的处理样式

API:

 paint.setStrokeJoin(Paint.Join.MITER);

StrokeJoin 折线样式有3种:

  • Paint.Join.MITER - 结合处为锐角
  • Paint.Join.Round - 结合处为圆弧
  • Paint.Join.BEVEL - 结合处为直线

跑个例子看看:

Paint paint = new Paint();

        paint.setAntiAlias( true );
        paint.setStrokeWidth( 80 );
        paint.setStyle(Paint.Style.STROKE ); // 默认是填充 Paint.Style.FILL
        paint.setColor( Color.parseColor("#0000ff") );

        Path path = new Path();
        path.moveTo(100, 100);
        path.lineTo(400, 100);
        path.lineTo(100, 300);
        paint.setStrokeJoin(Paint.Join.MITER);
        canvas.drawPath(path, paint);

        path.moveTo(100, 500);
        path.lineTo(400, 500);
        path.lineTo(100, 700);
        paint.setStrokeJoin(Paint.Join.ROUND);
        canvas.drawPath(path, paint);

        path.moveTo(100, 900);
        path.lineTo(400, 900);
        path.lineTo(100, 1100);
        paint.setStrokeJoin(Paint.Join.BEVEL);
        canvas.drawPath(path, paint);

难点

除了上述内容外,paint 还有一些很难懂的,很理论的东西:

  1. ColorMatrix 颜色滤镜

颜色滤镜可以实现许多图片处理的效果,详细请看这个:

  1. BlurMaskFilter和EmbossMaskFilter

前者为模糊遮罩滤镜,而后者为浮雕遮罩滤镜,BlurMaskFilter 可以实现比阴影 API 更丰富的效果,具体请看:

  1. PorterDuffXfermode

这个是图层操作,应用也是非常广的,简单的画有图片底纹的文字可以看:

这个也只是简单的例子,更复杂的还是要我们去仔细看

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,454评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,553评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,921评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,648评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,770评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,950评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,090评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,817评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,275评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,592评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,724评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,409评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,052评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,815评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,043评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,503评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,627评论 2 350

推荐阅读更多精彩内容

  • 1.Asexual,无性恋者 是指一些不具有性倾向或者宣称自己没有性倾向的人,即不会对男性或女性任一性别表现出性倾...
    ___Moderato_阅读 6,458评论 0 0
  • 1简友语录:"蠢蠢欲动"一直是个顶可爱憨厚的词:春光下的两条小虫子,一鼓一缩地破土探出头来;而眼前的世界,大地回暖...
    岚县程建军阅读 284评论 0 2
  • 别哭了…会过去的
    Mix_U阅读 95评论 0 0
  • 不知道你是否有这样的经历,买回家的酱油、醋拧开盖子后,就要完成开瓶后的最后一个动作,把内置的塑料拉环拉开,这一动作...
    流动盛宴爱码士阅读 667评论 1 1