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

Android-6步骤教你自定义View

时间:2023-03-13 02:02:08 科技观察

如果你打算完全自定义一个View,那么你需要实现View类(Android所有的View都在这个类中实现),并实现onMeasure(…))方法来确定尺寸并确认绘图的onDraw(...))方法。自定义View分为6步***步骤,Sull);}this(context,attrs,0);}publicSmileyView(Contextcontext,AttributeSetattrs,intdefStyleAttr){super(context,attrs,defStyleAttr);initPaints();}privatevoidinitPaints(){/*...*/}@OverrideprotectedvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec){/*...*/}@OverrideprotectedvoidonDraw(Canvascanvas){/*...*/}}2.实现画笔绘制类。本文有两个画笔privatevoidinitPaints(){mCirclePaint=newPaint(Paint.ANTI_ALIAS_FLAG);mCirclePaint.setStyle(Paint.Style.FILL);mCirclePaint.setColor(Color.YELLOW);mEyeAndMouthPaint=newPaint(Paint.ANTI_ALIAS_FLAG);mEyeAndMouthPaint.setStyle(Paint.Style.STROKE);mEyeAndMouthPaint.setStrokeWidth(16*getResources().getDisplayMetrics().density);mEyeAndMouthPaint.setStrokeCap(Paint.Cap.ROUND);mEyeAndMouthPaint.setColor(Color.BLACK);}3.重写onMeasure(…)方法实现该方法告诉父容器如何放弃自定义View,可以是由提供的measureSpecs决定你View的高度和宽度,下面是一个正方形,确认它的宽度和高度是一样的(heightMeasureSpec);intsize=Math.min(w,h);setMeasuredDimension(size,size);}注意:该方法至少需要调用一次setMeasuredDimension(..),否则会报IllegalStateException错误。4.实现onSizeChanged(…)方法。该方法是获取View当前的宽高。这里我们计算中心和半径。@OverrideprotectedvoidonSizeChanged(intw,inth,intoldw,intoldh){mCenterX=w/2f;mCenterY=h/2f;mRadius=Math.min(w,h)/2f;}5.实现onDraw(...)方法这方法提供了如何绘制视图,它提供的Canvas类可以绘制。@OverrideprotectedvoidonDraw(Canvascanvas){//drawfacecanvas.drawCircle(mCenterX,mCenterY,mRadius,mCirclePaint);//draweyesfloateyeRadius=mRadius/5f;floateyeOffsetX=mRadius/3f;floateyeOffsetY=mRadius/3f;canvas.drawCenterX-CircleOff(m-eyeOffsetY),eyeRadius,mEyeAndMouthPaint);canvas.drawCircle(mCenterX+eyeOffsetX,mCenterY-eyeOffsetY,eyeRadius,mEyeAndMouthPaint);//drawmouthfloatmouthInset=mRadius/3f;mArcBounds.set(mouthInset,mouthInset,mRadius*2-mouth*2,mRadius-mouthInset);canvas.drawArc(mArcBounds,45f,90f,false,mEyeAndMouthPaint);}6.添加你的视图到此结束,没有你想的那么难的自定义View