Android开发万能圆角ImageView

作者简介

大家好,新的一周又开始了!本篇来自 马云飞 的投稿,分享了如何实现圆角图片,希望能帮助有需要的朋友。

马云飞 的博客地址:

http://blog.csdn.net/sw950729

正文

最近一两个月没事做,然后就开始封装一些东西,昨天上司让我帮他做的圆角图片。思路自然是和网上的demo不一样的。

网上demo的效果:

差不多应该是这样的,但是容易出一些问题,比如你的图片本身就是个圆角?又或者图片太大,你想缩小显示,但出现显示内容不全?

我想实现的效果是这样的:

图画的较丑,见谅。

意思就是以他的宽高的最小值,为正方形的宽给他做圆角,当然长方形也可以的,因为我试了效果,没有问题,你们到时候可以自己尝试。

参考文章:

http://blog.csdn.net/lmj623565791/article/details/41967509

这是翔神的文章,不过他的效果,并不是我想要的,因为,他的绘图是从(0,0)点然后截取宽高绘图,并不是我想要的重中间截取,然后绘图。

大体代码和他的差不多。不过依旧删除了一些无用的代码(哈哈,这个我抄代码的特性,没用放着干嘛,碍眼。)

好了下面上代码。初始化:

这边我用到了dp2px。这个就是将dp转换成px。网上代码一堆~:

既然继承了ImageView,少不了的自然是onMeasure方法:

下面就是重点了,对 bitmapshader 不了解的,去看看这个:

http://blog.csdn.net/aigestudio/article/details/41799811

设置bitmapshader的代码如下:

如果有人看了前面我给的参考文章,那么,你可以发现,我把这个类的代码进行了改动,差不多就是把图片的起点坐标从(0,0)移动到了我想要的起点。

至于为什么,我们打开ImageView的源码,找到Center_Crop。这快代码的意思差不多是将图片居中把。

来,我们上源码:

他怎么计算的scale我们别管它,重点是如何计算他的dx和dy。

这里我就举个例子来计算。drawable的宽和高是(300,200)。我要绘制的view的宽高是(200,200)。按照 我的思路绘图是从(50,0)到(250,250),而不是(0,0)到(200,200)。

话不多说。我们看源码的计算:

我们画图,来说明这一切,看完图,你或许就懂了。

红色框是我们之后的,那这样,1这块区域可以理解成没了。销毁了。但是实际的效果是这样:

圆形好像看似没什么问题,那你们自己看圆角图片左边是不是被拉伸,这个拉伸距离应该刚好是我们之前计算得到的50dp。因为上图的1那块已经不存在了,所以你画图的时候那快距离就是拉伸的距离。现在我们看看-50dp的图。

1 的部分被移出去了。但他依然是存在的,所以绘制的图是不会出现任何拉伸的。perfect~

属性配置完了,剩下的就是ondraw方法咯。很简单,代码如下:

当然你也得考虑到 onsizechanged 的时候,代码也不多:

好了。在这边我补上attrs属性:

现在。一个完美的,万能的圆角ImageVIew就解决了。不过好像还缺点什么,对了。自行修改圆角,自行修改类型,加上这个才算完美。

附上代码:

现在我们新建个xml。放2张图片。一个圆角,一个圆形,先看看效果如何:

多张图片在外层加一个scrollview。好了。我们来看一下效果:

完美~~

圆角大小自行修改。类型自行修改。好了。今天主要内容就这么多把。整理了2个多小时~也是够够的。

作者:马云飞

来源:51CTO

时间: 2024-10-28 21:16:41

Android开发万能圆角ImageView的相关文章

imageview-关于android开发ImageView中的图片进行图形标记的添加处理

问题描述 关于android开发ImageView中的图片进行图形标记的添加处理 关于android开发,对ImageView中的图片进行图形标记的添加处理.如果有实例说明请列举一下,谢谢!急!急!急! 解决方案 问题不明白什么意思?可否说清楚点?或者给张图片示意一下. 解决方案二: 是"ImageView右下角有一个小图标,可以对小图标进行操作"的意思吗?

