PorterDuffXfermode的简单使用之画圆形头像
来源:互联网 发布:格瓦拉网络购票 编辑:程序博客网 时间:2024/06/05 19:34
PorterDuffXfermode的用法之教你画圆形头像
- 这里我们就直接在onDraw方法中操作了,首先应该创建一个画笔,需要注意的是,创建的画笔不要设置style为stroke,使用默认的即可.
- 根据源图实例化一个Bitmap对象,
bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.timg);
然后再利用该实例创建一个副本(因为Android系统中,是不允许直接修改源图的):bmp = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(),Bitmap.Config.ARGB_8888);
- 根据Bitmap副本创建一个Canvas对象
Canvas mCanvas = new Canvas(bmp);
表示之后的绘画操作都是发生在这个副本上的. - 然后利用创建出来的mCanvas对象来画一个圆形遮罩
mCanvas.drawCircle(bitmap.getWidth() / 2, bitmap.getHeight() / 2,bitmap.getWidth() / 2, paint2);
- 接下来就是关键步骤了
paint2.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
这里就用到了PorterDuffXfermode类了,它就是用来设置draw方法之前和之后图像的关系的: - 然后将源图画在mCanvas对象上
mCanvas.drawBitmap(bitmap, 0, 0, paint2);
- 此时副本上的图像就画好了,最后将这个Bitmap画到onDraw方法中指定canvas对象上
canvas.drawBitmap(bmp, 0, 0, paint1);
完整代码:
package com.qianyue.testdensity;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Paint.Style;import android.graphics.PorterDuff;import android.graphics.PorterDuffXfermode;import android.graphics.RectF;import android.util.AttributeSet;import android.view.View;public class DrawPaint extends View { private static final float WIDTH = 5; Paint paint1; Paint paint2; private Bitmap bitmap; private Bitmap bmp;public DrawPaint(Context context, AttributeSet attrs) { this(context, attrs, 0);}public DrawPaint(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init();}public DrawPaint(Context context) { this(context, null);}private void init() { paint1 = new Paint(); paint1.setColor(Color.RED); paint1.setStrokeWidth(WIDTH); paint2 = new Paint(); paint2.setAntiAlias(true); paint2.setStrokeWidth(WIDTH); setBackgroundColor(Color.TRANSPARENT); bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.timg); bmp = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);}@Overrideprotected void onDraw(Canvas canvas) { Canvas mCanvas = new Canvas(bmp); mCanvas.drawCircle(bitmap.getWidth() / 2, bitmap.getHeight() / 2, bitmap.getWidth() / 2, paint2); paint2.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); mCanvas.drawBitmap(bitmap, 0, 0, paint2); canvas.drawBitmap(bmp, 0, 0, paint1);}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int getWidth = bitmap.getWidth(); int getHeight = bitmap.getHeight(); int widthMode = MeasureSpec.getMode(widthMeasureSpec); int heightMode = MeasureSpec.getMode(heightMeasureSpec); int newWidth = MeasureSpec.makeMeasureSpec(getWidth, widthMode); int newHeight = MeasureSpec.makeMeasureSpec(getHeight, heightMode); super.onMeasure(newWidth, newHeight);}}
效果图
v怪客
0 0
- PorterDuffXfermode的简单使用之画圆形头像
- 简单的圆形头像
- 画圆形头像的简单画法
- Glide 圆形头像的使用
- ShapeDrawable画圆形的头像
- Android 最简单的圆形头像
- IOS之圆形头像的实现
- 使用CSS实现圆形头像的设计
- 圆形头像持续旋转的使用
- Bitmap之圆形头像
- QT之圆形头像
- Android圆形头像。简单实用零依赖,拷贝即可使用
- Android学习研究(四)通过PorterDuffXfermode形成简单的圆角和圆形图片
- 将UIView的子类变为圆形的简单实现方式(圆形头像、圆形按钮)
- 圆形头像的做法
- 圆形的头像
- 圆形的头像
- android圆形的头像
- Git与Repo入门
- IndexedDB
- Java解压缩zip - 解压缩多个文件或文件夹
- POj1852--Ants
- ubuntu12.04+Elasticsearch2.3.3伪分布式配置,集群状态分片调整
- PorterDuffXfermode的简单使用之画圆形头像
- UIViewController的生命周期及iOS程序执行顺序
- bfs加条件的移动以及三个起点(难题;一直wa)
- HttpUrlConnection多文件上传问题
- iOS 调用系统通讯录 获取联系人信息
- 在Android Studio中直接编译C/C++文件
- Android开发_Sharedpreferences_存储数据使用方法_完整Demo_AndroidStudio
- 关于static问题的分析
- tomcat无法关闭问题