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

一、画布的绘图层次

画布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. EasyUI 分页 简洁代码
  2. TensorFlow 2.X中的动手NLP深度学习模型准备
  3. 2017西安交大ACM小学期数论 [完全平方数]
  4. oracle共享服务器模式的图,Oracle 11g笔记——专有服务器、共享服务器模式
  5. Guice学习(一)
  6. JS-[IIFE闭包]
  7. twisted 网络通信的简单例子
  8. Cocos2d之Node类详解之节点树(二)
  9. 【自学编程】来看一篇中专生如何在异常恶劣环境下自学编程
  10. 光纤传感器实验模块_实验3振动测量试验模块.doc
  11. Web Audio API 入门1
  12. C# label控件竖直显示 label控件垂直显示
  13. Matlab中imhist函数的使用及图像直方图的概念
  14. laravel5.5通过yansongda/pay组件实现支付宝电脑网站支付
  15. 晶体二极管工作原理(详解)
  16. DWT(离散小波变换)
  17. vue项目中对于Scroll事件的节流优化
  18. [ASP.NET MVC 小牛之路]02 - C#知识点提要
  19. 电机速度rpm转换成轮子的速度
  20. 设置EditText输入的文字全部变成大写或小写方案总结

热门文章

  1. 欧美html游戏,欧美HTML社区服务游戏
  2. ERROR: pip‘s dependency resolver does not currently take into account all the packages that are ....
  3. JavaScript:实现multiplesThreeAndFive三或五倍数的算法 (附完整源码)
  4. deflate php,我可以告诉mod_deflate和PHP只跳过一个目录上的压缩吗?
  5. python培训时间多长
  6. codeforces 337 D(树的直径性质)
  7. 前端面试你需要知道的事情:简历
  8. error: undefined reference to __write_chk错误
  9. Python实战项目:代码秒抢红包详解
  10. 多线程与并发系列之CompletableFuture