《Android开发基础教程》——6.1节ImageView界面组件——显示图像

6.1 ImageView界面组件--显示图像Android开发基础教程ImageView界面组件主要用以显示图像,让显示画面更加美观和生动. 6.1.1 ImageView的语法与常用属性1.ImageView的语法在Andrioid程序中使用图像图片有以下几个注意事项. (1)图像图片必须根据使用的分辨率,分别放置在.或中.但如果没有那么讲究,可以直接放置在的目录中. (2)程序的图像文件格式可以使用png.jpg或gif,要注意的是文件命名时无论文件名或扩展名都必须使用小写字母,否则执行时

Android自定义控件之圆形、圆角ImageView

一.问题在哪里? 问题来源于app开发中一个很常见的场景--用户头像要展示成圆的: 二.怎么搞? 机智的我,第一想法就是,切一张中间圆形透明.四周与底色相同.尺寸与头像相同的蒙板图片,盖在头像上不就完事了嘛,哈哈哈! 在背景纯色的前提下,这的确能简单解决问题,但是如果背景没有这么简单呢? 在这种不规则背景下,有两个问题: 1).背景图常常是适应手机宽度缩放,而头像的尺寸又是固定宽高DP的,所以固定的蒙板图片是没法保证在不同机型上都和背景图案吻合的. 2).在这种非纯色背景下,哪天想调整一下头像位

Android开发使用Drawable绘制圆角与圆形图案功能示例

本文实例讲述了Android开发使用Drawable绘制圆角与圆形图案功能.分享给大家供大家参考,具体如下: 1. 创建类RoundCircleDrawable继承Drawable /** * 圆角矩形 * @Project App_View * @Package com.android.view.drawable * @author chenlin * @version 1.0 * @Date 2016年4月21日 * @Note TODO */ public class RoundCircl

Android开发中ImageView的scaletype属性用法分析_Android

本文实例讲述了Android开发中ImageView的scaletype属性用法.分享给大家供大家参考,具体如下: ImageView的属性android:scaleType,即 ImageView.setScaleType(ImageView.ScaleType).android:scaleType是控制图片如何 resized/moved来匹对ImageView的size.ImageView.ScaleType / android:scaleType值的意义区别: CENTER /cente

Android中通过反射实现圆角ImageView代码实例_Android

private void init(){ paint = new Paint(Paint.ANTI_ALIAS_FLAG); roundRect = new RectF(0, 0, getWidth() , getHeight()); radius = 40; mPorterDuffXfermode = new PorterDuffXfermode(PorterDuff.Mode.SRC_IN) ; } 继承ImageView,在构造方法中调用,初始化Paint和Xfermode. protec

Android开发实现图片圆角的方法_Android

本文讲述了Android开发实现图片圆角的方法.分享给大家供大家参考,具体如下: Bitmap myCoolBitmap = ... ; // <-- Your bitmap you want rounded int w = myCoolBitmap.getWidth(), h = myCoolBitmap.getHeight(); Bitmap rounder = Bitmap.createBitmap(w,h,Bitmap.Config.ARGB_8888); Canvas canvas =

Android开发使用自定义View将圆角矩形绘制在Canvas上的方法

本文实例讲述了Android开发使用自定义View将圆角矩形绘制在Canvas上的方法.分享给大家供大家参考,具体如下: 前几天,公司一个项目中,头像图片需要添加圆角,这样UI效果会更好看,于是写了一个小的demo进行圆角的定义,该处主要是使用BitmapShader进行了渲染(如果要将一张图片裁剪成椭圆或圆形显示在屏幕上,也可以使用BitmapShader来完成). BitmapShader类完成渲染图片的基本步骤如下: 1.创建BitmapShader类的对象 /** * Call this

Android自定义圆角ImageView

废话不多说了,直接给大家贴代码了. java类如下: import android.content.Context; import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.graphics.Canvas; import android.graphics.Color; import android.gra