自定义view imageviw
新建一个类继承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相关推荐
- Android自定义View基本步骤
一.自定义属性 1.在res下的values下面新建attrs.xml 2.在布局中使用,声明命名空间 3.在自定义View构造方法中通过TypedArray获取属性 4.必须回收 array.rec ...
- Android自定义View —— TypedArray
在上一篇中Android 自定义View Canvas -- Bitmap写到了TypedArray 这个属性 下面也简单的说一下TypedArray的使用 TypedArray 的作用: 用于从该结 ...
- Android 自定义View Canvas —— Bitmap
Bitmap 绘制图片 常用的方法有一下几种 (1) drawBitmap(@NonNull Bitmap bitmap, float left, float top, @Nullable Paint ...
- Android 自定义View —— Canvas
上一篇在android 自定义view Paint 里面 说了几种常见的Point 属性 绘制图形的时候下面总有一个canvas ,Canvas 是是画布 上面可以绘制点,线,正方形,圆,等等,需要和 ...
- Android 自定义View —— Paint
上一篇说了自定义view的坐标系以及view 的使用,下面说下自定义view Paint 的使用 Paint 相对于画笔 ,可以使用Paint 来决定画的内容的颜色,边距粗细,设置样式,字体大小 ,等 ...
- Android 自定义View (入门 篇) 的使用
每次都是过了很久都需要温习一下,自己打算整理一下方便查阅, 自定义view 首选需要明白的就是它的坐标系了,以手机左上角为起始点(0.0),横向的为x轴,竖向的为y轴 为了更好的理解我画了一幅草图如下 ...
- 28自定义View 模仿联系人字母侧栏
自定义View LetterView.java package com.qf.sxy.customview02;import android.content.Context; import andro ...
- android炫酷的自定义view,Android自定义View实现炫酷进度条
本文实例为大家分享了Android实现炫酷进度条的具体代码,供大家参考,具体内容如下 下面我们来实现如下效果: 第一步:创建attrs文件夹,自定义属性: 第二步:自定义View: /** * Cre ...
- android 自定义音乐圆形进度条,Android自定义View实现音频播放圆形进度条
本篇文章介绍自定义View配合属性动画来实现如下的效果 实现思路如下: 根据播放按钮的图片大小计算出圆形进度条的大小 根据音频的时间长度计算出圆形进度条绘制的弧度 通过Handler刷新界面来更新圆形 ...
最新文章
- python quit函数作用_Python常用函数学习笔记
- 《嵌入式 Linux应用程序开发标准教程(第2版)》——第1章 Linux快速入门 1.1 嵌入式Linux基础...
- 使用Storm实现WordCount
- 整理:深度学习 vs 机器学习 vs 模式识别
- GHOST光盘制作详细教程
- 学妹问我Java枚举类与注解,我直接用这个搞定她!
- activiti学习--08 连线
- GitHub推出云端IDE,可在浏览器里使用VS Code了
- es6 ArrayBuffer对象
- java short uuid_MySQL-使用UUID_SHORT( ) 的问题
- ATAC-seq原理及现有技术的比较
- python---用python实现选择排序
- pandas中merge()函数的用法详解
- 3dMax 整体旋转与自转
- 整理2005年至2019年东盟10国GDP数据
- Information Bottleneck 信息瓶颈
- 栈溢出学习(四)之Hijack GOT
- Windows 用 CMD 打开 WAMP5 的MySQL数据库
- 公务卡引发多米诺效应 推动POS系统“繁荣”
- 团体程序设计天梯赛 -- 练习集 (L1合集)
热门文章
- 安装docker环境
- animate改变背景颜色_3D MAX2016视口背景设置里各参数的含义详解 - 3dmax基础操作入门教程-3dmax材质教程,3d材质贴图教程参数,vray材质参数,3dmax贴图教程...
- python gui界面设置数据储存在哪里_Python写GUI
- python数据科学课后答案_Python数据科学-技术详解与商业实践-第五讲作业
- 评分卡模型开发(七)--基于逻辑回归的标准评分卡实现
- 运动目标跟踪(十五)--WMIL跟踪
- linux通过xrander添加分辨率,使用X11,XDamage,XRender和其他技巧保留屏幕内容的QPixmap副本...
- Eclipse配Tomcat服务器
- mysql 禁用swap_MySQL如何避免使用swap
- python连接postgis_python连接PostgreSQL