Android-6中怎么自定义View

Android-6中怎么自定义View,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

创新互联公司从2013年开始,先为瓦房店等服务建站,瓦房店等地企业,进行企业商务咨询服务。为瓦房店企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

自定义View一共分为6步

***步

public class SmileyView extends View {     private Paint mCirclePaint;     private Paint mEyeAndMouthPaint;      private float mCenterX;     private float mCenterY;     private float mRadius;     private RectF mArcBounds = new RectF();      public SmileyView(Context context) {         this(context, null);     }      public SmileyView(Context context, AttributeSet attrs) {         this(context, attrs, 0);     }      public SmileyView(Context context, AttributeSet attrs, int defStyleAttr) {         super(context, attrs, defStyleAttr);         initPaints();     }      private void initPaints() {/* ... */}      @Override     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {/* ... */}      @Override     protected void onDraw(Canvas canvas) {/* ... */} }

2.实现画笔paint类

本文一共两只画笔

private void initPaints() {     mCirclePaint = new Paint(Paint.ANTI_ALIAS_FLAG);     mCirclePaint.setStyle(Paint.Style.FILL);     mCirclePaint.setColor(Color.YELLOW);     mEyeAndMouthPaint = new Paint(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的高和宽,以下是一个正方形,确认它的宽和高是一样的。

@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {     int w = MeasureSpec.getSize(widthMeasureSpec);     int h = MeasureSpec.getSize(heightMeasureSpec);      int size = Math.min(w, h);     setMeasuredDimension(size, size); }

注意:

这个方法需要至少保证一个setMeasuredDimension(..)调用,否则会报IllegalStateException错误。

4.实现onSizeChanged(…)方法

这个方法是你获取View现在的宽和高. 这里我们计算的是中心和半径。

@Override protected void onSizeChanged(int w, int h, int oldw, int oldh) {     mCenterX = w / 2f;     mCenterY = h / 2f;     mRadius = Math.min(w, h) / 2f; }

5.实现onDraw(…)方法

这个方法提供了如何绘制view,它提供的Canvas类可以进行绘制。

@Override protected void onDraw(Canvas canvas) {     // draw face     canvas.drawCircle(mCenterX, mCenterY, mRadius, mCirclePaint);     // draw eyes     float eyeRadius = mRadius / 5f;     float eyeOffsetX = mRadius / 3f;     float eyeOffsetY = mRadius / 3f;     canvas.drawCircle(mCenterX - eyeOffsetX, mCenterY - eyeOffsetY, eyeRadius, mEyeAndMouthPaint);     canvas.drawCircle(mCenterX + eyeOffsetX, mCenterY - eyeOffsetY, eyeRadius, mEyeAndMouthPaint);     // draw mouth     float mouthInset = mRadius /3f;     mArcBounds.set(mouthInset, mouthInset, mRadius * 2 - mouthInset, mRadius * 2 - mouthInset);     canvas.drawArc(mArcBounds, 45f, 90f, false, mEyeAndMouthPaint); }

6.添加你的View

       

看完上述内容,你们掌握Android-6中怎么自定义View的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!


分享标题:Android-6中怎么自定义View
本文地址:http://myzitong.com/article/psihpg.html