Android_叠加绘图

玩转RecyclerView | 实现子视图叠加 | 3D画廊效果 | 高级动效 | Android 3D坐标系介绍 之前写的一篇文章展示了RecyclerView实现的画廊效果,适用于专辑/图片/列表浏览效果。本篇文章阐述如何基于RecyclerView实现如下图所示的3D画廊效果。以下效果的重点在于实现子视图的图层叠加,滑动过程中的3D旋转效果较为简单。(1)无3D旋转效果图片(1)带3D旋转效果图片。 阅读详情

叠加绘图

  • 在用户显示图形或图像是,使用LayerDrawable对象可以将多个绘图资源按照顺序层叠起来,最后一个绘图资源全部放在最上面,呈现出叠加视图的效果
  • 实现叠加视图,同样可以通过两种方式来实现:1.XML文件 2.应用程序代码

实现过程

  1. 建立图片显示ImageView控件,并设置各项属性

     <ImageView
            android:id="@+id/imageView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/body"/>
    
  2. 新建Resource File(body1.xml),并将需要叠加的图片依次叠加

    <?xml version="1.0" encoding="utf-8"?>
    <!--层列表-->
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item><!--项目标签-->
            <!--位图-->
            <bitmap android:src="@drawable/body" android:gravity="center"/>
        </item>
    
        <item android:left="-100dp">
            <bitmap android:src="@drawable/yiya" android:gravity="center"/>
        </item>
    
    </layer-list>
    

android:left 控制位图左右偏移方向

android:Top 控制位图上下偏移方向

  1. 在java代码中,获得图片控件id,当按钮点击时进行图片的变更

     go_1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    ImageView iv = findViewById(R.id.imageView);
                    iv.setImageResource(R.drawable.body1);
                }
            });
    

源码

  • Activity.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
      >
    
        <ImageView
            android:id="@+id/imageView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/body"/>
    
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical">
    
            <Button
                android:id="@+id/go_1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="思考"/>
            <Button
                android:id="@+id/go_2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="熬夜"/>
    
    
        </LinearLayout>
    
    </LinearLayout>
    
  • body1.xml

    <?xml version="1.0" encoding="utf-8"?>
    <!--层列表-->
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item>
            <bitmap android:src="@drawable/body" android:gravity="center"/>
        </item>
    
        <item android:left="-100dp">
            <bitmap android:src="@drawable/yiya" android:gravity="center"/>
        </item>
    
    </layer-list>
    
  • body2.xml

    <?xml version="1.0" encoding="utf-8"?>
    <!--层列表-->
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item>
            <bitmap android:src="@drawable/body" android:gravity="center"/>
        </item>
    
        <item android:left="100dp">
            <bitmap android:src="@drawable/erha" android:gravity="center"/>
        </item>
    
    </layer-list>
    
  • java

    public class LayerListActivity extends AppCompatActivity {
        Button go_1;
        Button go_2;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_layer_list);
            go_1 = findViewById(R.id.go_1);
            go_2 = findViewById(R.id.go_2);
    
            /*思考*/
            go_1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    ImageView iv = findViewById(R.id.imageView);
                    iv.setImageResource(R.drawable.body1);
                }
            });
            /*熬夜*/
            go_2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    ImageView iv = findViewById(R.id.imageView);
                    iv.setImageResource(R.drawable.body2);
                }
            });
        }
    }
    
  • 界面
    界面

Android16 提升绘图性能强制GPU渲染 摘要:本文分析了在低性能芯片(如Android16RK3576)上出现的悬浮图标黑框问题,通过研究开发者模式中的"停用HW叠加层"功能,发现其本质是强制使用GPU进行屏幕合成。文章详细追踪了相关代码实现路径,包括Settings应用中的HardwareOverlaysPreferenceController.java和SurfaceFlinger服务的交互过程,重点解析了通过SurfaceFlinger服务(1008指令)强制启用GPU绘图的机制,并提供了在自己的APK中实现该功能的代码 阅读详情

相关推荐

