转自  Android Drawable 那些不为人知的高效用法

本文出自:【张鸿洋的博客】 http://blog.csdn.net/lmj623565791/article/details/43752383

调用方式:

imageView.setImageDrawable(new RoundImageDrawable(BitmapFactory.decodeResource(getResources(), R.mipmap.login))); 

RoundImageDrawable.java

package de.bvb.rxdemo.widget;

import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.RectF;
import android.graphics.Shader;
import android.graphics.drawable.Drawable; /**
* 设置圆形图片,调用方式为为:
* imageView.setImageDrawable(new RoundImageDrawable(BitmapFactory.decodeResource(getResources(), R.mipmap.login)));
*/
public class RoundImageDrawable extends Drawable {
private Bitmap bitmap;
private Paint paint;
private RectF rectF; public RoundImageDrawable(Bitmap bitmap) {
this.bitmap = bitmap;
paint = new Paint();
paint.setAntiAlias(true);
paint.setDither(true);
paint.setShader(new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP));
} @Override
public void setBounds(int left, int top, int right, int bottom) {
super.setBounds(left, top, right, bottom);
rectF = new RectF(left, top, right, bottom);
} @Override
public void draw(Canvas canvas) {
canvas.drawRoundRect(rectF, 40, 40, paint);
} @Override
public int getIntrinsicHeight() {
return bitmap.getHeight();
} @Override
public int getIntrinsicWidth() {
return bitmap.getWidth();
} @Override
public void setAlpha(int alpha) {
paint.setAlpha(alpha);
} @Override
public void setColorFilter(ColorFilter colorFilter) {
paint.setColorFilter(colorFilter);
} @Override
public int getOpacity() {
return PixelFormat.TRANSLUCENT;
}
}

CircleImageDrawable.java

package de.bvb.rxdemo.widget;

import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.Shader;
import android.graphics.drawable.Drawable; /**
* 设置圆形图片,调用方式为为:
* imageView.setImageDrawable(new CircleImageDrawable(BitmapFactory.decodeResource(getResources(), R.mipmap.login)));
*/
public class CircleImageDrawable extends Drawable { private Bitmap bitmap;
private Paint paint;
private int radius; public CircleImageDrawable(Bitmap bitmap) {
this.bitmap = bitmap;
paint = new Paint();
paint.setAntiAlias(true);
paint.setDither(true);
paint.setShader(new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP));
radius = Math.min(bitmap.getWidth(), bitmap.getHeight()) / 2;
} @Override
public int getIntrinsicWidth() {
return radius * 2;
} @Override
public int getIntrinsicHeight() {
return radius * 2;
} @Override
public void draw(Canvas canvas) {
canvas.drawCircle(radius, radius, radius, paint);
} @Override
public void setAlpha(int alpha) {
paint.setAlpha(alpha);
} @Override
public void setColorFilter(ColorFilter colorFilter) {
paint.setColorFilter(colorFilter);
} @Override
public int getOpacity() {
return PixelFormat.TRANSLUCENT;
}
}

Android 使用自定义Drawable 设置圆角矩形或者圆形图片的更多相关文章

  1. android 利用Bitmap获取圆角矩形、圆形图片

    1.在很多时候,我们要显示图片资源,需要将他的资源显示为圆角的:示例源码如下: public static Bitmap getRoundedCornerBitmap(Bitmap bitmap,fl ...

  2. iOS设置圆角矩形和阴影效果

    1.设置圆角矩形 //设置dropview属性 _dropView.backgroundColor=[[UIColor whiteColor] colorWithAlphaComponent:0.8] ...

  3. Android 中shape的使用(圆角矩形)

    一.在res/drawable文件夹下创建一个名为gradient_box的xml文件: <?xml version="1.0" encoding="utf-8&q ...

  4. 详解使用CSS3绘制矩形、圆角矩形、圆形、椭圆形、三角形、弧

    1.矩形 绘制矩形应该是最简单的了,直接设置div的宽和高,填充颜色,效果就出来了. 2.圆角矩形 绘制圆角矩形也很简单,在1的基础上,在使用css3的border-radius,即可. 3.圆 根据 ...

  5. android通过Canvas和Paint截取无锯齿圆形图片

    一个通过Canvas和Paint截取无锯齿圆形图片. /** * 根据原图和变长绘制圆形图片 * * @param source * @param min * @return */ public st ...

  6. Android 利用Sharp样式设置文本框EditText圆角形状

    1.首先新建样式文件editsharp.xml: <?xml version="1.0" encoding="utf-8"?> <shape ...

  7. Android中的Drawable资源

    在Android应用中,常常会用到Drawable资源,比如图片资源等,在Android开发中我们是用Drawable类来Drawable类型资源的. Drawable资源一般存储在应用程序目录的\r ...

  8. android自定义控件,动态设置Button的样式

    原文  http://www.cnblogs.com/landptf/p/4562203.html 今天来看一个通过重写Button来动态实现一些效果,如圆角矩形.圆形.按下改变字体,改变背景色,改变 ...

  9. Android圆形图片不求人,自定义View实现(BitmapShader使用)

    在很多APP当中,圆形的图片是必不可少的元素,美观大方.本文将带领读者去实现一个圆形图片自定View,力求只用一个Java类来完成这件事情. 一.先上效果图 二.实现思路 在定义View 的onMea ...

随机推荐

  1. WindowsForm客户端自动更新逻辑

    启动客户端的时候,单独开一个线程,该线程主要是判断指定服务器上的更新包和本地使用的客户端是否一致,是否需要更新,不需要更新,则退出,需要更新则从服务端的下载更新包,然后提示用户是否更新,点击更新,启动 ...

  2. p2p通信原理及实现

    1.简介 当今互联网到处存在着一些中间件(MIddleBoxes),如NAT和防火墙,导致两个(不在同一内网)中的客户端无法直接通信.这些问题即便是到了IPV6时代也会存在,因为即使不需要NAT,但还 ...

  3. SQL-W3School-函数:SQL MAX() 函数

    ylbtech-SQL-W3School-函数:SQL MAX() 函数 1.返回顶部 1. MAX() 函数 MAX 函数返回一列中的最大值.NULL 值不包括在计算中. SQL MAX() 语法 ...

  4. 真正解决方案:java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter

    今天在使用JDK 12.0 环境下使用Hibernate 时候出现了这个错误,错误日志如下: 故障原因: JAXB API是java EE 的API,因此在java SE 9.0 中不再包含这个 Ja ...

  5. 【420】链表实现Quack

    quack.h // quack.h: an interface definition for a queue/stack #include <stdio.h> #include < ...

  6. SpringBoot集成tk mybatis插入数据,回显主键为null

    实体信息如下 @Data public class ApiCertificate{ @Id @GeneratedValue(generator = "JDBC") private ...

  7. Win10使用mysqldump导出csv文件及期间遇到的问题

    作为测试,我们这里使用了名为testdb的数据库中的名为test_table的表,首先我们使用如下SQL来查看其中有何数据: select * from testdb.test_table 数据如下: ...

  8. VLOOKUP函数 from Excel

    1.VLOOKUP函数是Excel中的一个纵向查找函数,它与LOOKUP函数和HLOOKUP函数属于一类函数,在工作中都有广泛应用,例如可以用来核对数据,多个表格之间快速导入数据等函数功能.功能是按列 ...

  9. cisco 各类子网的划分

    C类地址子网划分 /25 子网掩码为128: 1位的取值为1,其他7位的取值为0(10000000): 块大小128: (256-128): 2个子网,每个子网最多包含126台主机: /26 子网掩码 ...

  10. 希望对自学的javascript新手有帮助