自定义ImageView画圆
来源:互联网 发布:微信提现制作软件在线 编辑:程序博客网 时间:2024/06/05 22:34
- 在布局中引用这个类
package com.example.administrator.okhttp;import android.content.Context;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.PorterDuff;import android.graphics.PorterDuffXfermode;import android.graphics.Rect;import android.graphics.drawable.BitmapDrawable;import android.graphics.drawable.Drawable;import android.util.AttributeSet;import android.widget.ImageView;/** * Created by Administrator on 2016/6/15. */public class CircleView extends ImageView { /** * 三个构造方法 */ public CircleView(Context context) { super(context); // TODO Auto-generated constructor stub } public CircleView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // TODO Auto-generated constructor stub } public CircleView(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub } /** * 绘制图形的onDraw方法 */ @Override protected void onDraw(Canvas canvas) { Drawable draw = getDrawable(); // 空值判断,必要步骤,避免由于没有设置src 导致的异常错误 if (draw == null) { return; } // 必要步骤,避免由于初始化之前导致的异常错误 /** * 获取 宽高,若获得不到宽高,则直接结束流程 */ if (getWidth() == 0 || getHeight() == 0) { return; } /** * 判断该对象是否是BitmapDrawable或其子类的实例 */ if (!(draw instanceof BitmapDrawable)) { return; } Bitmap b = ((BitmapDrawable) draw).getBitmap(); if (null == b) { return; } Bitmap bitmap = b.copy(Bitmap.Config.ARGB_8888, true); int w = getWidth(); int h = getHeight(); Bitmap roundBitmap = getCroppedBitmap(bitmap, w); canvas.drawBitmap(roundBitmap, 0, 0, null); } /** * 初始化Bitmap对象的缩放裁剪过程 * * @param bmp * 初始化Bitmap对象 * @param radius * 圆形图片致敬大小 * @return 返回一个圆形的缩放裁剪过后的Bitmap对象 */ public static Bitmap getCroppedBitmap(Bitmap bmp, int radius) { Bitmap sbmp; // 比较初始Bitmap宽高和给定的圆形直径,判断是否需要缩放裁剪Bitmap对象 if (bmp.getWidth() != radius || bmp.getHeight() != radius) { sbmp = Bitmap.createScaledBitmap(bmp, radius, radius, false); } else { sbmp = bmp; } Bitmap output = Bitmap.createBitmap(sbmp.getWidth(), sbmp.getHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(output); Paint paint = new Paint(); Rect rect = new Rect(0, 0, sbmp.getWidth(), sbmp.getHeight()); // 抗锯齿 paint.setAntiAlias(true); // 获取更清晰的图像采样 paint.setFilterBitmap(true); // 防抖动 paint.setDither(true); // 设置颜色,这里Android内部定义的有Color类包含了一些常见颜色的定义 paint.setColor(Color.parseColor("#BAB399")); /** * //设置为本缩放倍数 * paint.setTextScaleX(float scaleX); * //设置下划线 * paint.setUnderlineText(boolean underlineText); * //设置alpha不透明度,范围为0~255 * paint.setAlpha(int a); * //设置 Paint对象颜色,参数一为alpha透明值 * paint.setARGB(int a, int r, int g, int b); */ // 将会以颜色ARBG填充整个控件的Canvas背景 canvas.drawARGB(0, 0, 0, 0); canvas.drawCircle(sbmp.getWidth() / 2 + 0.7f, sbmp.getHeight() / 2 + 0.7f, sbmp.getWidth() / 2 + 0.1f, paint); /** * 核心部分,设置两张图片的相交模式,这里就是上面绘制的Circle和下面绘制的Bitmap * * 系统提供的Xfermode子类有三个: * * AvoidXfermode : * 指定了一个颜色和容差,强制Paint避免在它上面绘图(或者只在它上面绘图)。 * * PixelXorXfermode : * 当覆盖已有的颜色时,应用一个简单的像素XOR操作。 * * PorterDuffXfermode : * 这是一个非常强大的转换模式,使用它,可以使用图像合成的16条PorterDuff规则的任意一条来控制Paint如何与已有的Canvas图像进行交互。 * * canvas原有的图片就是北京,既dst,新画上去的图片就是前景src * */ paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); canvas.drawBitmap(sbmp, rect, rect, paint); return output; }}
1 0
- 自定义ImageView画圆
- 自定义ImageView
- 自定义ImageView
- 自定义ImageView
- 自定义 imageView
- 自定义Imageview
- 自定义ImageView
- 自定义imageView
- ImageView 自定义
- imageview 自定义
- 自定义imageview
- 自定义ImageView
- 自定义ImageView
- 自定义imageView
- Android自定义View(ImageView画圆)
- 自定义ImageView重写onTouchEvent
- 自定义ImageView重写onTouchEvent
- 自定义ImageView放大镜控件
- 平台业务表字段设置
- 左右滑动切换图片
- 零基础写python爬虫之使用Scrapy框架编写爬虫
- 异常之Java访问异常信息
- android 图片压缩奇葩问题
- 自定义ImageView画圆
- 关于登陆界面背景图片缩放变形的解决方法
- 回忆跳槽
- 文件转换成byte[]数组 / byte[]生成文件
- spring3.2 @Scheduled注解 定时任务
- [乐意黎转载] Understanding user-agent strings
- python支持多线程的爬虫
- 指针与const限定符
- netstat查看端口状态