精华内容
参与话题
问答
  • Paint

    千次阅读 2015-12-31 15:12:43
    API—Paint | Android 开发者 Paint即画笔,用于设置绘制风格,如:线宽(笔触粗细),颜色,透明度和填充风格等, 大体上可以分为两类,一类与图形绘制相关,一类与文本绘制相关。 嵌套类 Paint.Align ,设置字符位置,...

    Paint即画笔,用于设置绘制风格,如:线宽(笔触粗细),颜色,透明度和填充风格等,
    大体上可以分为两类,一类与图形绘制相关,一类与文本绘制相关。

    1.图形绘制

    setARGB(int a,int r,int g,int b) 设置绘制的颜色,a代表透明度,r,g,b代表颜色值 这个不多说了,还有两个类似的方法,将设置alpha和rgb分割开来了。注意的是这里的a值是0~255的范围,不是小数。
    setAlpha(int a) 设置绘制图形的透明度
    setColor(int color) 设置绘制的颜色,使用颜色值来表示,该颜色值包括透明度和RGB颜色。
    setAntiAlias(boolean aa) 设置是否使用抗锯齿功能,会消耗较大资源,绘制图形速度会变慢。
    setDither(boolean dither) 设定是否使用图像抖动处理,会使绘制出来的图片颜色更加平滑和饱满,图像更加清晰
    setFilterBitmap(boolean filter) 如果该项设置为true,则图像在动画进行中会滤掉对Bitmap图像的优化操作,加快显示速度,本设置项依赖于ditherxfermode的设置
    setMaskFilter(MaskFilter maskfilter) 设置MaskFilter,可以用不同的MaskFilter实现滤镜的效果,如滤化,立体等 MaskFilter 介绍
    setColorFilter(ColorFilter colorfilter) 设置颜色过滤器,可以在绘制颜色时实现不用颜色的变换效果 这个方法也值得试验一下:MaskFilter是对一个Paintalpha通道的转换,而ColorFilter则是对每一个RGB通道应用转换。所有由ColorFilter所派生的类在执行它们的转换时,都会忽略alpha通道。这个貌似比较麻烦,改天再说
    setPathEffect(PathEffect effect) 设置绘制路径的效果,如点画线等 又是一个很好玩的方法:到目前为止,所有的效应都会影响到Paint填充图像的方式;PathEffect是用来控制绘制轮廓(线条)的方式。PathEffect对于绘制Path基本图形特别有用,但是它们也可以应用到任何Paint中从而影响线条绘制的方式。使用PathEffect,可以改变一个形状的边角的外观并且控制轮廓的外表。Android包含了多个PathEffect,包括:1)CornerPathEffect 可以使用圆角来代替尖锐的角从而对基本图形的形状尖锐的边角进行平滑。2)DashPathEffect 可以使用DashPathEffect来创建一个虚线的轮廓(短横线/小圆点),而不是使用实线。你还可以指定任意的虚/实线段的重复模式。3) DiscretePathEffectDashPathEffect相似,但是添加了随机性。当绘制它的时候,需要指定每一段的长度和与原始路径的偏离度。4)PathDashPathEffect 这种效果可以定义一个新的形状(路径)并将其用作原始路径的轮廓标记。下面的效果可以在一个Paint中组合使用多个PathEffect。1)SumPathEffect 顺序地在一条路径中添加两种效果,这样每一种效果都可以应用到原始路径中,而且两种结果可以结合起来。2)ComposePathEffect 将两种效果组合起来应用,先使用第一种效果,然后在这种效果的基础上应用第二种效果。对象形状的PathEffect的改变会影响到形状的区域。这就能够保证应用到相同形状的填充效果将会绘制到新的边界中。使用setPathEffect方法可以把PathEffect应用到Paint对象中,如下所示:1 paint.setPathEffect(new CornerPathEffect(10));其他效果懒得测试了,这个在模拟器上跑的时候效果也不明显,但是真机上跑的时候的确圆滑了许多,看上去很舒服
    setShader(Shader shader) 设置图像效果,使用Shader可以绘制出各种渐变效果
    setShadowLayer(float radius ,float dx,float dy,int color) 在图形下面设置阴影层,产生阴影效果 radius为阴影的角度,dxdy为阴影在x轴和y轴上的距离,color为阴影的颜色
    setStyle(Paint.Style style) 设置画笔的样式,为FILL,FILL_OR_STROKE,或STROKE
    setStrokeCap(Paint.Cap cap) 当画笔样式为STROKEFILL_OR_STROKE时,设置笔刷的图形样式,如圆形样式Cap.ROUND,或方形样式Cap.SQUARE
    setSrokeJoin(Paint.Join join) 设置绘制时各图形的结合方式,如平滑效果等
    setStrokeWidth(float width) 当画笔样式为STROKEFILL_OR_STROKE时,设置笔刷的粗细度 ,单位为px
    setXfermode(Xfermode xfermode) 设置图形重叠时的处理方式,如合并,取交集或并集,经常用来制作橡皮的擦除效果 Xfermode 介绍

    2.文字绘制

    setFakeBoldText(boolean fakeBoldText) 模拟实现粗体文字,设置在小字体上效果会非常差
    setSubpixelText(boolean subpixelText) 设置该项为true,将有助于文本在LCD屏幕上的显示效果
    setTextAlign(Paint.Align align) 设置绘制文字的对齐方向
    setTextScaleX(float scaleX) 设置绘制文字x轴的缩放比例,可以实现文字的拉伸的效果
    setTextSize(float textSize) 设置绘制文字的字号大小,单位为px
    setTextSkewX(float skewX) 设置斜体文字,skewX为倾斜弧度
    setTypeface(Typeface typeface) 设置Typeface对象,即字体风格,包括粗体,斜体以及衬线体,非衬线体等
    setUnderlineText(boolean underlineText) 设置带有下划线的文字效果
    setStrikeThruText(boolean strikeThruText) 设置带有删除线的效果

    嵌套类

    1. Paint.Align ,设置字符位置,字符以坐标(x,y)为源点。
    2. Paint.Cap,线段断点形状(默认Paint.Cap.BUTT):
    3. Paint.FontMetrics,字体属性及测量。
      如需详细了解,请参考:
      Paint—FontMetrics - qq_20198405的博客 - 博客频道 - CSDN.NET
    4. Paint.FontMetricsInt
    5. Paint.Join,设置结合处的样子。
    6. Paint.Style,设置空心(默认Paint.Style.FILL);

    常量

    标记 说明
    ANTI_ALIAS_FLAG 抗锯齿的标志
    DEV_KERN_TEXT_FLAG
    DITHER_FLAG 使位图进行有利的抖动的位掩码标志
    FAKE_BOLD_TEXT_FLAG 文本仿粗体的标志
    FILTER_BITMAP_FLAG 使位图过滤的位掩码标志
    HINTING_OFF
    HINTING_ON
    LINEAR_TEXT_FLAG
    STRIKE_THRU_TEXT_FLAG 文本删除线的标志
    SUBPIXEL_TEXT_FLAG
    UNDERLINE_TEXT_FLAG 文字的下划线的标志

    构造方法

    Paint的构造方法有两种:

    Paint()Paint(int flags)Paint(Paint paint)

    setXXX()方法族:

    • set(Paint src):
      为当前画笔设置一个画笔,说白了就是把另一个画笔的属性设置Copy给我们的画笔。
    • setARGB(int a, int r, int g, int b):
      设置绘制的颜色,a代表透明度,r,g,b代表颜色值。
    • setAlpha(int a):
      设置绘制图形的透明度,设置范围是[0..255]。
    • setAntiAlias(boolean aa):
      消除锯齿(默认不消除锯齿)。
      不消除锯齿:
      这里写图片描述
      消除锯齿:
      这里写图片描述
    • setColor(int color):
      设置画笔颜色。
    • setColorFilter(ColorFilter filter):
      设置颜色过滤,这个方法需要我们传入一个ColorFilter参数同样也会返回一个ColorFilter实例。 如需详细了解,请参考:
      Paint—ColorFilter - qq_20198405的博客 - 博客频道 - CSDN.NET

    • setDither(boolean dither):
      设定是否使用图像抖动处理,会使绘制出来的图片颜色更加平滑和饱满,图像更加清晰
      这玩意用来设置我们在绘制图像时的抗抖动,也称为递色,那什么叫抗抖动呢?在Android中我确实不好拿出一个明显的例子,我就在PS里模拟说明一下:
      这里写图片描述
      大家看到的这张七彩渐变图是一张RGB565模式下图片,即便图片不是很大我们依然可以很清晰地看到在两种颜色交接的地方有一些色块之类的东西感觉很不柔和,因为在RGB模式下只能显示2^16=65535种色彩,因此很多丰富的色彩变化无法呈现,而Android呢为我们提供了抗抖动这么一个方法,它会将相邻像素之间颜色值进行一种“中和”以呈现一个更细腻的过渡色:
      这里写图片描述
      放大来看,其在很多相邻像素之间插入了一个“中间值”:
      这里写图片描述
      抗抖动不是Android的专利,是图形图像领域的一种解决位图精度的技术。

    • setFakeBoldText(boolean fakeBoldText):
      设置文本仿粗体。注意设置在小字体上效果会非常差。
    • setFilterBitmap(boolean filter):
      如果该项设置为true,则图像在动画进行中会滤掉对Bitmap图像的优化操作,加快显示速度,本设置项依赖于dither和xfermode的设置。
    • setFlags(int flags):
      设置标志,还是对paint进行样式的设置。比如
     // 实例化画笔并打开抗锯齿
    mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
    • setHinting(int mode):
      设置画笔的隐藏模式。可以是 HINTING_OFF or HINTING_ON之一。
    • setLinearText(boolean linearText):
      设置是否打开线性文本标识,这玩意对大多数人来说都很奇怪不知道这玩意什么意思。想要明白这东西你要先知道文本在Android中是如何进行存储和计算的。在Android中文本的绘制需要使用一个bitmap作为单个字符的缓存,既然是缓存必定要使用一定的空间,我们可以通过setLinearText (true)告诉Android我们不需要这样的文本缓存。
    • setMaskFilter(MaskFilter maskfilter):
      这个方法可以用来对图像进行一定的处理,实现滤镜的效果,如滤化,立体等。 如需详细了解,请参考:
      Paint—MaskFilter(面具) - qq_20198405的博客 - 博客频道 - CSDN.NET

    • setPathEffect(PathEffect effect):设置绘制路径时的路径效果(ComposePathEffect, CornerPathEffect, DashPathEffect, DiscretePathEffect, PathDashPathEffect, SumPathEffect),如点画线等 。 如需详细了解,请参考:
      Paint—PathEffect(路径效果) - qq_20198405的博客 - 博客频道 - CSDN.NET

    • setRasterizer(Rasterizer rasterizer):
      设置光栅,光栅这东西涉及太多太多物理知识。该方法同样不支持HW在API 21中被遗弃了,所以不推荐使用。
    • setShader(Shader shader):
      设置画笔的填充效果(BitmapShader, ComposeShader, LinearGradient, RadialGradient, SweepGradient),使用Shader可以绘制出各种渐变效果。如需详细了解,请参考:
      Paint—Shader - qq_20198405的博客 - 博客频道 - CSDN.NET
    • setShadowLayer(float radius, float dx, float dy, int color):
      radius表示阴影的扩散半径;dx和dy表示阴影平面上的偏移值;shadowColor就不说了阴影颜色。
      注意: 这个方法不支持硬件加速,所以我们要测试时必须先关闭硬件加速。
    • setStrikeThruText(boolean strikeThruText):
      设置文本删除线。
    • setStrokeCap(Paint.Cap cap):
      设置线段断点形状(默认Paint.Cap.BUTT)
      Paint.Cap.BUTT : 不多不少
      这里写图片描述
      Paint.Cap.ROUND : 多了一个圆头
      这里写图片描述
      Paint.Cap.SQUARE:多了一个方头
      这里写图片描述
    • setStrokeJoin(Paint.Join join):
      设置画笔转弯处的连接风格(BEVEL-直线、MITER -锐角、ROUND-圆弧 )。
    • setStrokeMiter(float miter):
      设置画笔倾斜度。
    • setStrokeWidth(float width):
      当画笔样式为STROKE或FILL_OR_STROKE时,设置笔刷的粗细度。
    • setStyle(Paint.Style style):
      设置空心(默认Paint.Style.FILL)
      Paint.Style.FILL :填充内部
      这里写图片描述
      Paint.Style.STROKE :仅描边
      这里写图片描述
      Paint.Style.FILL_AND_STROKE :填充内部和描边
      这里写图片描述
      再来一张更详细的图:
      这里写图片描述
    • setSubpixelText(boolean subpixelText):
      设置自像素。如果该项为true,将有助于文本在LCD屏幕上的显示效果。
    • setTextAlign(Paint.Align align):
      设置字符位置,字符以坐标(x,y)为源点。

    center表示字符在水平方向上以x中心向左右两边延伸,在垂直方向以y为起点向下延伸;
    left表示字符在水平方向上以x为起点向右延伸,在垂直方向上以y为起点向下延伸;
    right表示字符在水平方向上以x为起点向左延伸,在垂直方向上以y为起点向下延伸。
    这里写图片描述

    • setTextLocale(Locale locale):
      设置地理位置,这里如果你要使用,直接传入Locale.getDefault()即可。它用来设置文本的区域比如中文、日文等。
    • setTextScaleX(float scaleX):
      设置绘制文字x轴的缩放比例,可以实现文字的拉伸的效果。
    • setTextSize(float textSize):
      设置绘制文字的字号大小。
    • setTextSkewX(float skewX):
      设置斜体文字,skewX为倾斜弧度。这个倾斜值没有具体的范围,但是官方推崇的值为-0.25可以得到比较好的倾斜文本效果,值为负右倾值为正左倾,默认值为0。
    • setTypeface(Typeface typeface):
      设置字体类型和样式,上面我们也使用过,Android中字体有四种样式:BOLD(加粗),BOLD_ITALIC(加粗并倾斜),ITALIC(倾斜),NORMAL(正常);而其为我们提供的字体有五种:DEFAULT,DEFAULT_BOLD,MONOSPACE,SANS_SERIFSERIF,这些什么类型啊、字体啊之类的都很简单大家自己去试试就知道就不多说了。 如需详细了解,请参考:
      Paint—Typeface - qq_20198405的博客 - 博客频道 - CSDN.NET
    • setUnderlineText(boolean underlineText):
      设置文字的下划线。
    • setXfermode(Xfermode xfermode):
      设置图像的混合模式,详细使用方式请参考:
      Paint—PorterDuffXfermode - qq_20198405的博客 - 博客频道 - CSDN.NET
      Paint—Xfermode、 PixelXorXfermode - qq_20198405的博客 - 博客频道 - CSDN.NET

    getXXX()方法族:

    • getAlpha()
    • getColor()
    • getColorFilter()
    • getFillPath(Path src, Path dst)
    • getFlags()
    • getFontMetrics(Paint.FontMetrics metrics):
      这个和我们之前用到的getFontMetrics()相比多了个参数,getFontMetrics()返回的是FontMetrics对象,而getFontMetrics(Paint.FontMetrics metrics)返回的是文本的行间距,如果metrics的值不为空则返回FontMetrics对象的值。
    • getFontMetrics():得到一个FontMetrics对象,返回对象中的参数都是float。
    • getFontMetricsInt():返回对象中的参数都是int。
    • getFontMetricsInt(Paint.FontMetricsInt fmi)
    • getFontSpacing():返回字符行间距。
    • getHinting()
    • getMaskFilter()
    • getPathEffect()
    • getRasterizer()
    • getShader()
    • getStrokeCap()
    • getStrokeJoin()
    • getStrokeMiter()
    • getStrokeWidth()
    • getStyle()
    • getTextAlign()
    • getTextBounds(char[] text, int index, int count, Rect bounds)
    • getTextBounds(String text, int start, int end, Rect bounds)
    • getTextLocale()
    • getTextPath(String text, int start, int end, float x, float y, Path path)
    • getTextPath(char[] text, int index, int count, float x, float y, Path path)
    • getTextScaleX()
    • getTextSize()
    • getTextSkewX()
    • getTextWidths(String text, float[] widths)
    • getTextWidths(CharSequence text, int start, int end, float[] widths)
    • getTextWidths(String text, int start, int end, float[] widths)
    • getTextWidths(char[] text, int index, int count, float[] widths)
    • getTypeface()
    • getXfermode()

    isXXX()方法族:

    • isAntiAlias()
    • isDither()
    • isFakeBoldText()
    • isFilterBitmap()
    • isLinearText()
    • isStrikeThruText()
    • isSubpixelText()
    • isUnderlineText()

    其他方法:

    • ascent():返回上坡度的值。
    • descent():返回下坡度的值。
    • clearShadowLayer()

    • breakText(CharSequence text, int start, int end, boolean
      measureForwards, float maxWidth, float[] measuredWidth)

    • breakText(String text, boolean measureForwards, float maxWidth,
      float[] measuredWidth)
    • breakText(char[] text, int index, int count, float maxWidth, float[]
      measuredWidth)

      • 这三个方法让我们设置一个最大宽度,在不超过这个宽度的范围内返回实际测量值否则停止测量。
    text 表示我们的字符串;
    start 表示从第几个字符串开始测量;
    end 表示从测量到第几个字符串为止;
    measureForwards 表示向前还是向后测量;
    maxWidth 表示一个给定的最大宽度在这个宽度内能测量出几个字符;
    measuredWidth 为一个可选项,可以为空,不为空时返回真实的测量值

    这些方法在一些结合文本处理的应用里比较常用,比如文本阅读器的翻页效果,我们需要在翻页的时候动态折断或生成一行字符串,这就派上用场了~

    • measureText(String text)
    • measureText(CharSequence text, int start, int end)
    • measureText(String text, int start, int end)
    • measureText(char[] text, int index, int count)
      • 测量文本宽度,上面我们已经使用过了,这四个方法都是一样的只是参数稍有不同罢了。
    • reset()::恢复画笔到默认配置。

    源码下载
    ApiDemo下载
    博客中用到的网格插件

    引用:
    Android画图Path的使用 - tt_mc - 博客园
    (转)【Android】Paint的效果研究 - wpf814533631 - ITeye技术网站
    自定义控件其实很简单1/4 - AigeStudio - 博客频道 - CSDN.NET
    android paint cap join 理解 图示 - Android移动开发技术文章_手机开发 - 红黑联盟
    android Graphics(一):概述及基本几何图形绘制 - harvic - 博客频道 - CSDN.NET
    Android笔记二十八.Android绘图深度解析-android-爱编程
    用TextPaint来绘制文字 - developer_Kale - 博客园

    其他:
    详解Paint的各种set方法 - 推酷

    展开全文
  • Paint Mix

    2017-04-10 08:56:23
    More specifically, in each iteration you first pour C cups of paint from the black pail into the white pail (and thoroughly mix the paint in the white pail), then pour C cups of paint from the white ...
  • Paint练习

    2019-10-03 12:59:25
    Paint paint=new Paint(); paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth(10); paint.setColor(Color.BLUE); paint.setTextSize(100); canvas...
    
    
     Paint paint=new Paint();
            paint.setStyle(Paint.Style.STROKE);
            paint.setStrokeWidth(10);
            paint.setColor(Color.BLUE);
            paint.setTextSize(100);
            canvas.drawCircle(50,50,20,paint);
            canvas.drawRect(100,300,300,500,paint);
            canvas.drawLine(0,0,100,100,paint);
            canvas.drawText("apple",100,200,paint);
            canvas.drawLine(0,200,500,200,paint);
            canvas.drawBitmap(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher),100,300,paint);

     

    转载于:https://www.cnblogs.com/SkyLeo/p/6361397.html

    展开全文
  • Paint API

    2019-09-28 10:29:54
    // paint恢复为默认设置。 paint.reset(); // 从src目录中装载一种画笔的样式 paint.set(src); // 设置画笔的透明度 paint.setAlpha(a); // 设置画笔的抗锯齿情况,使画笔更为圆滑 ...
            // paint恢复为默认设置。
            paint.reset();
    
            // 从src目录中装载一种画笔的样式
            paint.set(src);
    
            // 设置画笔的透明度
            paint.setAlpha(a);
    
            // 设置画笔的抗锯齿情况,使画笔更为圆滑
            paint.setAntiAlias(aa);
    
            // 设个画笔的ARGB颜色色值
            paint.setARGB(a, r, g, b);
    
            // 设置画笔的颜色
            paint.setColor(color);
    
            // 设置画笔的过滤器
            paint.setColorFilter(filter);
    
            // 设置清除抖动对图像的影响,会使绘制出来的图片图像更加清晰,颜色更加平滑和饱满.
            paint.setDither(dither);
    
            // 设置粗体文字,注意设置在小字体上效果会非常差
            paint.setFakeBoldText(fakeBoldText);
    
            // 如果该项设置为true,则图像在动画进行中会滤掉对Bitmap图像的优化操作,加快速度显示
            // 注意:本设置项依赖于dither和xfermode的设置
            paint.setFilterBitmap(filter);
    
            // 给画笔做上标记,以便直接复用
            paint.setFlags(flags);
    
            // 设置画笔的隐藏模式
            paint.setHinting(mode);
    
            // 设置线性文本
            paint.setLinearText(linearText);
    
            // 设置MaskFilter,可以用不同的MaskFilter实现滤镜的效果,如滤化,立体等
            paint.setMaskFilter(maskfilter);
    
            // 设置绘制路径的效果,如点画线等
            paint.setPathEffect(effect);
    
            // 设置或清除的光栅对象。
            // 通过空清除任何以前的光栅化。为方便起见,传递的参数也回来了。
            paint.setRasterizer(rasterizer);
    
            // 设置或清除渲染对象。
            // 通过空清以前的任何材质。为方便起见,传递的参数也回来了。
            paint.setShader(shader);
    
            // 这原图层下面设置阴影层,产生阴影效果,radius为阴影的角度,dx和dy为阴影在x轴和y轴上的距离,color为阴影的颜色。如果半径为0,然后一层阴影去除。
            paint.setShadowLayer(radius, dx, dy, color);
    
            // 设置画笔带有删除线效果的
            paint.setStrikeThruText(strikeThruText);
    
            // 当画笔样式为STROKE或FILL_OR_STROKE时,设置笔刷的图形样式,如圆形样式
            // Cap.ROUND,或方形样式Cap.SQUARE
            paint.setStrokeCap(cap);
    
            // 设置笔画的倾斜度
            paint.setStrokeMiter(miter);
    
            // 设置画笔结合处的样式,Miter:结合处为锐角, Round:结合处为圆弧:BEVEL:结合处为直线。
            paint.setStrokeJoin(join);
    
            // 当画笔是空心样式时,设置画笔空心的宽度
            paint.setStrokeWidth(width);
    
            // 设置画笔的样式
            // Paint.Style.FILL(实心);
            // Paint.Style.STROKE(空心);
            // Paint.Style.FILL_AND_STROKE
            paint.setStyle(Paint.Style.FILL_AND_STROKE);
    
            // 设置该项为true,将有助于文本在LCD屏幕上的显示效果
            paint.setSubpixelText(subpixelText);
    
            // 设置绘制文字的对齐方向
            paint.setTextAlign(align);
    
            // 设置文本的区域比如中文、日文等
            paint.setTextLocale(locale);
    
            // 设置画笔文本的缩放比例
            paint.setTextScaleX(scaleX);
    
            // 设置画笔文本的大小
            paint.setTextSize(textSize);
    
            // 设置斜体文字,skewX为倾斜弧度
            paint.setTextSkewX(skewX);
    
            // 设置Typeface对象,即字体风格,包括粗体,斜体以及衬线体,非衬线体等
            paint.setTypeface(typeface);
            
            //设置带有下划线的文字效果 
            paint.setUnderlineText(underlineText);
            
            //设置图形重叠时的处理方式,如合并,取交集或并集,经常用来制作橡皮的擦除效果  
            paint.setXfermode(xfermode);

            // 1.基准点是baseline
            // 2.ascent:是baseline之上至字符最高处的距离
            // 3.descent:是baseline之下至字符最低处的距离
            paint.ascent();
            paint.descent();
    
            // 清除透明阴影层。
            paint.clearShadowLayer();
    
            // 获取画笔透明度
            paint.getAlpha();
    
            // 获取画笔颜色
            paint.getColor();
    
            // 获取画笔过滤器
            paint.getColorFilter();
    
            // 获取
            paint.getFillPath(src, dst);
    
            // 获取该笔的标志,
            paint.getFlags();
    
            // 测量字体的大小
            paint.getFontMetrics();
            paint.getFontMetrics(metrics);
            paint.getFontMetricsInt();
            paint.getFontMetricsInt(fmi);
    
            // 获取字体的间距
            paint.getFontSpacing();
    
            // 返回画笔的隐藏模式。返回hinting_off或hinting_on。
            paint.getHinting();
    
            // 获取maskfilter对象
            paint.getMaskFilter();
    
            // 获取patheffect对象
            paint.getPathEffect();
    
            // 获取油漆的光栅化(或NULL)。
            // 光栅控制/修改/文本路径如何变成透明遮罩。
            paint.getRasterizer();
            
            //获取shader对象
            paint.getShader();
            
            //获取Cap实例控制如何开始和结束的抚摸线和路径的处理
            paint.getStrokeCap();
            paint.getStrokeJoin();
            
            //获取画笔的斜角
            paint.getStrokeMiter();
            
            //获取画笔宽度
            paint.getStrokeWidth();
            
            //返回画笔的样式
            paint.getStyle();
    
            //获取文本的其实位置
            paint.getTextAlign();
            
            //返回文字的边界
            paint.getTextBounds(text, index, count, bounds);
            paint.getTextBounds(text, start, end, bounds);
            
            //返回文字的区域
            paint.getTextLocale();
            
            //返回文字的路径
            paint.getTextPath(text, index, count, x, y, path);
            paint.getTextPath(text, start, end, x, y, path);
            
            //返回X轴文字的缩放
            paint.getTextScaleX();
            
            //返回文字的大小
            paint.getTextSize();
            
            //返回文字的倾斜度
            paint.getTextSkewX();
            
            //返回文字的宽度
            paint.getTextWidths(text, widths);
            paint.getTextWidths(text, index, count, widths);
            paint.getTextWidths(text, start, end, widths);
            paint.getTextWidths(text, start, end, widths);
            
            //设定一个最大宽度,在不超过这个宽度的话返回实际测量值,超过则停止测量
            paint.breakText(text, measureForwards, maxWidth, measuredWidth);
            paint.breakText(text, index, count, maxWidth, measuredWidth);
            paint.breakText(text, start, end, measureForwards, maxWidth, measuredWidth);
    
            //返回typeface对象,对文字进行字体绘制或测量文本
            paint.getTypeface();
            
            //返回getXfermode对象
            paint.getXfermode();
    
            paint.isAntiAlias();
            paint.isDither();
            paint.isFakeBoldText();
            paint.isFilterBitmap();
            paint.isLinearText();
            paint.isStrikeThruText();
            paint.isSubpixelText();
            paint.isUnderlineText();
    
            //对文字进行测量
            paint.measureText(text);
            paint.measureText(text, index, count);

     

    转载于:https://www.cnblogs.com/huyang011/p/7476774.html

    展开全文
  • 通过前面的文章初识mapbox GL我们对mapbox GL有了一个相对比较全面的认识,本节结合一些示例,重点讲述一下mapbox GL里面的filter和paint的用法。 说明 本文中的示例数据源是北京的区边界数据,格式为geojson,数据...

    概述

    通过前面的文章初识mapbox GL我们对mapbox GL有了一个相对比较全面的认识,本节结合一些示例,重点讲述一下mapbox GL里面的filter和paint的用法。

    说明

    本文中的示例数据源是北京的区边界数据,格式为geojson,数据字段与详情如下:
    示例数据

    filter

    filter是layer里面的一个属性,通过一些条件表达式实现仅显示与过滤器匹配的要素,即图层的过滤显示,其官方说明如下图:
    filter

    1、==和!=

    ==!=可实现根据某个字段图层的过滤展示。如:只在地图上展示昌平区或者在地图上展示除昌平外的所有区域。

    // 只在地图上展示昌平区
    var filter = ['==', 'name', '昌平区'];
    
    //地图上展示除昌平外的所有区域
    var filter = ['!=', 'name', '昌平区'];
    

    ['==', 'name', '昌平区']
    ['!=', 'name', '昌平区']

    2、>、>=、<、<=

    >、>=、<、<=是通过比较大小的方式,实现图层的过滤,所以此处需要的字段得是数字类型或者通过to-number将字段转换成数字类型。如:展示count>=10的区域。

    var filter = ['>=', 'count', 10];
    

    ['>=', 'count', 10]

    3、in和match

    inmatch都可实现对图层根据某个字段进行多值过滤。如:在地图上展示昌平区和海淀区。

    // in 
    var filter = [
      'in', 
      'name',
      '昌平区',
      '海淀区'
    ];
    // match
    var filter = [
      "match",
      [
        "get",
        "name"
      ],
      [
        "昌平区",
        "海淀区",
      ],
      true,
      false
    ]
    

    in和match

    接着上面的例子,如果我们要实现在地图中展示除海淀和昌平区外的其他区域,我们可以直接用!in和将match的条件互换的方式来实现,如下:

    // in 
    var filter = [
      '!in', 
      'name',
      '昌平区',
      '海淀区'
    ];
    // match
    var filter = [
      "match",
      [
        "get",
        "name"
      ],
      [
        "昌平区",
        "海淀区",
      ],
      false,
      true
    ]
    

    !in和match

    4、多条件

    有时候,会存在多条件的过滤,例如:我们选择type==1并且count>10的区域,我们可以这么写:

    var filter = [
      'all',
      ['>=', 'count', 10],
      ['==', 'type', 1]
    ]
    

    多条件过滤

    当然,有时我们会存在根据几何类型来进行过滤,此时,我们可用:

    var filter = [
        "==",
        ["geometry-type"],
        "LineString"
      ];
    

    paint

    paint是layer的一个属性,负责图层的渲染与呈现。

    1、match

    match通常用于枚举型的字段渲染,如唯一值渲染。

    'circle-color': [
     'match',
     ['get', 'type'],
     1, '#FFD273',
     2, '#E86D68',
     '#A880FF'
    ]
    

    match

    2、case

    case通常用于分段数值型的字段渲染,值域是前关后开,如分级渲染。

    'circle-color': [
      'case',
      ['<', ['get', 'speed'], 10.8], 'rgba(0,0,0,0)', //<10.8
      ['<', ['get', 'speed'], 17.2], 'rgba(153, 255, 153, .9)', //>=10.8 & <17.2
      ['<', ['get', 'speed'], 24.5], 'rgba(102, 204, 255, .9)',
      ['<', ['get', 'speed'], 32.7], 'rgba(255, 255, 102, .9)',
      ['<=', ['get', 'speed'], 41.5], 'rgba(253, 139, 0, .9)',
      ['<=', ['get', 'speed'], 50.1], 'rgba(255, 51, 0, .9)', //>=41.5 & <50.1
      'rgba(255, 0, 255, .9)' // 默认值, >=50.1
    ]
    

    注意

    1. 第一个的判断是<;
    2. 中间的判断是>=<;
    3. 最后一个判断是>=;
      case

    3、step

    step和上面的case很类似,只是值域是前开后关的。

    // <=100, 100-500, >500
    "circle-color": [
      "step",
      ["get", "count"],
      "#51bbd6", 100,
      "#f1f075", 500,
      "#f28cb1" // other
    ]
    
    'circle-color': [
      'step',
      ['to-number', ['get', 'CID']],
      '#0098A3',  10, 
      '#00CA8D', 20, 
      '#37C508', 30, 
      '#98F300',  40, 
      '#EFFF85'
    ]
    

    说明:

    1. 对于非数值型的字段,我们可以用to-number对字段进行转换。
      step

    4、interpolate

    interpolate,中文的翻译是“插值”,在mapbox GL中,我们可通过interpolate实现按照比例的插值渲染。

    // <=8, 8-10, >10
    "background-color": [
      "interpolate",
      ["linear"],
      ["zoom"],
      8, "rgba(0, 0, 255, 0.2)",
      10, "rgba(255, 0, 0, 0.2)"
    ]
    
    // <=20, 20-60, 60-100, >100
    'fill-extrusion-color': [
      'interpolate',
      ['linear'],
      ['get', 'height'],
      20, 'rgba(255,255,191, 0.65)',
      60, 'rgba(253,174,97, 0.65)',
      100, "rgba(215,25,28, 0.65)"
    ]
    
    // exponential,指数
    "fill-opacity": [
      "interpolate",
      ["exponential", 1.5],
      ["zoom"],
      2, 0.3,
      7, 0
    ]
    

    说明:

    1. zoom是一个特殊字符,特制地图的缩放级别,同样的还有geometry-type,特指的是geom类型。
      interpolate

    完整测试代码如下:

    var rootPath = 'http://127.0.0.1:3000/mapbox/lib/';
    // var filter = ['match', ['get', 'name'],
    //   ['昌平区', '海淀区'], false, true
    // ];
    // var filter = ['!in', 'name', '昌平区', '海淀区'];
    
    // var filter = [
    //   'all',
    //   ['>=', 'count', 10],
    //   ['==', 'type', 1]
    // ];
    
    var filter = ['>=', 'count', 0];
    // var fillColor = 'rgba(255, 0, 0, 0.5)';
    
    // 唯一值图
    // var fillColor = [
    //   'match',
    //   ['get', 'type'],
    //   1, '#FFD273',
    //   2, '#E86D68',
    //   '#A880FF'
    // ];
    
    // 分级色彩图
    // var fillColor = [
    //   'case',
    //   ['<', ['get', 'count'], 10], '#FFD273',
    //   ['<', ['get', 'count'], 20], '#E86D68',
    //   ['<', ['get', 'count'], 30], '#A880FF',
    //   ['<', ['get', 'count'], 40], '#68E0E8',
    //   ['<=', ['get', 'count'], 50], '#9BFF69',
    //   '#000' // 默认值
    // ];
    
    // 比例符号图
    var fillColor = [
      'interpolate',
      ['linear'],
      ['get', 'count'],
      15, '#FFD273',
      30, '#E86D68',
      50, '#9BFF69'
    ];
    
    // 步长图
    // var fillColor = [
    //   'step',
    //   ['get', 'count'],
    //   '#0098A3',
    //   10, '#00CA8D',
    //   20, '#37C508',
    //   30, '#98F300',
    //   40, '#EFFF85'
    // ]
    var mapStyle = {
      "version": 8,
      "name": "Dark",
      "sources": {
        "geojson": {
          type: 'geojson',
          data: '../data/beijing.geojson'
        }
      },
      "glyphs": rootPath + "fonts/mapbox/{fontstack}/{range}.pbf",
      "layers": [{
          "id": "background",
          "type": "background",
          "paint": {
            "background-color": "#999"
          }
        },
        {
          'id': 'geojson',
          'source': 'geojson',
          'type': 'fill',
          'paint': {
            'fill-color': fillColor,
            'fill-opacity': .8
          },
          filter: filter
        },
        {
          'id': 'geojson-border',
          'source': 'geojson',
          'type': 'line',
          'paint': {
            'line-color': '#FFF',
            'line-width': 1.5
          },
          filter: filter
        },
        {
          'id': 'points',
          'type': 'symbol',
          'source': 'geojson',
          'layout': {
            'text-field': ['get', 'name'],
            "text-size": 22
          },
          paint: {
            'text-color': '#000000'
          },
          filter: filter
        }
      ]
    };
    map = new mapboxgl.Map({
      container: 'map',
      maxZoom: 18,
      minZoom: 6,
      zoom: 8,
      center: {
        lng: 116.6552,
        lat: 40.2482
      },
      style: mapStyle,
      attributionControl: false,
      localIdeographFontFamily: "'全新硬笔行书简'"
    });
    
    展开全文
  • Paint in 3D 1.6.3

    2018-12-19 13:12:37
    2018.12.5号最新发布的paint in 3D 插件。比旧版更新了很多实用功能。
  • Android Paint详解

    2017-09-01 11:03:01
    Android Paint详解 Android 自定义View之Canvas相关方法说明 Android 自定义View实例(验证码) Android 自定义View实例(进度圆环) Android 源码分析(TextView) Android 自定义View分发流程 Android
  • Flutter 绘制Paint

    千次阅读 2019-08-31 10:40:17
    Flutter 的绘制主要涉及两个Widget: CustomPainter, CustomPaint CustomPainter:提供画布的组件; 有几个主要的参数: a. painter : 绘制的对象,是一个CustomPaint。它的绘制是在children之前。...
  • Android Paint

    千次阅读 2019-02-22 17:48:07
    1. Paint常用方法 setColor(int),设置画笔的颜色 setAlpha(int),设置画笔的透明度 setARGB(int a, int r, int g, int b),设置画笔的颜色,a代表透明度,r,g,b代表颜色值 setAntiAlias...
  • Android Paint 详细讲解

    千次阅读 2019-10-15 20:14:52
    文章目录1、简介2、Paint 类常用方法介绍1)setColor() 设置颜色2) setStrokeWidth() 设置宽度3)setAntiAlias(true) 抗齿距4) setAlpha() 设置画笔透明度5)setARGB() 设置透明度 和 颜色6) setStyle() ...
  • paint初始化地时候是这么设置的: paint.setStyle(Paint.Style.STROKE); 别的地方也没有对paint继续style的设置 但是在drawPath的过程中被设置成Fill 这种状况很不确定(部分机子会出现) 不知道是为什么 求解
  • 画笔Paint及模拟画图工具

    千次阅读 2020-11-20 19:02:40
    画笔:Piant 学习Piant的时候我记得当时学习...package 狂神说__Paint; import java.awt.*; public class TestPaint { public static void main(String[] args) { new MyPaint().loadFrame(); } } class MyPaint e
  • Flutter 画笔(Paint) 根据坐标点 绘制曲线图

    千次阅读 多人点赞 2020-09-01 14:14:49
    丈夫志四海,万里犹比邻。——曹植 绘制范围(x、y轴最大或最小偏移量) class MyApp extends StatelessWidget { // This widget is the root of your application. @override ... theme.
  • paint的属性

    2019-03-07 17:58:42
    paint.setStyle(Paint.Style.FILL);填充 paint.setStyle(Paint.Style.STROLL);描边 创建水波纹的效果。就是不断的减少画笔的宽度。 使用paint.setStrokeWidth(); //线帽 也就是笔尖的形状 paint.setStrokeCap(Paint...
  • Canvas&Paint[]Paint

    千次阅读 2017-08-25 11:11:38
    【参考链接】 Xfermode篇https://segmentfault.com/a/1190000006753544 androidcanvas layer (图层)详解与进阶...  画布用于控制形状。而画笔用于控制样式。   setStyle 设置是Fill、Stroke还
  • Android Paint Style

    2019-02-14 12:58:12
    Paint.Style.STROKE 只绘制图形轮廓(描边)  Paint.Style.FILL 只绘制图形内容  Paint.Style.FILL_AND_STROKE 既绘制轮廓也绘制内容 private static final String DRAW_TEXT = "一二三四"; private...
  • 上一篇说了自定义view的坐标系以及view 的使用,下面说下自定义view Paint 的使用 Paint 相对于画笔 ,可以使用Paint 来决定画的内容的颜色,边距粗细,设置样式,字体大小 ,等等 Paint 是和Canvas结合使用的,就...
  • Paint介绍

    2017-08-24 20:19:03
    欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和流程图 ...
  • 自定义组件:自定义类MyView继承View,Paint画笔画的长方形绿色 我想在使用MyView组件的Activity控制长方形的颜色,不通过重绘,有什么方法修改长方形画笔颜色? public MyView extends View{ public MyView...
  • 画布有update、repaint、paint三个方法,一般重写paint方法。现在我想在paint中加一个判断,是否重置画布,只有重置时才刷新整个画布,否则在原有基础上继续画,但这样出现了一个问题,其它弹出的组件会在画布上留下...
  • Paint 使用

    2017-08-06 17:53:48
    Paint 用法先申明一下,这个只是自己想对paint有个整体滴认识,所以才整理出来滴,里面的链接其实都是同一个, 比较难滴地方,都是参考这个大神滴文章来进行滴。。。 看到这里,已经实现了引流,哈哈哈,你们可以去...

空空如也

1 2 3 4 5 ... 20
收藏数 20,502
精华内容 8,200
关键字:

paint