深入理解Android canvas.save()与canvas.restore()

本文还有配套的精品资源,点击获取 简介:在Android开发中, Canvas 类负责绘图操作,而 save() 和 restore() 方法用于管理绘图状态,保证绘图的可逆性和精确性。本文深入探讨了这两个方法的工作原理及其在复杂绘图中的应用,包括如何通过保存和恢复状态来处理变换,以及这些操作在实际绘图中的效率和准确性。 ...

weixin_33193177的博客 883

ArcGIS for Android 离线数据空间分析--叠加分析

上一章我们以I查询为例讲述了在ArcGIS for Android里如何进行离线数据空间查询,通过ArcGIS 10.2以上的SDK里中QueryParamters类里设置查询参数,然后到对应空间数据库里查询即可。在了解如何空间查询以后,接下来我们以叠加分析为例说下ArcGIS for Android里如何进行离线数据的空间分析。       空间分析,顾名思义就是对空间数据进行分析,所

卡小基的博客 9691

Android 拖动图片及图层叠加

Android拖动图片移动、图层叠加并保存至本地,内含效果图。

[Android]Layer Drawable

Item的结构也比较简单,比较常用的属性有android:top、android:bottom、android:left和android:right,它们分别表示Drawable相对于View的上下左右的偏移量,单位为像素。另外,我们可以通过android:drawable属性来直接引用一个已有的Drawable资源,也可以在item中自定义Drawable。Layer-list有层次的概念,下面的item会覆盖上面的item,通过合理的分层,可以实现一些特殊的叠加效果。

weixin_63357306的博客 662

Android实现图片叠加效果的两种方法

主要介绍了Android实现图片叠加效果的两种方法,结合实例形式分析了Android实现图片叠加效果的两种操作方法与相关注意事项,需要的朋友可以参考下

我看MFC的过去、现在和未来

首先说句题外话,虽然我现在的“主业”是Qt,但自己扪心自问,对MFC的熟悉程度要超过Qt。正是由于有了对MFC的熟悉,才能在使用Qt时,比较清醒的认清两者的优劣之处,在此暂且不提。 这个话题也可以说是由来已久,众说纷纭,今时我也谈谈自己的感悟。 一、对MFC的总体看法 首先看看云风在其《游戏之旅-我的编程感悟》一书中对MFC的看法: “我所见到的程序员中,很多把C+

qter_wd007的专栏 6115

安卓xml绘图

xml在安卓中除了作为布局文件和配置文件外,还能辅助我们绘图。下面我们来看一下xml在这方面的应用。 1.Bitmap 使用Bitmap引用图片,可直接将图片转成Bitmap在程序中使用。 <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/ic_lau

u010921701的博客 390

单片机OTA升级:Bootloader如何多重校验保障APP完整性?

本文详细介绍了单片机OTA升级中Bootloader如何通过CRC校验、数字签名、版本比对和存储位置检查等多重校验机制保障APP完整性。CRC校验作为快速检测数据完整性的核心手段,结合其他安全措施有效防止设备变砖和安全漏洞,确保远程升级的可靠性。

l3m4n的博客 981

自定义View基础实战--刻度圆盘、饼状体、两个图形叠加

本篇实战内容主要围绕draw、paint、path等常用API展开,为达到熟练使用目的,对一些基础常见的view效果进行实现。 实战view一:圆盘刻度 相关知识点: 使用PathDashPathEffect画圆弧上的刻度,PathMeasure计算圆弧长度; 可参考:https://hencoder.com/ui-1-1/ https://hencoder...

王温暖的博客 610

基于MS5351的三通道可编程时钟发生器设计

时钟发生器是数字系统时序验证与信号完整性测试的核心基础设备,其原理基于锁相环(PLL)对参考晶振进行倍频与分频控制,通过寄存器配置实现多路独立频率输出。技术价值体现在高精度、低抖动、快速切换与工程可部署性之间取得平衡,尤其适用于FPGA/ASIC参考时钟调试、ADC/DAC采样时钟验证及嵌入式硬件时序裕量评估等场景。本方案采用MS5351三通道时钟芯片与ESP32主控协同架构,在保证LVCMOS输出质量与I²C可编程性的前提下,优化电源噪声抑制、晶体负载匹配和跨板信号完整性,兼顾成本、周期与实测稳定性,为实

