首页
学习
活动
专区
圈层
工具
发布

Android开发笔记(九十八)往图片添加部件

最后结束添加,从布局容器的绘图缓存中获取位图,并保存为图片文件。获取位图后要注意两点: 1、先禁用布局容器的绘图缓存,这是为了清空绘图缓存,不然下次截图还是上次的位图;再启用布局容器的绘图缓存。...2、禁用绘图缓存的操作要延时执行,因为禁用绘图缓存会回收位图资源,如果这时在页面上展示该位图,就会报错位图已回收。 下面是给图片添加文本的效果截图: ?...,即添加部件图像的ImageView。...在高级使用场合,还得考虑能够回退写坏了的笔画,这需要建个路径数组,把签名每个步骤的路径都保存下来,在回退时就能按顺序依次回退。 另外一个值得注意的地方,是如何把画布清空。...如果仅仅画上透明背景,等于没画;要想真正清空,还得设置绘图模式为Mode.CLEAR。

1.1K30

android 绘图之Paint的效果研究

方法二: 设置是否使用抗锯齿功能,会消耗较大资源,绘制图形速度会变慢。...2)DashPathEffect  可以使用DashPathEffect来创建一个虚线的轮廓(短横线/小圆点),而不是使用实线。你还可以指定任意的虚/实线段的重复模式。...,这个在模拟器上跑的时候效果也不明显,但是真机上跑的时候的确圆滑了许多,看上去很舒服 方法七: //设置图形重叠时的处理方式,如合并,取交集或并集,经常用来制作橡皮的擦除效果setXfermode(Xfermode...3)PorterDuffXfermode  这是一个非常强大的转换模式,使用它,可以使用图像合成的16条Porter-Duff规则的任意一条来控制Paint如何与已有的Canvas图像进行交互。...要应用转换模式,可以使用setXferMode方法,如下所示: AvoidXfermode avoid = new AvoidXfermode(Color.BLUE, 10, AvoidXfermode.Mode

