Android 自定义上面圆角下面直角的ImageView

版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/lyhhj/article/details/48165143

今天在群里面有人问我怎样实现一张图片上面是圆角下面是直角?

类似于这样的图片:

之前用过RoundImageView,其实就是自定义ImageView。想了一下自己重新画一下图片不就ok了么?再给布局设置一个圆角效果。好了我们来看一下源码:

1.首先我们自定义RoundImageView继承于ImageView

public class RoundedImageView extends ImageView {

	/*圆角的半径,依次为左上角xy半径,右上角,右下角,左下角*/
	private float[] rids = {10.0f,10.0f,10.0f,10.0f,0.0f,0.0f,0.0f,0.0f,};

	public RoundedImageView(Context context) {
		super(context);
	}

	public RoundedImageView(Context context, AttributeSet attrs) {
		super(context, attrs);
	}

	public RoundedImageView(Context context, AttributeSet attrs, int defStyleAttr) {
		super(context, attrs, defStyleAttr);
	}


	/**
	 * 画图
	 * by Hankkin at:2015-08-30 21:15:53
	 * @param canvas
	 */
	protected void onDraw(Canvas canvas) {
		Path path = new Path();
		int w = this.getWidth();
		int h = this.getHeight();
		/*向路径中添加圆角矩形。radii数组定义圆角矩形的四个圆角的x,y半径。radii长度必须为8*/
		path.addRoundRect(new RectF(0,0,w,h),rids,Path.Direction.CW);
		canvas.clipPath(path);
		super.onDraw(canvas);
	}
}

然后我们定义一个圆角的半径数组,依次为左上角x,y半径、右上角、右下角、左下角

接下来我们就自己画一下imageview

我们给路径添加圆角矩形,将我们定义的圆角半径设置进去,给canvas切割一下画布就可以了。imageview就画成了上面是圆角,下面是直角了。如果需要图片的四个角为不同的直角圆角,只需要改一下我们的圆角半径值就可以了。

2.然后我们再给布局设置一下圆角,

我们自定义一个round.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
  <solid android:color="#fff" />
  <corners android:topLeftRadius="5dp"
           android:topRightRadius="5dp"
           android:bottomRightRadius="5dp"
           android:bottomLeftRadius="5dp"/>
</shape>

设置一下上下左右的圆角半径,然后设置一下布局的background就ok了

比较简单,如果想要详细学习自定义圆角图片,推荐大家可以学习一下洪洋的

Android BitmapShader 实战 实现圆形、圆角图片

Android Xfermode 实战 实现圆形、圆角图片

这两篇文章,还是比较不错的

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏androidBlog

Android打造不一样的新手引导页面(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gdutxiaoxu/article/details/...

8910
来自专栏Android干货园

【Android 控件使用及源码解析】 GridView规则显示图片仿微信朋友圈发图片

版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/lyhhj/article/details/47...

25910
来自专栏向治洪

CoordinatorLayout

CoordinatorLayout作为“super-powered FrameLayout”基本实现两个功能:  1、作为顶层布局  2、调度协调子布局 ...

175100
来自专栏非著名程序员

AutoFlowLayout-多功能流式布局与网格布局控件

近期工作需要用到流式布局,网上也有很多关于这方面的资料。发现流式布局与网格布局的自定义很有意思,是学习自定义控件的一个很好的方式,所以就撸了个几百行代码的控件,...

413100
来自专栏androidBlog

Android 圆形头像的两种实现方式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gdutxiaoxu/article/de...

24400
来自专栏郭霖

Android实现图片滚动控件,含页签功能

首先题外话,今天早上起床的时候,手滑一下把我的手机甩了出去,结果陪伴我两年半的摩托罗拉里程碑一代就这么安息了,于是我今天决定怒更一记,纪念我死去的爱机。 如果你...

350100
来自专栏程序员叨叨叨

听说你想用ViewPager实现这样的效果?

此图盗于https://github.com/smallnew/FuCardPager

11730
来自专栏李蔚蓬的专栏

6.4 Android绘图技巧(Primary:四大方法&Layer)

创建一个新的Layer到“栈”中,可以使用saveLayer(), savaLayerAlpha(), 从“栈”中推出一个Layer,可以使用restore()...

15920
来自专栏Android小菜鸡

Touch事件实现View拖动

  Touch监听事件可以监听手指在屏幕上的行为,例如按下、滑动。抬起。根据这些事件,可以做出View任意推动的效果。

21110
来自专栏Android自学

谷歌官方导航控件BottomNavigationBar的日常使用

81550

扫码关注云+社区

领取腾讯云代金券