首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏为数不多的Android技巧

    Xfermode in android

    Xfermode有三个实现类:AvoidXfermode, PixelXorXfermode以及PorterDuffXfermode。 AvoidXfermode AvoidXfermode xfermode will draw the src everywhere except on top of the opColor or, count = canvas.saveLayer paint.setXfermode() canvas.drawXXX canvas.restoreLayer() 实际效果测试以及mode含义 往上很多对于Xfermode 0.5f, 0.5f, width / 2, height / 2); canvas.drawBitmap(mDst, 0, 0, p); p.setXfermode(xfermode

    1.4K40发布于 2018-09-05
  • 来自专栏android技术

    Android高级渲染Xfermode

    Xfermode的作用是将绘制的图形的像素和Canvas上对应位置的像素按照一定的规则进行混合,形成新的像素,再更新到Canvas中形成最终的图形,使用的时候都是通过Paint.setXfermode Xfermode.png 混合模式分类 SRC类----优先显示的是源图片 SRC [Sa, Sc] ---- 处理图片相交区域时,总是显示的是原图片 SRC_IN [Sa * Da, Sc * Da

    90320发布于 2020-07-03
  • 来自专栏android技术

    Android利用SRC_IN模式下的Xfermode实现圆角图片

    首先准备两张图片 查看原图才能看清 Xfermode中SRC_IN模式是利用目标图片的透明度对原图片的透明度进行处理,目标图片透明度越低,相应的原图的透明度也越低 private Bitmap Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); //使用Xfermode onDraw(Canvas canvas) { canvas.drawBitmap(bitmapDst,0,0,mPaint); //后画SRC的图片 Xfermode xfermode = new PorterDuffXfermode(PorterDuff.Mode.SRC_IN); mPaint.setXfermode(xfermode); canvas.drawBitmap(bitmapSrc,0,0,mPaint); mPaint.setXfermode(null); } 项目地址:https://gitee.com/aruba/Xfermode.git

    1.7K40发布于 2020-07-03
  • 来自专栏everhad

    [BOT] 一种android中实现“圆角矩形”的方法

    后面会附上Xfermode.java的核心代码,这里说明下。 矩形和圆分别是两个独立的Bitmap,上图演示了选取Xfermode的子类PorterDuffXfermode作为“Xfermode("transfer-modes" in the drawing pipeline When an Xfermode is assigned to an Paint, then objects drawn with that paint have the xfermode applied Xfermode表示要在“绘制管线中使用的颜色传递模式”。 这样就得到了“Xfermode中的Dst Bitmap”。

    4.4K70发布于 2018-01-08
  • 来自专栏android技术

    Android利用SRC_OUT模式下的Xfermode实现刮刮卡效果

    dstCanvas.drawPath(path,pathPaint); canvas.drawBitmap(bitmapDst, 0, 0, mPaint); Xfermode xfermode = new PorterDuffXfermode(PorterDuff.Mode.SRC_OUT); mPaint.setXfermode(xfermode); mPaint.setXfermode(null); canvas.restoreToCount(layerId); } 项目地址:https://gitee.com/aruba/Xfermode.git

    99610发布于 2020-07-02
  • 来自专栏韩曙亮的移动开发专栏

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

    reference/kotlin/android/graphics/ComposeShader ComposeShader 组合渲染 需要设置 dst 和 src 两个渲染 , 还有两个渲染的组合模式 , 可以设置 Xfermode mode: Xfermode) // The mode that combines the colors from the two shaders.

    83320编辑于 2023-03-30
  • 来自专栏android技术

    Android利用SRC_IN模式下的Xfermode实现图片倒影效果

    //在原图下方画目标图 canvas.drawBitmap(bitmapDst, 0, bitmapSrc.getHeight(), mPaint); Xfermode xfermode = new PorterDuffXfermode(PorterDuff.Mode.SRC_IN); mPaint.setXfermode(xfermode); canvas.drawBitmap(bitmapSrc, matrix, mPaint); mPaint.setXfermode(null); } 项目地址:https://gitee.com/aruba/Xfermode.git

    1.1K20发布于 2020-07-03
  • 来自专栏设计模式

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

    自己绘过图的筒靴一定见过或者用过mPaint.setXfermode(Xfermode xfermode),它是干什么的呢? 3 Xfermode的意义你知道吗? 在上面的两张图中,CoorChice已经向筒靴们展示了使用Xfermode来混合简单的图形所达到的效果。 如果合理的使用Xfermode去将一些简单的图形进行混合,同样可以获得你所期望的复杂图形。在CoorChice的这篇文章【从未如此惊艳! 当然,这些并不能发挥Xfermode的真正威力。如果你使用它对一些图片进行混合,你会看到Xfermode到底能做什么不可思议的事! 你看,Xfermode就是如此的强大,通过合理的组合,能合成图片。 再一看张CoorChice用图片合成的各种效果: ? 哇!这鱼飞起来啦!

    1.5K20发布于 2020-12-15
  • 来自专栏android技术

    Android利用SRC_OUT模式下的Xfermode实现橡皮擦效果

    canvasDst.drawPath(path,mPathPaint); canvas.drawBitmap(bitmapDst,0,0, mPaint); Xfermode xfermode = new PorterDuffXfermode(PorterDuff.Mode.SRC_OUT); mPaint.setXfermode(xfermode); canvas.drawBitmap(bitmapSrc, 0, 0, mPaint); mPaint.setXfermode(null); } 项目地址:https://gitee.com/aruba/Xfermode.git

    1.1K20发布于 2020-07-02
  • 来自专栏安卓开发干货分享

    Android实现仿iOS图标下载View动画效果

    -90, sweepAngle, true, paint);// 记得设置为 null 不然会没有效果paint.setXfermode(null); 根据当前的进度绘制相对应的弧,并且结束的时候将 Xfermode public Xfermode setXfermode(Xfermode xfermode) { long xfermodeNative = 0; if (xfermode ! = null) xfermodeNative = xfermode.native_instance; native_setXfermode(mNativePaint, xfermodeNative ); mXfermode = xfermode; return xfermode;。

    1.9K00发布于 2019-06-11
  • 来自专栏androud

    android 绘图之Paint的效果研究

    xfermode); 橡皮擦,这是个好方法啊,看看。 可以通过修改Paint的Xfermode来影响在Canvas已有的图像上面绘制新的颜色的方式。 在正常的情况下,在已有的图像上绘图将会在其上面添加一层新的形状。 下面的Xfermode子类可以改变这种行为: 1)AvoidXfermode  指定了一个颜色和容差,强制Paint避免在它上面绘图(或者只在它上面绘图)。 代码异常简单: Xfermode xFermode = new PorterDuffXfermode(PorterDuff.Mode.CLEAR);paint.setXfermode(xFermode) ; 这是使用的最后一个子类,关于16条Porter-Duff规则,如下: private static final Xfermode[] sModes = { new PorterDuffXfermode

    1.2K00编辑于 2022-02-06
  • 来自专栏深入理解Android

    Android自定义系列——6.PorterDuffXfermode

    当使用PorterDuffXfermode时,需要将将其作为参数传给Paint.setXfermode(Xfermode xfermode)方法,这样在用该画笔paint进行绘图时,Android就会使用传入的 PorterDuffXfermode,如果不想再使用Xfermode,那么可以执行Paint.setXfermode(null)。 5.在绘制完成后,我们调用paint.setXfermode(null)将画笔去除Xfermode。 具体分析一下白色矩形出现的原因。 一般我们在调用canvas.drawXXX()方法时都会传入一个画笔Paint对象,Android在绘图时会先检查该画笔Paint对象有没有设置Xfermode,如果没有设置Xfermode,那么直接将绘制的图形覆盖 Canvas对应位置原有的像素;如果设置了Xfermode,那么会按照Xfermode具体的规则来更新Canvas中对应位置的像素颜色。

    1.8K21编辑于 2022-06-22
  • 来自专栏android技术

    Android--水波纹进度条

    实现方法是结合贝塞尔曲线和Xfermode,核心是利用path的offset()方法,不断偏移path /** * 水波纹进度条 */ public class BezierProgressView width, height; float centerX, centerY; //背景圆的缓冲 private Bitmap roundBitmap; //需要和水波纹做Xfermode Canvas(roundBitmap); roundCanvas.drawCircle(centerX, centerY, radius, roundPaint); //画Xfermode context.getResources().getDisplayMetrics().density; return (int) (size * scale + 0.5f); } } 去掉Xfermode

    1.2K10发布于 2020-07-03
  • 来自专栏Android群英传

    不怕搞事,自定义View云扩散效果

    所以这里我就想到使用Xfermode,没错,你看到发散的云,其实又是另一张图片: ? 哈哈哈哈,这张图片一贴出来,你是不是想笑。原来看起来很炫的效果,真实这么搞笑。 我只需要让两个图片使用Xfermode搞基一番,并且在过程中让这个View逐渐透明,遮罩图片逐渐放大即可。 当然,有了思路变成很简单,其实还是有些坑的,说说遇到的坑。 关于Xfermode小伙伴们用到过的可能了解,他有坑,非常大的坑。。经常发现与Demo图出不来一样的效果。 这里再来重复下Xfermode坑如何避免。 最终大总结,如果想让PorterDuffXferMode按照预期Demo(或者效果图)的效果图像实现,必须满足以下条件: 1、关闭硬件加速。 同时第一个View设置gone来避免过度绘制,第二个View绘制的实际上是两个bitmap,并且开启硬离屏缓存来实现Xfermode的正确效果。 ?

    90020发布于 2018-07-20
  • 来自专栏androud

    android 绘图之Path与Paint详解

    setFilterBitmap(boolean filter); * 如果该项设置为true,则图像在动画进行中会滤掉对Bitmap图像的优化操作,加快显示 * 速度,本设置项依赖于dither和xfermode setStrokeWidth(float width); * 当画笔样式为STROKE或FILL_OR_STROKE时,设置笔刷的粗细度 * * setXfermode(Xfermode xfermode); * 设置图形重叠时的处理方式,如合并,取交集或并集,经常用来制作橡皮的擦除效果 * * 2.文本绘制 * setFakeBoldText

    1.1K00编辑于 2022-02-06
  • 来自专栏蜉蝣禅修之道

    android有关paint属性设置

    boolean filter); * 如果该项设置为true,则图像在动画进行中会滤掉对Bitmap图像的优化操作,加快显示 * 速度,本设置项依赖于dither和xfermode float width); * 当画笔样式为STROKE或FILL_OR_STROKE时,设置笔刷的粗细度 * * setXfermode(Xfermode xfermode); * 设置图形重叠时的处理方式,如合并,取交集或并集,经常用来制作橡皮的擦除效果 * *<span style="color

    1.5K30编辑于 2022-04-02
  • 来自专栏猫哥的专栏

    手撕一个让人「欲罢不能」的水波纹选中控件

    . // 混合裁剪模式 private val xfermode = PorterDuffXfermode(PorterDuff.Mode.SRC_ATOP) ) // 【2.2】取消裁剪模式 ripplePaint.xfermode = null // 【1.2】将图层绘制到canvas上 这篇文章作者也遇到了相同的问题,经过的他实验发现: PorterDuffXfermode 颜色混合中的 SRC 层是在设置xfermode 之前 整个canvas 中的 非透明像素点。 于是这里新建了一个新的 全透明的 图层,由于 canvas.drawPath(clipPath, normalPaint) 绘制的是一个带有圆角的矩形,设置了 xfermode 模式为 SRC_ATOP 先绘制底部 SRC (圆角矩形),然后设置水波纹画笔的 xfermode ,接着绘制 DST (水波纹),最后取消混合模式。 这样,一个带圆角的水波纹就实现了。

    1.4K40发布于 2020-04-01
  • 来自专栏青蛙要fly的专栏

    项目需求讨论:截图—涂鸦—分享

    Xfermode 设置橡皮擦的Paint的Xfermode模式为Mode.Clear。 Xfermode xfermode = new PorterDuffXfermode(PorterDuff.Mode.CLEAR); eraserPaint.setXfermode(xfermode); import android.graphics.PorterDuff; import android.graphics.PorterDuffXfermode; import android.graphics.Xfermode ); eraserPaint.setStrokeWidth(20); eraserPaint.setColor(Color.TRANSPARENT); Xfermode xfermode = new PorterDuffXfermode(PorterDuff.Mode.CLEAR); eraserPaint.setXfermode(xfermode);

    86240发布于 2018-08-29
  • 来自专栏半行代码

    PorterDuff采坑记

    bitmapCanvas.setBitmap(bitmap) bitmapCanvas.drawRect(srcRect, paint) paint.xfermode , 0f, 0f, paint) paint.xfermode = null it.restoreToCount(saveCount) 在 xfermode的场景下,其实可以不调用 savelayer,直接在view初始化的时候开启硬件加速就可以实现同样的效果,并且这也是比较推荐的做法。

    63710编辑于 2022-05-10
  • 来自专栏sktj

    python ftp工具类 上传、下载文件夹 封装类

    cleanTarget() transferAct() self.connection.quit() if name == 'main': ftp = FtpTools() xfermode = 'download' if len(sys.argv) > 1: xfermode = sys.argv.pop(1) # get+del 2nd arg if xfermode == download': ftp.configTransfer() ftp.run(cleanTarget=ftp.cleanLocals, transferAct=ftp.downloadDir) elif xfermode

    1.5K30编辑于 2022-05-13
领券