当前位置: 首页 > 科技观察

Android开发通用圆角ImageView

时间:2023-03-13 01:15:22 科技观察

作者简介大家好,新的一周又开始了!本文由马云飞投稿,分享如何实现圆角图片,希望对有需要的朋友有所帮助。马云飞的博客地址: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。这个快码的意思几乎就是让图片居中。来吧,我们来看源码:先不管他是怎么计算比例的,重点是他的dx和dy是怎么计算的。这里我举个例子来计算。可绘制对象的宽度和高度为(300,200)。我要绘制的视图的宽度和高度是(200,200)。根据我的想法,绘图是从(50,0)到(250,250),而不是(0,0)到(200,200)。废话。我们来看源码的计算:我们画一张图来说明这一切。看完图你就明白了。红色方框在我们身后。这样1的面积就可以理解为没了。被毁。但实际效果是这样的:圆好像没什么问题,那你自己看看圆角图片左边有没有被拉伸。拉伸距离应该正好是我们之前计算的50dp。因为上图1块已经不存在了,所以画图的时候,fast距离就是拉伸距离。现在让我们看看-50dp图表。1被删除。但是他还是存在的,所以画出来的图不会出现任何的拉伸。perfect~属性配置好了,剩下的就是ondraw方法了。很简单,代码如下:当然你也要考虑onsizechanged的时候,代码不多:OK。这里我添加了attrs属性:now。一个完美、完美的圆角ImageVIew就解决了。但是好像少了点什么,是的。自己修改圆角,自己修改类型,加上这个最好。附上代码:现在我们新建一个xml。放2张图。一个圆角,一个圆形,先看看它是如何工作的:在多张图片的外层添加一个scrollview。好吧。来看看效果吧:***~~自己修改圆角的大小。类型会自行修改。好吧。这就是今天的主要内容。整理了2个多小时~够了。