欢迎来到天天文库
浏览记录
ID:56978159
大小:150.50 KB
页数:3页
时间:2020-07-30
《自定义view实现圆角图片.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、自定义view实现圆角图片前两天想实现一个圆角图片的效果,通过网络搜索后找到一些答案。这里自己再记录一下,加深一下自己的认识和知识理解。 实现圆角图片的思路是自定义一个ImageView,然后通过Ondraw()重绘的功能,将drawable和一个圆形进行重叠绘制,这样就可以达到圆角的效果了。 下面开始具体实现圆角图片的过程。第一步:写自定义属性文件首先我们需要定义一个属性。在values目录下面新建一个xml文件,这个文件用来自定义一些属性,这样我们就可以写出自己的控件了。123456789102、"encoding="utf-8"> 3、tyleable>我来简单解释一下,declare-styleable这个标签就是用来自定义属性的,attr标签用来定义具体的属性,format可以指定很多种格式,具体有哪些属性,这里不做过多介绍了,请看博客中的介绍://blog.csdn.net/mayingcai1987/article/details/6216655。在本例子中dimension表示尺寸的意思,这个应该在平常的开发中也用到。同时还有一个enum的枚举类型,我们之前在用系统控件的时候,比如 android:orientation="v4、ertical"就是比较典型的枚举类型,只不过在本例中我们自己实现了这个枚举类型。定义好这个之后,我们就可以开始写我们的自定义view的代码了。最后注意的一点,这里的这个xml的名字可以随便命名(不过最好命名的比较有意义),android系统会自动找到的。 第二步,自定义View 这一步是本文中最重要的一步,也是实现自定义view的核心。那么我们从目的出发来探讨实现圆角image的方式。那么我们的目的是将图片变圆,在这里一般人可能有想到两种方式将图片变圆 1.把本来图片修改为圆形,其他地方都是透明2.只是让显示的时候,动态的裁5、剪到一些部分,然后让图片变圆。 这两种方法的优劣我想大家一眼就能看明白。直接修改图片,带来的后果是,我如果换了一种方式了,不再是圆角,而是星型,那么我们的图片已经毁掉了,没办法在重用了。而第二种方式就可以,无论我们换什么样的表现方式,我们是需要换一种裁剪的算法,就可以实现不同的形状的图片了,那么很显然,第二种方法是以不变应万变的。 那么现在,我们选定了第二种方式,那怎么实现呢?有人说我们自己写一个类,直接继承自view,然后所有的绘图和大小的计算我们都自己来搞,这样行吗?当然可行,但是我们可能是在重复造轮子,因为我们已经有了6、一个ImageView,而且它里面给我们做了很多关于图片的操作,我们何不继承自ImageView,然后做少量的工作,就可以实现圆角效果呢。方案确定,好,那我们就开始实现自己的类。 1publicclassRoundImageViewextendsImageView{ 我们定义一个RoundImageView继承自ImageView 12privateintmBorderRadius;privateintmType; 然后两个成员变量,分别对应于自定义属性文件中的BorderRadius和RoundType。 接下来7、我们重写构造函数12345678910111213publicRoundImageView(Contextcontext,AttributeSetattrs){ super(context,attrs); mPaint=newPaint(); mPaint.setAntiAlias(true); TypedArraya=context.obtainStyledAttributes(attrs,R.styleable.RoundImageAttrs); 8、 mBorderRadius=a.getDimensionPixelSize(R.styleable.RoundImageAttrs_BorderRadius, (int)TypedValue.applyDimensi
2、"encoding="utf-8"> 3、tyleable>我来简单解释一下,declare-styleable这个标签就是用来自定义属性的,attr标签用来定义具体的属性,format可以指定很多种格式,具体有哪些属性,这里不做过多介绍了,请看博客中的介绍://blog.csdn.net/mayingcai1987/article/details/6216655。在本例子中dimension表示尺寸的意思,这个应该在平常的开发中也用到。同时还有一个enum的枚举类型,我们之前在用系统控件的时候,比如 android:orientation="v
3、tyleable>
4、ertical"就是比较典型的枚举类型,只不过在本例中我们自己实现了这个枚举类型。定义好这个之后,我们就可以开始写我们的自定义view的代码了。最后注意的一点,这里的这个xml的名字可以随便命名(不过最好命名的比较有意义),android系统会自动找到的。 第二步,自定义View 这一步是本文中最重要的一步,也是实现自定义view的核心。那么我们从目的出发来探讨实现圆角image的方式。那么我们的目的是将图片变圆,在这里一般人可能有想到两种方式将图片变圆 1.把本来图片修改为圆形,其他地方都是透明2.只是让显示的时候,动态的裁
5、剪到一些部分,然后让图片变圆。 这两种方法的优劣我想大家一眼就能看明白。直接修改图片,带来的后果是,我如果换了一种方式了,不再是圆角,而是星型,那么我们的图片已经毁掉了,没办法在重用了。而第二种方式就可以,无论我们换什么样的表现方式,我们是需要换一种裁剪的算法,就可以实现不同的形状的图片了,那么很显然,第二种方法是以不变应万变的。 那么现在,我们选定了第二种方式,那怎么实现呢?有人说我们自己写一个类,直接继承自view,然后所有的绘图和大小的计算我们都自己来搞,这样行吗?当然可行,但是我们可能是在重复造轮子,因为我们已经有了
6、一个ImageView,而且它里面给我们做了很多关于图片的操作,我们何不继承自ImageView,然后做少量的工作,就可以实现圆角效果呢。方案确定,好,那我们就开始实现自己的类。 1publicclassRoundImageViewextendsImageView{ 我们定义一个RoundImageView继承自ImageView 12privateintmBorderRadius;privateintmType; 然后两个成员变量,分别对应于自定义属性文件中的BorderRadius和RoundType。 接下来
7、我们重写构造函数12345678910111213publicRoundImageView(Contextcontext,AttributeSetattrs){ super(context,attrs); mPaint=newPaint(); mPaint.setAntiAlias(true); TypedArraya=context.obtainStyledAttributes(attrs,R.styleable.RoundImageAttrs);
8、 mBorderRadius=a.getDimensionPixelSize(R.styleable.RoundImageAttrs_BorderRadius, (int)TypedValue.applyDimensi
此文档下载收益归作者所有