93900
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Android高级开发-APK极致优化

    SVG(Scalable Vector Graphics)可缩放矢量图 使用矢量图代替位图可以减小 APK 的尺寸,因为可以针对不同屏幕密度调整同一文件的大小,而不会降低图像质量。...之后,二者的内存使用率和性能则不相上下。我们建议您将矢量图像限制为最大 200 x 200 dp;否则,绘制它可能需要耗费很长的时间。...ContextCompat.getColorStateList(this, R.color.custom_tint)); DrawableCompat.setTintMode(tintlistDrawable, PorterDuff.Mode.MULTIPLY...R.id.colorfilter); colorfilterImg.setColorFilter(new PorterDuffColorFilter(Color.parseColor("#ccffcc"), PorterDuff.Mode.MULTIPLY...资源压缩 developer.android.google.cn/studio/buil… gradle属性 shrinkResources 对无用资源压缩 将无用的图片改成占位图,无用的xml改成空根文件

    1.3K40

    【Linux】缓冲区和文件系统

    语言的缓冲区,而是直接打印 (四)有换行无return的C接口打印 我们再来看一组程序 这个程序和(二)程序的区别就只有换行,这告诉我们,C语言缓冲区对于显式器是行缓冲的,C语言标准库的文件流有三种缓冲模式...)时,会自动刷新缓冲区,将缓冲区中的数据写入对应的设备或文件,某些情况下即使没有换行符,缓冲区满时也会刷新 无缓冲 _IONBF :标准错误输出通常默认是无缓冲的,确保错误信息能够立即显示,在无缓冲模式下...inode Bitmap 我们通过位图来和inode一一对应,位图上对应的比特位为0,那么该inode就没有被使用,可以被分配,如果为1则被占用,当从1变为0时,该inode又可以被分配了,其实这个过程就是一个删除的过程...,换而言之,删除恒等于可以被覆盖 (四)块位图 Block Bitmap 我们通过位图来和数据块page一一对应,位图上对应的比特位为0,那么该页page就没有被使用,可以被分配,如果为1则被占用,当从...Block 超级块是文件系统的核心,记录了文件系统的全局信息,如块大小、inode 数量、空闲块数量等,为了防止超级块损坏导致文件系统无法使用,每个块组中可能会包含超级块的副本,不过并非所有块组都有

    16310

    【Android 应用开发】Paint 图形组合 Xfermod 简介 ( 图形组合集合描述 | Xfermod 简介 | PorterDuff 简介 )

    文章目录 图形组合 集合描述 Xfermod 简介 PorterDuff 由来 Xfermod 合成模式分类 图形组合 集合描述 图形组合 集合描述 : 1.下面我们先描述两个集合 : ①...AvoidXfermode : 已过时 , 不支持硬件加速 , 不再研究 ; ② PixelXorXfermode : 已过时 , 不在研究 ; ③ PorterDuffXfermode : 该图形组合模式是目前使用的主流方式..., 也是唯一方式 , 下面详细讲述该类型的图形组合 ; ---- PorterDuff 由来 PorterDuff 由来 : 1.重要论文 : Thomas Porter ( 托马斯 \cdot...( 汤姆 \cdot 达夫 ) 在 1984年 发表的一篇具有重大意义的论文 , 其名称是 “Compositing Digital Images” ( 组合数字图像 ) ; 2.名称由来 : PorterDuff...) ; 2.混合合成模式 : ① 不被 Alpha 通道约束 : 这些模式同样定义了 源 和 目标 的合成结果 , 但其结果不被 Alpha ( 透明度 ) 通道约束 ; ② 为了方便起见 , PorterDuff

    1.3K30

    PorterDuff采坑记

    什么是 PorterDuff porterduff 并不是Android 特有的概念,我们看一下 porterduff 的 wikipedua, 它是 1984 年由 ThomasPorter 和 TomDuff...合成的模式大致有透明度合成模式和混合模式,这些在官网上有具体的介绍。在官方文档中,每个模式都会附带 2 个公式来计算输出部分的透明度和颜色。 其中 α 表示 alpha,C 表示 color。...至于每种模式,可以参考下面这张广为流传的图: 实践 效果是下面的,dest是蓝色的圆形,宽高是100*100, src是红色的矩形,宽高是 100 * 30。...init { setLayerType(LAYER_TYPE_HARDWARE, null) } bitmap,刚开始使用 porterDuff的时候,很想当然的直接切换mode, draw 2...仔细想想, porterduff 的算法其实是操作了像素点,那肯定是需要 bitmap 来操作的。类似场景还是都使用 srcbitmap和destbitmap来处理比较稳妥。

    53610

    【Android UI】Paint ComposeShader 组合渲染 ( Shader 叠加模式 | Xfermode | PorterDuff.Mode | BlendMode )

    、ComposeShader 组合渲染代码示例 一、ComposeShader 组合渲染 ---- Paint 的 ComposeShader 是 组合渲染 , 可以将两个个 Shader 渲染组合使用...developer.android.google.cn/reference/kotlin/android/graphics/ComposeShader ComposeShader 组合渲染 需要设置 dst 和 src 两个渲染 , 还有两个渲染的组合模式..., 可以设置 Xfermode / PorterDuff.Mode / BlendMode 三种之一的组合模式 ; ComposeShader( shaderA: Shader, // The...mode: PorterDuff.Mode) // The PorterDuff mode that combines the colors from the two shaders....{ /** * 画笔工具 * 线性渐变渲染 需要设置给该 画笔工具 */ private Paint mPaint; /** * 使用线性渐变绘制的区域

    65920

    Android中的各种Drawable类详解

    通过这个类可以减少我们的绘制工作和使用成本,同时系统也提供了众多的Drawable的派生类比如单色、图形、位图、裁剪、动画等等来完成一些常见的绘制需求。Drawable是一个抽象的可绘制类。...设置颜色滤镜,作用是把当前的Drawable和指定的颜色进行各种模式的融合。...ColorFilter是一个抽象的基类, 其中的一个派生类就是PorterDuffColorFilter,这个类的构造方法接收一个颜色,以及和这个颜色融合的方式PorterDuff.Mode。...BitmapDrawable 位图可绘制类 位图可绘制类。在构造时指定一个Bitmap对象或者一个位图文件。位图显示时需要指定:像素和设备尺寸的映射,显示的位置,显示模式三种属性。...(Shader.TileMode mode) 为了绘制更加优质以及性能的优化,在绘制位图会使用到画笔Paint类进行一些属性设置。

    1.8K20

    【Android 应用开发】Paint 渲染 之 BitmapShader 位图渲染 ( 渲染流程 | CLAMP 拉伸最后像素 | REPEAT 重复绘制图片 | MIRROR 绘制反向图片 )

    , 使用 同样的位图进行平铺 剩余绘制的部分; ③ Shader.TileMode.MIRROR : 绘图位置超出了边界, 使用 位图反转镜像 平铺剩余绘制部分; public class Shader...Rect(0,0 , 100, 100),mPaint); ; 8.使用示例 : 下面是位图渲染 的简单示例; @Override protected void onDraw(Canvas...创建位图渲染对象, 并设置拉伸方式, 此处设置Shader.TileMode.CLAMP, // 如果绘制的位置超出了图像的边界, 那么超出部分 使用最后一个像素的颜色值绘制...创建位图渲染对象, 并设置拉伸方式, 此处设置Shader.TileMode.CLAMP, // 如果绘制的位置超出了图像的边界, 那么超出部分 使用最后一个像素的颜色值绘制...创建位图渲染对象, 并设置拉伸方式, 此处设置Shader.TileMode.CLAMP, // 如果绘制的位置超出了图像的边界, 那么超出部分 使用镜像平铺方式填充

    1.8K10

    Android灵魂画家的18种混合模式

    学会正确的使用PorterDuffXfermode。 收获【两张示例图】,帮助你在实际中正确的运用各种混合模式。 2 解密PorterDuffXfermode 先上两张示例图,大家快来保存啊! ?...如果合理的使用Xfermode去将一些简单的图形进行混合,同样可以获得你所期望的复杂图形。在CoorChice的这篇文章【从未如此惊艳!...如果你使用它对一些图片进行混合,你会看到Xfermode到底能做什么不可思议的事!比如,在 《Compositing Design Images》 中就有一个这样的例子: ?...也许筒靴们平时都只听说PorterDuff.Mode是16种模式,因为官方的例子中就出现了16种模式。但事实上,Android提供的混合模式共有18种,筒靴们在上图中也是能看到滴。...参考链接: Api PorterDuff.Mode - https://developer.android.com/reference/android/graphics/PorterDuff.Mode.html

    1.3K20

    Android自定义View之绘制圆形头像

    使用自定义View无非就两种情况下,第一种就是直接在xml布局中使用,另一种就是在Activity中new出来,下面我们分别使用上述两种方式,为了便于观察我们在三个构造方法中分别加入一行打印。 ?...结论:自定义View当在xml中使用,使用的是第二个构造方法,当在Activity中使用时,实例化时传入几个参数调用的就是含有几个参数的构造方法。...drawable.draw(canvas); 绘制圆形bitmap 通过上面的代码,我们得到了原有的bitmap图像,紧接着我们需要绘制圆形的bitmap,与上面类似,首先创建一个和bitmap大小一致的位图...canvas.drawARGB(0, 0, 0, 0); paint.setColor(Color.WHITE); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN...canvas.drawRoundRect(rectF, roundRa, roundRa, paint); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN

    1.2K10

    自定义圆角和园边的实现

    首先绘制圆形          */         canvas.drawCircle(min / 2, min / 2, min / 2, paint);   /**          * 使用...SRC_IN          */         paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));   /*...));这行代码,为什么呢,我给大家解释下,SRC_IN这种模式,两个绘制的效果叠加后取交集展现后图,怎么说呢,咱们第一个绘制的是个圆形,第二个绘制的是个Bitmap,于是交集为圆形,展现的是BItmap...首先绘制圆形          */         canvas.drawCircle(min / 2, min / 2, min / 2, paint);   /**          * 使用...SRC_IN,参考上面的说明          */         paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)

    1K70
    领券