新建一个类继承imageview

package com.exaple.myselfview;import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ImageView;public class MyView extends ImageView {public MyView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);// TODO Auto-generated constructor stub}public MyView(Context context) {super(context);// TODO Auto-generated constructor stub}public MyView(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stub}@Overrideprotected void onDraw(Canvas canvas) {// TODO Auto-generated method stubDrawable drawable = getDrawable();if (drawable == null) {return;}if (getWidth() == 0 || getHeight() == 0) {return;}Bitmap b = ((BitmapDrawable) drawable).getBitmap();if (null == b){return;}Bitmap bitmap = b.copy(Bitmap.Config.ARGB_8888, true);// //获取图片的宽 高int w = getWidth(), h = getHeight();// 通过getCroppedBitmap函数,返回一个圆形图片Bitmap roundBitmap = getCroppedBitmap(bitmap, w);// 在自定义的CircleImageEx上展现canvas.drawBitmap(roundBitmap, 0, 0, null);/* super.onDraw(canvas); */}public static Bitmap getCroppedBitmap(Bitmap bmp, int radius) {Bitmap p;// 判断图片的大小与传入radius是否相等,如果不相等,那么// 将图片设置成长 宽都是radius的图片if (bmp.getWidth() != radius || bmp.getHeight() != radius)p = Bitmap.createScaledBitmap(bmp, radius, radius, false);elsep = bmp;// 最后输出的图片信息Bitmap output = Bitmap.createBitmap(p.getWidth(),p.getHeight(), Config.ARGB_8888);Canvas canvas = new Canvas(output);final int color = 0xffa19774;final Paint paint = new Paint();final Rect rect = new Rect(0, 0, p.getWidth(), p.getHeight());// 画笔加上 抗锯齿标志,图像更加平滑paint.setAntiAlias(true);// 如果该项设置为true,则图像在动画进行中会滤掉对Bitmap图像的优化操作,加快显示paint.setFilterBitmap(true);// 防抖动paint.setDither(true);// 透明色canvas.drawARGB(0, 0, 0, 0);// 画笔的颜色paint.setColor(Color.parseColor("#BAB399"));// 画出一个圆形canvas.drawCircle(p.getWidth() / 2, p.getHeight() / 2,p.getWidth() / 2 + 0.1f, paint);// 设置两张图片相交时的模式 ,就是在画布上遮上圆形的图片信息paint.setXfermode(new PorterDuffXfermode(android.graphics.PorterDuff.Mode.SRC_IN));canvas.drawBitmap(p, rect, rect, paint);return output;}}

  在xml中一定要src而不是background

转载于:https://www.cnblogs.com/jsonfan/p/5369573.html

自定义view imageviw相关推荐

  1. Android自定义View基本步骤

    一.自定义属性 1.在res下的values下面新建attrs.xml 2.在布局中使用,声明命名空间 3.在自定义View构造方法中通过TypedArray获取属性 4.必须回收 array.rec ...

  2. Android自定义View —— TypedArray

    在上一篇中Android 自定义View Canvas -- Bitmap写到了TypedArray 这个属性 下面也简单的说一下TypedArray的使用 TypedArray 的作用: 用于从该结 ...

  3. Android 自定义View Canvas —— Bitmap

    Bitmap 绘制图片 常用的方法有一下几种 (1) drawBitmap(@NonNull Bitmap bitmap, float left, float top, @Nullable Paint ...

  4. Android 自定义View —— Canvas

    上一篇在android 自定义view Paint 里面 说了几种常见的Point 属性 绘制图形的时候下面总有一个canvas ,Canvas 是是画布 上面可以绘制点,线,正方形,圆,等等,需要和 ...

  5. Android 自定义View —— Paint

    上一篇说了自定义view的坐标系以及view 的使用,下面说下自定义view Paint 的使用 Paint 相对于画笔 ,可以使用Paint 来决定画的内容的颜色,边距粗细,设置样式,字体大小 ,等 ...

  6. Android 自定义View (入门 篇) 的使用

    每次都是过了很久都需要温习一下,自己打算整理一下方便查阅, 自定义view 首选需要明白的就是它的坐标系了,以手机左上角为起始点(0.0),横向的为x轴,竖向的为y轴 为了更好的理解我画了一幅草图如下 ...

  7. 28自定义View 模仿联系人字母侧栏

    自定义View LetterView.java package com.qf.sxy.customview02;import android.content.Context; import andro ...

  8. android炫酷的自定义view,Android自定义View实现炫酷进度条

    本文实例为大家分享了Android实现炫酷进度条的具体代码,供大家参考,具体内容如下 下面我们来实现如下效果: 第一步:创建attrs文件夹,自定义属性: 第二步:自定义View: /** * Cre ...

  9. android 自定义音乐圆形进度条,Android自定义View实现音频播放圆形进度条

    本篇文章介绍自定义View配合属性动画来实现如下的效果 实现思路如下: 根据播放按钮的图片大小计算出圆形进度条的大小 根据音频的时间长度计算出圆形进度条绘制的弧度 通过Handler刷新界面来更新圆形 ...

最新文章

  1. python quit函数作用_Python常用函数学习笔记
  2. 《嵌入式 Linux应用程序开发标准教程(第2版)》——第1章 Linux快速入门 1.1 嵌入式Linux基础...
  3. 使用Storm实现WordCount
  4. 整理:深度学习 vs 机器学习 vs 模式识别
  5. GHOST光盘制作详细教程
  6. 学妹问我Java枚举类与注解,我直接用这个搞定她!
  7. activiti学习--08 连线
  8. GitHub推出云端IDE,可在浏览器里使用VS Code了
  9. es6 ArrayBuffer对象
  10. java short uuid_MySQL-使用UUID_SHORT( ) 的问题
  11. ATAC-seq原理及现有技术的比较
  12. python---用python实现选择排序
  13. pandas中merge()函数的用法详解
  14. 3dMax 整体旋转与自转
  15. 整理2005年至2019年东盟10国GDP数据
  16. Information Bottleneck 信息瓶颈
  17. 栈溢出学习(四)之Hijack GOT
  18. Windows 用 CMD 打开 WAMP5 的MySQL数据库
  19. 公务卡引发多米诺效应 推动POS系统“繁荣”
  20. 团体程序设计天梯赛 -- 练习集 (L1合集)

热门文章

  1. 安装docker环境
  2. animate改变背景颜色_3D MAX2016视口背景设置里各参数的含义详解 - 3dmax基础操作入门教程-3dmax材质教程,3d材质贴图教程参数,vray材质参数,3dmax贴图教程...
  3. python gui界面设置数据储存在哪里_Python写GUI
  4. python数据科学课后答案_Python数据科学-技术详解与商业实践-第五讲作业
  5. 评分卡模型开发(七)--基于逻辑回归的标准评分卡实现
  6. 运动目标跟踪(十五)--WMIL跟踪
  7. linux通过xrander添加分辨率,使用X11,XDamage,XRender和其他技巧保留屏幕内容的QPixmap副本...
  8. Eclipse配Tomcat服务器
  9. mysql 禁用swap_MySQL如何避免使用swap
  10. python连接postgis_python连接PostgreSQL