Android 模仿微信发送图片 钟罩效果

参考资料http://trylovecatch.iteye.com/blog/1189452
http://bbs.51cto.com/thread-1031415-1.html###

1、添加资源文件:attrs.xml
复制内容到剪贴板
代码:

2、创建自定义组件MaskImage.java
复制内容到剪贴板
代码:
package com.xzw.mask.widget;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.util.AttributeSet;
import android.widget.ImageView;

import com.xzw.mask.R;

public class MaskImage extends ImageView{
int mImageSource=0;
int mMaskSource=0;
RuntimeException mException;

public MaskImage(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.MaskImage, 0, 0);
mImageSource = typedArray.getResourceId(R.styleable.MaskImage_image, 0);
mMaskSource = typedArray.getResourceId(R.styleable.MaskImage_mask, 0);

if (mImageSource == 0 || mMaskSource == 0) {
mException = new IllegalArgumentException(typedArray.getPositionDescription() +
": The content attribute is required and must refer to a valid image.");
}

if (mException != null)
throw mException;
/**
* 主要代码实现
*/
//获取图片的资源文件
Bitmap original = BitmapFactory.decodeResource(getResources(), mImageSource);
//获取遮罩层图片
Bitmap mask = BitmapFactory.decodeResource(getResources(), mMaskSource);
Bitmap result = Bitmap.createBitmap(mask.getWidth(), mask.getHeight(), Config.ARGB_8888);
//将遮罩层的图片放到画布中
Canvas mCanvas = new Canvas(result);
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
//设置两张图片相交时的模式
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
mCanvas.drawBitmap(original, 0, 0, null);
mCanvas.drawBitmap(mask, 0, 0, paint);
paint.setXfermode(null);
setImageBitmap(result);
setScaleType(ScaleType.CENTER);

typedArray.recycle();
}
}
3、在布局文件中添加
复制内容到剪贴板
代码:

这里要记得添加namespace也就是xml的命名空间
复制内容到剪贴板
代码:
xmlns:maskimage="http://schemas.android.com/apk/res/com.xzw.mask"
xmlns:maskimage的自我们自定义的命名空间方式。
命名规则是:
http://schemas.android.com/apk/res/包名

这样代码就实现了遮罩效果了。说了这么多什么是遮罩还没说呢?就是有两张图片,一张图片放在另外一张图片的上面,放在上面的图片叫做遮罩层,下面的叫做被遮罩层,两张图片重叠的部分会显示出来,就形成了遮罩的效果。遮罩用在哪里了,就比如说头像,头像原来是正方形,突然想变成圆形的,这样搞就很简单的实现了。

嘿嘿希望这个功能对大家有帮助哈。
源码: mask.zip (1.06 MB)

参考:
http://stackoverflow.com/questions/12614542/maskingcrop-image-in-frame

http://lipeng88213.iteye.com/blog/1189452

时间: 2024-08-10 15:12:09

Android 模仿微信发送图片 钟罩效果的相关文章

Android 模仿微信启动动画

本文内容 环境 项目结构 演示微信启动动画 本文演示微信启动动画.请点击此处下载,自行调试. 下载 Demo 环境 Windows 2008 R2 64 位 Eclipse ADT V22.6.2,Android 4.4.3 SAMSUNG GT-I9008L,Android OS 2.2.2 项目结构 图 1 项目结构 com.example.weixinbootanimationdemo 包,是三个Activity对应的类,分别是启动时停留的 5 秒动画:5 秒后进入 ViewPager 动

Android 模仿微信启动动画(转)

