自定义View——PorterDuffXfermode

自定义View——PorterDuffXfermode

ID:42718579

大小:71.50 KB

页数:17页

时间:2019-09-21

自定义View——PorterDuffXfermode_第1页
自定义View——PorterDuffXfermode_第2页
自定义View——PorterDuffXfermode_第3页
自定义View——PorterDuffXfermode_第4页
自定义View——PorterDuffXfermode_第5页
资源描述:

《自定义View——PorterDuffXfermode》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、自定义View——PorterDuffXfermode楔子我们在自定义的过程,经常会遇到多个图形相交的问题(如下图),那么系统是如何处理图片相交部分的绘制的呢?View的基本框架(之后的代码都是基于该View):publicclassPorterDuffXfermodeViewextendsView{//画笔privatefinalPaintmPaint=newPaint();//View的宽高privateintmViewWidth;privateintmViewHeight;publicPor

2、terDuffXfermodeView(Contextcontext){this(context,null);}publicPorterDuffXfermodeView(Contextcontext,AttributeSetattrs){this(context,attrs,0);}publicPorterDuffXfermodeView(Contextcontext,AttributeSetattrs,intdefStyleAttr){super(context,attrs,defStyleAt

3、tr);initWidget();}privatevoidinitWidget(){//初始化画笔mPaint.setStyle(Paint.Style.FILL);mPaint.setAntiAlias(true);mPaint.setDither(true);}@OverrideprotectedvoidonSizeChanged(intw,inth,intoldw,intoldh){super.onSizeChanged(w,h,oldw,oldh);mViewWidth=w;mViewHe

4、ight=h;}@OverrideprotectedvoidonDraw(Canvascanvas){super.onDraw(canvas);}实现代码://自定义View@OverrideprotectedvoidonDraw(Canvascanvas){super.onDraw(canvas);canvas.translate(mViewWidth/2,mViewHeight/2);firstExample(canvas);}/***制作具有相交部分的圆和正方形*/privatevoidfi

5、rstExample(Canvascanvas){//绘制一个正方型mPaint.setColor(Color.BLUE);canvas.drawRect(-300,-300,0,0,mPaint);//绘制一个圆mPaint.setColor(Color.RED);canvas.drawCircle(0,0,200,mPaint);}首先我们要知道系统是如何绘制图形的,系统每绘制一个图形(如:canvas.drawXxx())就代表创建了一个图层,那么什么叫做图层?我们看一张图就明白了1、图片中

6、的三个颜色分别代表一个图层,每个图层的内容就是绘制的图形。2、系统默认是图层向上累加绘制,也就是红色是最先绘制的,蓝色是之后绘制的,黄色是最后绘制的。所以图形相交的部分,就被上层的图层的内容给掩盖了。既然明白了图层的概念,我们就可以回到正题,如何处理图层的相交部分。Android为我们提供了PorterDuffXfermode这个类,来处理关于图层相交的问题。PorterDuffXfermode的使用PorterDuffXfermode能够实现的功能首先我们来看一下PorterDuffXfermo

7、de有哪些功能注:(dst表示先绘制的图,src表示后绘制的图)稍微简单的解释一下常用的功能:凡是带有IN的表示:取两个图层的相交部分,关于相交部分显示什么内容有DST和SRC决定。凡是带有OUT的表示:取两个图层中另一方不相交的部分。凡是带有OVER的表示:当俩个图层存在相交部分时,显示哪个图层的内容PorterDuffXfermode的简单使用作用一:图层的交换任务:将第一幅图的正方形显示在顶部,圆形显示在底部。首先如何创建PorterDuffXfermode。//构造方法/***Porter

8、Duff.Mode:这是一个枚举类,枚举类的参数为上面的示意图*/PorterDuffXfermode(PorterDuff.Modemode)然后,将创建好的PorterDuffXfermode放入Paint中mPaint.setXfermode(newPorterDuffXfermode(mode))为什么是将模式放入到画笔中00,这是表示画笔当遇到图形相交的问题的时候,按照这种方式来解决。代码的实现:privatevoidsecondExample(Canvascanvas)

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。