weixin_31715353的博客 210

CoppeliaSim学习笔记(1):建立Python脚本与CoppeliaSim的连接

CoppeliaSim学习笔记,建立python和CoppeliaSim的连接,实现联调。

qq_22487889的博客 1万+

SurfaceView中lockCanvas返回值为null

最近在做一个安卓项目,需要使用TextureView或者SurfaceView对相机进行预览,在预览的同时又想要在屏幕上进行绘图操作。于是使用lockCanvas()获取Canvas对象,但是程序就会在运行时候报错:null reference,程序崩溃。检查一下lockCanvas返回的canvas的确是null。花了很长时间查错,终于在Android开发官网上找到了原因:http://devel

flyingzhao 7883

华为OD机试真题 新系统 2026-05-13 Python&JS语言 实现【查找能被整除的最大整数】

给定一个字符串和一个正整数,字符串由大小写字母和数字组成,要求从字符串中找出最大且能被给定正整数整除的数。

MISAYAONE的博客 224

android绘图Paint.setXfermode()和Canvas.saveLayer()方法的作用

在android绘图开发中,Paint.setXfermode()和Canvas.saveLayer()是两个重要的方法了。很多网友都不是很明白,我也一直不明白,花了几天时间来研究了这两个方法,略有领悟,记录下来,归纳总结,也给新手一点帮助。 Android中Canvas绘图之PorterDuffXfermode使用及工作原理详解 这篇文章给了我很大的帮助,我的很多内容也是来自于这篇文章,并把我

谁与争锋的专栏 7117

29、Power BI 中行级安全(RLS)的实现与应用

本文详细介绍了在Power BI中实现行级安全(RLS)的方法,包括静态RLS和动态RLS的实现流程、适用场景及对比分析。通过具体业务场景,展示了如何创建安全角色、定义规则、验证角色、发布模型以及分配成员。此外,还探讨了更复杂的动态RLS场景,如基于父子层次结构的数据访问控制和从外部源获取用户信息的实现方式。文章最后总结了最佳实践建议及未来发展趋势,为企业在Power BI中高效、安全地实施数据访问控制提供了全面指导。

terraform7cloud的博客 195

pymol 动画简单制作,gif、mp4导出

参考: https://www.youtube.com/watch?v=G77K9Lro8js1、直接Movie下Program下,Camera Loop下Nutate下选择,这里选择30degover4 sec;如果要动画过渡自然,可以在这4sec后面再Append 1sec;如果需要两个视角,既可以再把窗口蛋白定位到比如配体,不用管中间过程怎么定位过去配体,再Program下,Camera Loop下Nutate下选择,这里选择30degover4 sec添加;最后如果要整体形成个循环播放,可以在这4s

weixin_42357472的博客 8435

Android 高级绘图

目录 高级画布绘图...1 1.可以画什么?...2 2.从Paint中完成工作...3 使用透明度...4 Shader介绍...4 定义渐变Shader6 使用Shader TileModes7 使用MaskFilter7 使用ColorFilter8 Android包含三个ColorFilter:...8 使用PathEffect9 修改Xfermode.10 3.

jackwolf_gao的专栏 983

18、深入解析航空飞行数据中的秘密:从数据清理到高级分析

本文详细解析了如何使用R语言处理和分析航空飞行数据,从基础的数据清理到复杂的回归分析和机器学习模型构建。文章涵盖了探索性数据分析、天气数据的整合、地理信息可视化、时间序列预测以及航班延误的优化策略等内容,展示了如何通过数据挖掘技术提高航空运营效率和乘客满意度,并探讨了数据质量评估与隐私保护的重要性。

convnet3designer的博客 106

Paint中SumPathEffect的简单使用

