- 遥想当年,其实也就是几年前,有一个需求是,需要给一个
ImageView
添加一个边框。我当时是非常懵逼的。嗯,其实现在也是很懵逼的。 - 我当时在网上找了一会,貌似在hongyang的博客里面看到了,他的一篇关于自定义控件里面实现了这个逻辑。不过,当时他那个不知道是什么原因,只能绘制一半。我也是醉了,不过他也给出了解决方案。(当然,那个时候的资料各个方面也是比较少的)然后我就按照他的博客,抄抄改改,然后那个需求就过去了。
- 几年过去了,碰到自定义控件的问题,第一反应依然是各种开源,各种博客。说实话挺失败的。
- 辣么,作为一个弱鸡,难道就不需要自定义控件吗?弱鸡也是需要的。
- 原理我就不分析了,毕竟是一个弱鸡的存在。
那么就简单说一下实现逻辑:
- 创建一个大小和
view
相同的RectF
- 绘制这个矩形
代码大致如下:(当然没有考虑各种复杂的情况,不过如果是继承
ImageView,TextView,Button
等也不需要考虑各种复杂情况了)public class MyView2 extends View { private Paint mPaint = new Paint(); private int mHeight; private int mWidth; private RectF border; public MyView2(Context context) { super(context); } public MyView2(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); this.mWidth = w; this.mHeight = h; border = new RectF(0, 0, mWidth, mHeight); } @Override protected void onDraw(Canvas canvas) { // 第一步:绘制边框 canvas.drawCircle(100,100,50,mPaint); mPaint.setColor(Color.BLACK); mPaint.setStyle(Paint.Style.STROKE); canvas.drawRect(border,mPaint); } }
- 创建一个大小和
简单理解一下:在
onSizeChanged()
方法里面获取当前view
的宽高,然后创建一个和当前控件等大小的RectF
- 在
onDraw()
里面绘制该RectF
,也就是完成边框的绘制。
- 我是一个弱鸡,真正的弱鸡。