本文实例讲述了Android实现图片叠加效果的两种方法。,具体如下:

效果图:

第一种:

第二种:

第一种是通过canvas画出来的效果:

public void first(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 = new Canvas(newBitmap);

Paint paint = new Paint();

int w = bitmap1.getWidth();

int h = bitmap1.getHeight();

int w_2 = bitmap2.getWidth();

int h_2 = bitmap2.getHeight();

paint.setColor(Color.GRAY);

paint.setAlpha(125);

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

paint = new Paint();

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 = new Canvas(newBitmap); 当以newBitmap创建Canvas时,所以操作都已经在该图上实现了。

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

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

public void second(View v) {

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

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

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

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

Drawable[] array = new Drawable[2];

array[0] = new BitmapDrawable(bitmap1);

array[1] = new BitmapDrawable(bitmap2);

LayerDrawable la = new LayerDrawable(array);

// 其中第一个参数为层的索引号,后面的四个参数分别为left、top、right和bottom

la.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文件里的图片

layer-list可以将多个图片按照顺序层叠起来。

语法:在drawalbe/drawable-layer.xml中

android 图片叠加xml,Android实现图片叠加效果的两种方法相关推荐

  1. android 画布叠加,Android实现图片叠加效果的两种方法

    本文实例讲述了Android实现图片叠加效果的两种方法.分享给大家供大家参考,具体如下: 效果图: 第一种: 第二种: 第一种是通过canvas画出来的效果: public void first(Vi ...

  2. Android学习之为按钮添加事件监听器的两种方法

    为按钮(包括普通按钮和图片按钮等)添加单击事件监听器有两种方法,第一种是利用匿名内部类来实现,第二种是使用onClick属性来实现 1.匿名内部类 使用匿名内部类,我们首先需要在布局文件中给按钮设置i ...

  3. java word转pdf,docx4j转pdf,docx4j导出pdf乱码,docx4j导出pdf丢失插画和图片,aspose将word转pdf 一共两种方法

    前言:一共有docx4j转pdf,aspose转pdf两种方式,不需要设置模板!!! java转pdf目前本人使用有两种方法,下面是方法代码 ps:因为本人是云桌面开发,所以只作截图,具体代码需要自己 ...

  4. Android设备用指令查看设备mac地址的两种方法

    Android设备可以用如下两种方法查看设备网络信息 1. ifconfig指令 inet addr 是ip地址 HWaddr 是mac地址 wlan0是wifi的mac地址 eth0是设备第一个以太 ...

  5. 图片轮播的实现(详解两种方法)

    今天带来的是前端里图片轮播的实现,可以说,这两种方法都很简单,尤其第一种,只要是有点基础的应该都可以看懂,这也是小编花费了一定时间想到的代码较少的方式.(图片我放在文末了) 当然也有更复杂的图片,也会 ...

  6. android中默认短信,android开发中设置默认短信应用的两种方法

    第一种:利用反射实现的无弹窗设置 public static final String CLASS_SMS_MANAGER = "com.android.internal.telephony ...

  7. html 图片透明字不透明,CSS实现背景图片透明,文字不透明效果的两种方法

    项目中经常会用到背景图上放一些文字介绍,这里介绍两种技术来实现背景图片透明,文字不透明效果,记录一下,方便日后学习. 1.毛玻璃效果:背景图 + 伪类 + flite:blur(3px) .demo1 ...

  8. 图片怎么转换成PDF格式?这两种方法赶紧记下

    怎么把图片转换成PDF文件格式呢?大家在整理很多张图片的时候,对于一些比较粗心的小伙伴来说非常困难,因为太容易出现错误了,不是照片丢失就是排序出现了问题.针对这种问题,有一个很好的解决方法就是将这些图 ...

  9. 图片怎么转换成PDF格式?这两种方法都可以实现转换

    怎么把图片转换成PDF格式呢?大家在日常中也会经常使用到图片,不管是出门游玩还是办公学习,图片都会给我们带来极大的便利.但是一旦图片的数量多了起来,我们又不能删除,那么这些图片的存放就是一个关键的问题 ...

最新文章

  1. ECShop 增加收藏商品排行榜功能
  2. 使用Mybatis的Generator可能导致的一个错误
  3. 仿微信未读RecyclerView平滑滚动定位效果
  4. HTML转义字符大全 (换行,enter,所有特殊字符)
  5. Differential Geometry之第九章常平均曲率曲面
  6. VS2005的几款代码皮肤。
  7. VC++6.0 内存泄露(Memory Leaks)征兆1
  8. 用 Python 分析上网记录,发现了很多不可思议的事
  9. Spring aop切面插入事物回滚
  10. css中的伪元素:before :after与jQuery中的.before .after的区别
  11. 枚举类型的定义和应用
  12. win10配置oracle环境变量,win10环境下Oracle环境搭建过程
  13. Sample larger than population or is negative
  14. 金融专硕可以用计算机吗,金融硕士考研:考研金融431能带计算器吗?
  15. php 爬取股票数据库,【实例】--股票数据定向爬取
  16. cmd 实用命令以及如何装逼
  17. 思想学习——细节决定成败
  18. 软件测试,功能测试转测开容易吗?
  19. Windows下svn使用教程
  20. 创维Android系统电视去广告,创维电视55E6200酷开系统去开机广告

热门文章

  1. clocks_per_sec 时间不正确_你该拥有的不只是护肤品,还有正确护肤时间表
  2. java http 302重定向_Java 纯HTTP请求 禁止302自动重定向
  3. linux中touch命令的作用,Linux中touch命令的作用是什么
  4. php excel 设置常规_php实现的操作excel类详解
  5. python自动发邮件附件_python自动发送带附件的邮件(163邮箱,亲测可用)
  6. Investigating Div-Sum Property【数位DP】
  7. 一点一点看JDK源码(五)java.util.ArrayList 后篇之removeIf与Predicate
  8. Linux集群架构(LVS DR模式搭建、keepalived + LVS)
  9. Python数据分析入门(四)
  10. Reset Password 重置密码 (CentOS 5,6,7 ; Juniper Networks: SRX100 )