SumPathEffect是pathEffect的六个子类中最后一个了,光看名字也知道它也是一种,将两种PathEffect组合使用的类,它和ComposePathEffect的区别在于,ComposePathEffect是将两个子类进行组合,让你看到的是组合后的样子,而且SumPathEffect则是将这两个子类全的效果全显示出来,然后叠加在一起。好,话不多说,直接上代和图: public cl...

我本无名的专栏 862

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

android 图层绘画分析,Android绘图技巧使用详解

本文实例为大家分享了Android绘图技巧使用的具体代码,供大家参考,具体内容如下XML绘图Bitmapandroid:src="@drawable/giao"/>Shapeandroid:shape="rectangle">android:startColor="#FF5DA2FF"android:endColor="#805FBBEF"android:angle="45"/>...

weixin_29435467的博客 651

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Android 自定义View 开发 入门与实践4 AvoidXfermode 刮刮卡 涂抹 canvas shapeDrawable 放大镜

第八章混合模式 AvoidXfermode API 16以上才可以使用 使用时,需要注意俩点 1.禁用硬件加速 setLayerType(LAYER_TYPE_SOFTWARE, null); 2.使用离屏绘制 //新建图层 int layerId = canvas.saveLayer(0, 0, getWidth(), getHeight(), null, Canvas.ALL_SAVE_FLAG); //核心绘制代码 //还原图...

FlyPig_Vip的博客 591

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

bitmap和canvas实现图层叠加(可实现灰色遮罩)

---- bitmap和canvas画出叠加的2张照片 --- 图片1原图 ------ 图片2原图 --------- 代码实现 BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; Bi

musk6的博客 6338

数学艺术图案画-曼陀罗(74)

图案的绘制要点是以椭圆的长短轴变化,半径变化,以及中心距的变化,再加上色彩的变化来完成图案的复杂度,图案图形的艺术性。//** pi/4 十字形 90度,pi/5 五星形 72度,pi/12 十二角 30度, pi/16 十六角 22.5度。一是图形变化:图形输出中心距L变化,加微调距离(L+40)叠加图形,以及椭圆的长短轴尺寸比例的变化,循环套叠画出图形。//**图案动画展示:图案和色彩多次叠加,每轮次八步产生8个不同色彩的图案,2圈次可展示出16个图案。我总是被色彩绚烂和美轮美奂的图案感动。

baidu_41801770的博客 202

数学艺术图案画-曼陀罗(71)

图案的绘制要点是以椭圆的长短轴变化,半径变化,以及中心距的变化,再加上色彩的变化来完成图案的复杂度,图案图形的艺术性。//** pi/4 十字形 90度,pi/5 五星形 72度,pi/12 十二角 30度, pi/16 十六角 22.5度。一是图形变化:图形输出中心距L变化,加微调距离(L+40)叠加图形,以及椭圆的长短轴尺寸比例的变化,循环套叠画出图形。//**图案动画展示:图案和色彩多次叠加,每轮次八步产生8个不同色彩的图案,2圈次可展示出16个图案。我总是被色彩绚烂和美轮美奂的图案感动。

baidu_41801770的博客 179

数学艺术图案画-曼陀罗(59)

图案的绘制要点是以椭圆的长短轴变化,半径变化,以及中心距的变化,再加上色彩的变化来完成图案的复杂度,图案图形的艺术性。//** pi/4 十字形 90度,pi/5 五星形 72度,pi/12 十二角 30度, pi/16 十六角 22.5度。//**图案动画展示:图案和色彩多次叠加,每轮次八步产生8个不同色彩的图案,2圈次可展示出16个图案。//16m 全色调色板 (A, R, G, B)//** 设置动画演示次数,圈数----

baidu_41801770的博客 180

Android PorterDuff.Mode.CLEAR 效果 简单实现

Android PorterDuff.Mode.CLEAR 效果 简单实现。

OneN的博客 1834
上一篇: Android_简单界面效果处理
下一篇: Android_选项菜单的创建
ColdKite_鸢
博客等级 码龄7年 1粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ColdKite_鸢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值