效果图:

第一种:

第二种:

第一种是通过canvas画出来的效果: public voidfirst(View v) {

// 防止出现Immutable bitmap passed to Canvas constructor错误Bitmap bitmap1 = BitmapFactory.decodeResource(getResources(),

R.drawable.apple).copy(Bitmap.Config.ARGB_8888, true);

Bitmap bitmap2 = ((BitmapDrawable) getResources().getDrawable(

R.drawable.go)).getBitmap();

Bitmap newBitmap = null;

newBitmap = Bitmap.createBitmap(bitmap1);

Canvas canvas = newCanvas(newBitmap);

Paint paint = newPaint();

intw = bitmap1.getWidth();

inth = bitmap1.getHeight();

intw_2 = bitmap2.getWidth();

inth_2 = bitmap2.getHeight();

paint.setColor(Color.GRAY);

paint.setAlpha(125);

canvas.drawRect(0, 0, bitmap1.getWidth(), bitmap1.getHeight(), paint);

paint = newPaint();

canvas.drawBitmap(bitmap2, Math.abs(w - w_2) / 2,

Math.abs(h - h_2) / 2, paint);

canvas.save(Canvas.ALL_SAVE_FLAG);

// 存储新合成的图片canvas.restore();

image.setImageBitmap(newBitmap);

}

Canvas canvas = newCanvas(newBitmap); 当以newBitmap创建Canvas时,所以操作都已经在该图上实现了。

该例子可以想做是播放器开始播放的效果,计算好中间位置,先覆盖一层透明灰色的正方形,然后在中间画上自己播放的按钮。

第二种是使用系统的LayerDrawable类,该类主要用来控制多个图片的结合:

public voidsecond(View v) {

Bitmap bitmap1 = ((BitmapDrawable) getResources().getDrawable(

R.drawable.apple)).getBitmap();

Bitmap bitmap2 = ((BitmapDrawable) getResources().getDrawable(

R.drawable.go)).getBitmap();

Drawable[] array = newDrawable[2];

array[0] = newBitmapDrawable(bitmap1);

array[1] = newBitmapDrawable(bitmap2);

LayerDrawable la = newLayerDrawable(array);

// 其中第一个参数为层的索引号,后面的四个参数分别为left、top、right和bottomla.setLayerInset(0, 0, 0, 0, 0);

la.setLayerInset(1, 20, 20, 20, 20);

image.setImageDrawable(la);

}

关联数组array,控制每一层的位置

注意:上面防止出现Immutable bitmap passed to Canvas constructor错误

原因是如果不用copy的方法,直接引用会对资源文件进行修改,而android是不允许在代码里修改res文件里的图片

我也不知道为什么花费一个小时测试代码和写这篇文章,或许是为了以后资料的查看,或许是为了验证自己心中的那个效果,或许是心态突然变得平淡的缘故,就如我现在在听着four season in one day这个心情。

本文为原创,如需转载,请注明作者和出处,谢谢!

android堆叠效果相册_android 图片叠加效果——两种方法相关推荐

  1. android camera工程师,Android从Camera中获取图片的两种方法

    方法一: 此方法会由Camera直接产生照片回传给应用程序,但是返回的是压缩图片,显示不清晰 /**   启动Camera */ private void intentCamera(){ try { ...

  2. 【错误记录】NDK 导入外部 so 动态库报错 ( java.lang.UnsatisfiedLinkError | Android Studio 配置外部 so 动态库两种方法 )

    文章目录 一.报错信息 二.解决方案 ( Android Studio 配置外部 so 动态库两种方法 ) 1.jniLibs 目录存放 2.libs 目录存放 一.报错信息 外部引用 so 动态库 ...

  3. 将uni-app打包的H5放在 Android程序中在 webview 显示的两种方法

    将uni-app打包的H5放在 Android程序中在 webview 显示的两种方法 前言 Hash History 完事 前言 之前有个项目要同时做小程序和APP,本着节省时间的想法,研究了下un ...

  4. python 学习系列(3) 读取并显示图片的两种方法

    python 读取并显示图片的两种方法 在 python 中除了用 opencv,也可以用 matplotlib 和 PIL 这两个库操作图片.本人偏爱 matpoltlib,因为它的语法更像 mat ...

  5. 浏览器访问云服务器上图片的两种方法

    浏览器访问云服务器上图片的两种方法 1. Tomcat方式 打开tomcat的conf目录下配置文件server.xml 添加以下内容: <Context docBase="/home ...

  6. word涂改涂掉图片_怎么在word中修改图片的两种方法

    有时我们插入的图片只有一部分是我们想要的,那就需要我们将这一部分裁剪出来,word本身就可以方便快捷的对图片进行裁剪,那么下面就由学习啦小编给大家分享下在word中修改图片的技巧,希望能帮助到您. 在 ...

  7. AE 将地图导出为图片的两种方法

    在ArcGIS的开发中,我们经常需要将当前地图打印(或是转出)到图片文件中.将Map或Layout中的图象转出有两种方法,一种为通过IActiveView的OutPut函数,另外一种是通过IExpor ...

  8. jquery生成二维码怎么添加图片(两种方法)

    github项目地址: https://github.com/fengliting/erweima 注意:这里实现的是第一个方法 自动生成二维码里面添加图片,有两种方法,一种是使用jquery原生的二 ...

  9. ArcGIS Engine开发系列:将地图导出为图片的两种方法

    转自:http://blog.sina.com.cn/s/blog_4c5f70df0100a0ti.html 在ArcGIS的开发中,我们经常需要将当前地图打印(或是转出)到图片文件中.将Map或L ...

最新文章

  1. React篇-报错信息:warning: Can't call setState (or forceUpdate) on an unmounted component.
  2. 求积问题[体会Python至简之道]
  3. leetcode48. 旋转图像
  4. hbase 学习(十三)集群间备份原理
  5. [Unity][FlowCanvas] FlowScript 搜索功能不可用的解决办法:更新 UnityEditor 的版本
  6. HDU ACM 1224 Free DIY Tour (SPFA)
  7. 中怎么提取时间中的月份_怎么提取图片中的文字?花上1分钟学会,轻松提取,按时下班...
  8. 联想Z5 Pro划时代旗舰发布,屏占比95.06%售价1998元起
  9. vue-cli工具搭建vue-webpack项目
  10. Error occurred during initialization of VM Could not reserve enough space for object heap
  11. 产品读书《大数据时代:生活、工作与思维的大变革》
  12. centos7安装nexus3
  13. 结构梁配筋最牛插件_多高层钢筋混凝土结构最困惑的29个问题及方法解析全汇总...
  14. 如何在springboot中返回jsp页面
  15. CTF Broadcast
  16. 红队web打点信息收集
  17. gym101908 F. Music Festival(状压dp)
  18. Swift 中的热重载
  19. 用外部html圆形里装数字,如何使用CSS用圆圈包围数字?
  20. Python 读书笔记(1)

热门文章

  1. 继承方式一:原型链继承
  2. kotlin isBlank和isEmpty的区别
  3. Nginx部署vue项目
  4. linux vtune 生成文字报告,文字报告太枯燥,教你一招,只需十分钟,一屏可视化!...
  5. Git 与 GitHub 、GitLab 区别(学习笔记)
  6. Linux中的防火墙技术(一)firewall
  7. 【PS-7】移动工具
  8. oracle not empty,oracle 删除表空间错误 ORA-01549: tablespace not empty, use INCLUDING CONTENTS option...
  9. iOS仿QQ空间时间显示
  10. 不断在创业路上寻找突破,他开店多家,没想到公司还上市了