本文内容 环境 项目结构 演示微信启动动画 本文演示微信启动动画.请点击此处下载,自行调试. 顺便抱怨一下,实践性(与研究性质的相对)技术博的“七宗罪”: 第一宗罪,错字连篇,逻辑不清: 第二宗罪,文章冗长,排版混乱: 第三宗罪,拿来主义,问题不在抄,在自己不做验证.模仿是入门和深入学习的.躲不开的第一步: 第四宗罪,文章空洞,没源代码: 第五宗罪,有源代码,但有缺失: 第六宗罪,源代码不全也就算了,还不提供 Demo 下载: 第七宗罪,有 Demo 可以下载,但他 NND 的还要积分. 下载

ZXing生成二维码和带logo的二维码,模仿微信生成二维码效果

首先说下,QRCode是日本人开发的,ZXing是google开发,barcode4j也是老美开发的,barcode4j对一维条形码处理的很好,而且支持的格式很多,当然也可以对二维码进行处理,效果个人感觉没有前两种好;ZXing对j2me,j2se,还有Android等支持也比较好,如果你是搞Android的或以后准备走Android,建议还是用zxing的比较好,毕竟都一个母亲(goole)生的,QRCode就不用说了吧,虽说技术无国界,但是国人还是有点.... 好,言归正传,java用ZXi

(转)ZXing生成二维码和带logo的二维码,模仿微信生成二维码效果

场景:移动支付需要对二维码的生成与部署有所了解,掌握目前主流的二维码生成技术. 1 ZXing 生成二维码 首先说下,QRCode是日本人开发的,ZXing是google开发,barcode4j也是老美开发的,barcode4j对一维条形码处理的很好,而且支持的格式很多,当然也可以对二维码进行处理,效果个人感觉没有前两种好;ZXing对j2me,j2se,还有Android等支持也比较好,如果你是搞Android的或以后准备走Android,建议还是用zxing的比较好,毕竟都一个母亲(gool

Android模仿微信语音聊天功能

项目效果如下: 项目目录结构如下: 代码如下: AudioManager.java package com.xuliugen.weichat; import java.io.File; import java.io.IOException; import java.util.UUID; import android.media.MediaRecorder; public class AudioManager { private MediaRecorder mMediaRecorder; priv

腾讯大牛动态教学:Android 仿微信 QQ 图片裁剪,赶紧收藏起来!

前言 在平时开发中,经常需要实现这样的功能,拍照 - 裁剪,相册 - 裁剪.当然,系统也有裁剪的功能,但是由于机型,系统兼容性等问题,在实际开发当中,我们通常会自己进行实现.今天,就让我们一起来看看怎样实现. 这篇博客实现的功能主要有仿微信,QQ 上传图像裁剪功能,包括拍照,从相册选取.裁剪框的样式有圆形,正方形,九宫格. 主要讲解的功能点 使用说明 整体的实现思路 裁剪框的实现 图片缩放的实现,包括放大,缩小,移动,裁剪等 我们先来看看我们实现的效果图 使用说明 有两种调用方式 第一种 第一种

Android模仿QQ空间图片上传——原理

MainActivity.class package com.example.imagedemotext; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import an

android自定义View实现图片上传进度显示(仿手机QQ上传效果)

首先看下我们想要实现的效果如下图(qq聊天中发送图片时的效果): 再看一下我实现的效果: 1.效果已经看见了,下面我们来实现它.首先我创建一个android工程ProgressImageView.然后我们重写ImageView控件,创建ProcessImageView类代码如下: package com.example.processimageview; import android.annotation.SuppressLint; import android.content.Context;

Android 拍照、选择图片并裁剪

转载请标明出处: http://blog.csdn.net/xuehuayous/article/details/51324656; 本文出自:[Kevin.zhou的博客] 前言:前段时间做项目用到了图片裁剪,调用系统裁剪图片,结果在我的小米3上一直有问题,裁剪界面打不开,在其他设备上没问题,于是研究其他软件是怎么做的,淘宝的裁剪图片是自己做的,当然没问题,京东的是调用的系统的也是打不开裁剪界面.但是不知道为什么会出现这个问题,在其他小米设备上貌似没有问题.看来调用系统的裁剪图片还是不靠谱的.