[转]android 自定义圆形imageview控件
首先,定义定义圆形Imageview类:
- 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.PorterDuff.Mode;
- 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;
- public class RoundImageView extends ImageView {
- public RoundImageView(Context context) {
- super(context);
- // TODO Auto-generated constructor stub
- }
- public RoundImageView(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
- public RoundImageView(Context context, AttributeSet attrs, int defStyle) {
- super(context, attrs, defStyle);
- }
- @Override
- protected void onDraw(Canvas canvas) {
- Drawable 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();
- Bitmap roundBitmap = getCroppedBitmap(bitmap, w);
- canvas.drawBitmap(roundBitmap, 0,0, null);
- }
- public static Bitmap getCroppedBitmap(Bitmap bmp, int radius) {
- Bitmap sbmp;
- 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(), Config.ARGB_8888);
- Canvas canvas = new Canvas(output);
- final int color = 0xffa19774;
- final Paint paint = new Paint();
- final Rect rect = new Rect(0, 0, sbmp.getWidth(), sbmp.getHeight());
- paint.setAntiAlias(true);
- paint.setFilterBitmap(true);
- paint.setDither(true);
- canvas.drawARGB(0, 0, 0, 0);
- paint.setColor(Color.parseColor("#BAB399"));
- canvas.drawCircle(sbmp.getWidth() / 2+0.7f, sbmp.getHeight() / 2+0.7f,
- sbmp.getWidth() / 2+0.1f, paint);
- paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
- canvas.drawBitmap(sbmp, rect, rect, paint);
- return output;
- }
- }
然后在别的布局文件中使用该控件即可,如:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:background="@drawable/side_right"
- android:gravity="center"
- android:orientation="vertical" >
- <LinearLayout
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:gravity="center"
- android:layout_marginTop="35dip"
- android:orientation="vertical" >
- <<span style="color:#ff0000;">com.founder.reader.view.RoundImageView</span>
- android:id="@+id/right_login_head"
- android:layout_width="60dip"
- android:layout_height="60dip"
- android:scaleType="centerInside"
- android:src="@drawable/user" />
[转]android 自定义圆形imageview控件的更多相关文章
- android 自定义空间 组合控件中 TextView 不支持drawableLeft属性
		android 自定义空间 组合控件中 TextView 不支持drawableLeft属性.会报错Caused by: android.view.InflateException: Binary X ... 
- (转载)Android自定义标签列表控件LabelsView解析
		Android自定义标签列表控件LabelsView解析 作者 donkingliang 关注 2017.03.15 20:59* 字数 759 阅读 406评论 0喜欢 3 无论是在移动端的App, ... 
- Android自定义View和控件之一-定制属于自己的UI
		照例,拿来主义.我的学习是基于下面的三篇blog.前两是基本的流程,第三篇里有比较细致的绘制相关的属性.第4篇介绍了如何减少布局层次来提高效率. 1. 教你搞定Android自定义View 2. 教你 ... 
- Android 自定义View修炼-如何打造Android自定义的下拉列表框控件
		一.概述 Android中的有个原生的下拉列表控件Spinner,但是这个控件有时候不符合我们自己的要求, 比如有时候我们需要类似windows 或者web网页中常见的那种下拉列表控件,类似下图这样的 ... 
- Android自定义控件进阶-打造Android自定义的下拉列表框控件
		技术:Android+java 概述 Android中的有个原生的下拉列表控件Spinner,但是这个控件有时候不符合我们自己的要求, 比如有时候我们需要类似windows 或者web网页中常见的 ... 
- Android 如何打造Android自定义的下拉列表框控件
		一.概述 Android中的有个原生的下拉列表控件Spinner,但是这个控件有时候不符合我们自己的要求, 比如有时候我们需要类似windows 或者web网页中常见的那种下拉列表控件,类似下图这样的 ... 
- Android自定义标签列表控件LabelsView解析
		版权声明:本文为博主原创文章,未经博主允许不得转载. 无论是在移动端的App,还是在前端的网页,我们经常会看到下面这种标签的列表效果: 标签从左到右摆放,一行显示不下时自动换行.这样的效果用And ... 
- Android自定义“图片+文字”控件四种实现方法之 二--------个人最推荐的一种
		http://blog.csdn.net/yanzi1225627/article/details/8633872 第二种方法也要新建一个图片+文字的xml布局文件,然后写一个类继承自LinearLa ... 
- 自定义圆形图片控件CircleImageView的实现
		package com.loaderman.circleimageviewdemo; import android.content.Context; import android.content.re ... 
随机推荐
- Docker微容器Alpine Linux
			Alpine 操作系统是一个面向安全的轻型 Linux 发行版. 它不同于通常 Linux 发行版,Alpine 采用了 musl libc 和 busybox 以减小系统的体积和运行时资源消耗,但功 ... 
- python基础===用9种方式生成新的对象
			class Point: def __init__(self, x, y): self.x = x self.y = y point1 = Point(1, 2) point2 = eval(&quo ... 
- 64.Minimum Path Sum---dp
			题目链接:https://leetcode.com/problems/minimum-path-sum/description/ 题目大意:从左上到右下的路径中,找出路径和最小的路径(与62,63题相 ... 
- Enumeration的学习
			枚举是jdk5.0之后的新特性.枚举的使用在编程中能起到很大的作用,本文从枚举的适用范围.枚举的特点.枚举的使用等三个方面学习枚举 一.枚举的使适用范围 “在有限的范围内选择值”:比如一个星期只有星期 ... 
- 在ubuntu 上安装sublime
			1.在sublime官网上下载sublime 2.将下载包解压到指定位置(自己决定) 3.进入解压文件里面 4.鼠标选中sublime_text,点击右键运行. 5.锁在启动器. 
- webservice使用
			soap方法 一:PHP本身的SOAP 所有的webservice都包括服务端(server)和客户端(client). 要使用php本身的soap首先要把该拓展安装好并且启用.下面看具体的code ... 
- HDU 1255 覆盖的面积(线段树:扫描线求面积并)
			题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1255 题目大意:给你若干个矩形,让你求这些矩形重叠两次及以上的部分的面积. 解题思路:模板题,跟HDU ... 
- PHP 分割字串 Function 的速度比較(substr/sscanf/preg_match)---substr最快!
			固定長度的字串(假設是 06481a63041b578d702f159f520847f8), 要照固定格式做切割, 使用 PHP 要怎麼切會比較快? 註: 要將此字串切成 => 06 / 48 ... 
- 【PAT】1002. A+B for Polynomials (25)
			1002. A+B for Polynomials (25) This time, you are supposed to find A+B where A and B are two polynom ... 
- 开源IDS系列--解决barnyard2 停止运行 libmysqlclient.so.16.0.0
			现象: barnyard2运行一段时间后,会自行停止,未在/var/log/barnyard2或/var/log/suricata中发现相关日志. 排查: 在/var/log/message中存在以下 ... 
