前言:
在平常的项目中也许会遇见很多对页面展示有很多固定要求的控件View,各种美轮美奂的效果很是吸引人们的眼球!当然如果仅仅只是使用原生的一些控件来进行日常开发,一些基本的需求是完全可以满足的,可是针对一些拥有特殊属性的控件效果就远远不够了,这个时候就需要我们开发者来自己定义相应的View.
引入:
话不多说,先来看看效果图:
可以看到图中这个ImageView的四个角的显示是不规则的,而且可以随意的切换其展示的大小,用于完美的加载图片。好,效果图看了之后接下来就开始说说这个自定义控件是怎么实现的吧!
步骤:一共分为六步
步骤一:
定义一个类继承与ImageView,然后定义出实现功能需要的一些变量
private float mRadius;//圆心 private boolean mTopLeft;//左上 private boolean mTopRight;//右上 private boolean mBottomRight;//右下 private boolean mBottomLeft;//左下 //对应位置的坐标 private float mTopLeftRadius; private float mTopRightRadius; private float mBottomRightRadius; private float mBottomLeftRadius; private int mType;//类型 椭圆是2 圆 1 private Paint mPaint;//画笔 private Path mPath;//路径 private float[] mFloats;//画圆的数组然后在其构造方法里对这些变量进行相应的初始化
步骤二:定义一个数组来确定是要针对那个角进行操作
步骤三:定义一个常量接口来确定需要画什么形状的角标
protected interface M_TYPE { int CIRCLE = 10; int ROUND = 11; int SROUND = 12; }
步骤四:利用onMeasure方法对需要定义的控件进行重新测量以及利用onDraw方法滑出相应的圆角。此处代码相对比较多,我就不贴图,我会在文章末尾贴上源代码。
步骤五:在Values文件夹下的attrs文件里定义对应的属性,例如:
<attr name="radius" format="dimension"></attr> <attr name="topleft" format="boolean"></attr> <attr name="topright" format="boolean"></attr> <attr name="bottomright" format="boolean"></attr> <attr name="bottomleft" format="boolean"></attr> <attr name="topleft_radius" format="dimension"></attr> <attr name="topright_radius" format="dimension"></attr> <attr name="bottomright_radius" format="dimension"></attr> <attr name="bottomleft_radius" format="dimension"></attr>步骤六:最后在需要使用到的布局文件里面引用并设置响应的属性
<sz.hs.xp.demo1.MCustomImageView android:layout_width="300dp" android:layout_height="300dp" android:layout_centerInParent="true" android:src="@mipmap/ai" android:scaleType="centerCrop" app:type="sround" app:radius="12dp" app:topleft="true" app:topright="false" app:bottomright="true" app:bottomleft="false" app:topleft_radius="12dp" app:topright_radius="12dp" app:bottomright_radius="48dp" app:bottomleft_radius="12dp"/>最后大功告成!接下来贴上demo的 源代码下载地址:http://download.csdn.net/detail/qq_34942689/9798470