需要图片集和源码请点赞关注收藏后评论区留言~~~

一、画布的绘图层次

画布Canvas上的绘图层次都是在同一个图层上进行的,这意味着如果存在重叠区域,后面绘制的图形就必然覆盖前面的图形。绘图是比较复杂的事情,不是直接覆盖这么简单,有些特殊的绘图操作往往需要做与或非等运算。

Android给画布的图层显示指定了许多规则,详细的图层显示规则如下图

当然 光看图层规则的文案还是比较令人费解 下面我们看直观的效果,圆圈是先绘制的下层图形,正方形是后绘制的上层图形,图例展示了运用不同规则时的显示画面

具体到编码而言 需要在当前画布之外再准备一个遮罩画布,遮罩画布绘制上层图形,而当前画布绘制下层图形,同时指定两个画布的混合图层模式,并根据该模式在当前画布盖上遮罩画布

然后在布局文件中添加LayerView节点,并在对应的活动页面调用setMode方法设置绘图模式,运行并测试该App,可观察到图层覆盖效果

代码如下

Java类

package com.example.animation;import androidx.appcompat.app.AppCompatActivity;import android.graphics.PorterDuff;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;import com.example.animation.widget.LayerView;public class DrawLayerActivity extends AppCompatActivity {private LayerView lv_mode; // 声明一个层次视图对象@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_draw_layer);lv_mode = findViewById(R.id.lv_mode);initLayerSpinner(); // 初始化绘图层次类型下拉框}// 初始化绘图层次类型下拉框private void initLayerSpinner() {ArrayAdapter<String> modeAdapter = new ArrayAdapter<>(this,R.layout.item_select, descArray);Spinner sp_mode = findViewById(R.id.sp_mode);sp_mode.setPrompt("请选择绘图层次类型");sp_mode.setAdapter(modeAdapter);sp_mode.setOnItemSelectedListener(new ModeSelectedListener());sp_mode.setSelection(0);}private String[] descArray = {"只显示轮廓", "SRC 只显示上层图形", "DST 只显示下层图形","SRC_OVER 重叠部分由上层遮盖下层", "DST_OVER 重叠部分由下层遮盖上层","SRC_IN 只显示重叠部分的上层图形", "DST_IN 只显示重叠部分的下层图形","SRC_OUT 只显示上层图形的未重叠部分", "DST_OUT 只显示下层图形的未重叠部分","SRC_ATOP 只显示上层图形区域,但重叠部分显示下层图形", "DST_ATOP 只显示下层图形区域,但重叠部分显示上层图形","XOR 不显示重叠部分,其余部分正常显示", "DARKEN 重叠部分按颜料混合方式加深,其余部分正常显示","LIGHTEN 重叠部分按光照重合方式加亮,其余部分正常显示", "MULTIPLY 只显示重叠部分,且重叠部分的颜色混合加深","SCREEN 过滤重叠部分的深色,其余部分正常显示"};private PorterDuff.Mode[] modeArray = {PorterDuff.Mode.CLEAR, PorterDuff.Mode.SRC, PorterDuff.Mode.DST,PorterDuff.Mode.SRC_OVER, PorterDuff.Mode.DST_OVER,PorterDuff.Mode.SRC_IN, PorterDuff.Mode.DST_IN,PorterDuff.Mode.SRC_OUT, PorterDuff.Mode.DST_OUT,PorterDuff.Mode.SRC_ATOP, PorterDuff.Mode.DST_ATOP,PorterDuff.Mode.XOR, PorterDuff.Mode.DARKEN,PorterDuff.Mode.LIGHTEN, PorterDuff.Mode.MULTIPLY,PorterDuff.Mode.SCREEN};class ModeSelectedListener implements AdapterView.OnItemSelectedListener {public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {if (arg2 == 0) {lv_mode.setOnlyLine(); // 只显示线条轮廓} else {lv_mode.setMode(modeArray[arg2]); // 设置层次视图的绘图模式}}public void onNothingSelected(AdapterView<?> arg0) {}}}

XML文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:paddingLeft="5dp"android:orientation="horizontal"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="绘图模式:"android:textColor="@color/black"android:textSize="17sp" /><Spinnerandroid:id="@+id/sp_mode"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:spinnerMode="dialog" /></LinearLayout><com.example.animation.widget.LayerViewandroid:id="@+id/lv_mode"android:layout_width="match_parent"android:layout_height="300dp"android:background="@color/white" /></LinearLayout>

创作不易 觉得有帮助请点赞关注收藏~~~

Android App开发动画特效中遮罩动画的讲解及实战演示(附源码 简单易懂 可直接使用)相关推荐

  1. Android Studio App开发中高级控件下拉列表Spinner的讲解及实战(附源码 超详细必看)

    运行有问题或需要源码请点赞关注收藏后评论区留言~~~ 一.下拉框Spinner Spinner是下拉框控件,它用于从一串列表中选择某项,其功能类似于单选按钮的组合,下拉列表的展示方式有两种,一种是在当 ...

  2. Android App开发之自定义图形中位图与图形互转、剪裁图形内部区域、给图形添加部件的讲解及实战(附源码 简单易懂)

    需要图片和源码点赞关注收藏后评论区留言~~~ 一.位图与图形互转 Drawable用于在界面上展示图片,Bitmap用于加工图像数据,所以两者之间的转换非常有必要,位图图形BitmapDrawable ...

  3. Android App开发手机阅读中实现平滑翻书效果和卷曲翻书动画实战(附源码 简单易懂 可直接使用)

    需要图片集和源码请点赞关注收藏后评论区留言~~~ 一.平滑翻书效果 与纸质书籍类似,手机上的电子书也有很多页,逐页浏览可采用翻页视图,然而翻页视图犹如一幅从左到右的绵长画卷,与现实生活中上下层叠的书籍 ...

  4. Android App开发手机阅读中PDF文件渲染器的讲解及使用(附源码 简单易懂)

    需要源码和图片集请点赞关注收藏后评论区留言~~~ 一.PDF文件渲染器 Android集成了PDF的渲染操作,从很大程度上方便了开发者,这个PDF文件渲染器便是PdfRenderer.渲染器允许从存储 ...

  5. Android Studio App开发之使用摄像机录制视频和从视频库中选取视频的讲解及实战(附源码)

    运行有问题或需要源码请点赞关注收藏后评论区留言~~~ 一.使用摄像机录制视频 与音频类似,通过系统摄像机可以很方便的录制视频,只要指定摄像动作为MediaStore.ACTION_VIDEO_CAPT ...

  6. 【Android App】给三维的地球仪贴上动物贴纸实战(附源码和演示 超详细必看)

    需要源码和图片集请点赞关注收藏后评论区留言~~~ 一.纹理贴图 给三维物体穿衣服的动作,通常叫做给三维图形贴图,更专业地说叫纹理渲染. 渲染纹理的过程主要由三大项操作组成,分别说明如下: (1)启用纹 ...

  7. Android App开发动画特效中帧动画和电影淡入淡出动画的讲解及实战(附源码和演示视频 简单易懂)

    需要图片集和源码请点赞关注收藏后评论区留言~~~ 一.帧动画 Android的动画分为三类,帧动画,补间动画和属性动画.其中帧动画是实现原理最简单的一种,跟现实生活中的电影胶卷类似,都是在短时间内连续 ...

  8. 【Android App】给三维魔方贴图以及旋转动画讲解和实战(附源码和演示视频 超详细必看)

    需要源码请点赞关注收藏后评论区留言私信~~~ 一.给三维物体贴图 除了位置坐标.颜色向量和矩阵向量,着色器还支持声明材质坐标和纹理采样器. 其中材质坐标表示物体表面摊平后的二维空间,纹理采样器表示采用 ...

  9. Android Studio App开发之下载管理器DownloadManager中显示、轮询下载进度、利用POST上传文件讲解及实战(附源码)

    运行有问题或需要源码请点赞关注收藏后评论区留言~~~ 一.在通知栏显示下载进度 利用GET方式读取数据有很多缺点比如1:无法端点续传 一旦中途失败只能重新获取 2:不是真正意义上的下载操作 无法设置参 ...

  10. Android Studio App开发中使用录音机、MediaRecorder录制音频和MediaPlayer播放音频讲解及实战(附源码)

    运行有问题或需要源码请点赞关注收藏后评论区留言~~~ 一.使用录音机录制音频 手机有自带的系统相机,也有自带的系统录音机,只要在调用startActivityForResult之前指定该动作,就会自动 ...

最新文章

  1. Ubuntu17.10 下配置caffe 仅CPU i386可以直接apt install caffe-cpu,但是怎么运行mnist代码我懵逼了...
  2. python打开一个文件-在“Python”中如何“尝试/抓住”打开一个文件?
  3. Python学习---协程 1226
  4. linux ftp图片服务器,linux ftp 图片服务器
  5. 深度学习原理与框架-卷积网络细节-数据增强策略 1.翻转 2.随机裁剪 3.平移 4.旋转角度...
  6. 数据分析Power BI数据建模教程(三)——如何优化数据模型
  7. 中英文对照 —— 几何(数学)
  8. tomcat配置gc日志输出
  9. 网站SQL注入漏洞检测
  10. 河套学院2018级计算机一级考试,河套学院2018-2019学年本科生就业率
  11. #.net在技术上远超Java,可是为什么大多数公司还是选择使用Java
  12. PS常用的三种抠图方法,能应对99%的抠图场景
  13. ABB机器人虚拟软件RobotStudio和开发环境的安装包
  14. 青龙面板之今日油条(更新)
  15. 既要懂技术还要脾气“辣”,这一岗位年年涨薪,火爆了~
  16. 杰特康机器人的概述_工业机器人概述
  17. python爬取微博评论数据的github链接_GitHub - guozifeng91/weiboSpider: 新浪微博爬虫,用python爬取新浪微博数据...
  18. 【FFmpeg】aac 编码的cbr和vbr 测试
  19. 提取图中数据的神器→→→plot_digitizer
  20. html邮件修改不了图片,邮件模板中的图片不显示,该怎么解决

热门文章

  1. 简述计算机领域最高国际奖是什么奖,清华大学团队蝉联高性能计算应用领域国际最高奖...
  2. fflush(stdout)和fflush(stdin)
  3. 电子白板计算机培训心得,电子白板培训个人心得体会范文
  4. 【操作系统】30天自制操作系统--(1)虚拟机加载最小操作系统
  5. FDTD Solutions-PML
  6. [cryptoverse ctf 2022] cvctf
  7. 教师资格证报名网站显示内部服务器错误,2020上半年教师资格考试报名缴费提示错误怎么办?缴费问题汇总...
  8. 电影《决战中途岛》中那些真实的历史人物,后来都怎样了?
  9. DOS命令经典应用复习
  10. Docker基础之containerd的shim