android 自定义指南针view 您所在的位置:网站首页 安卓canvas指南针 android 自定义指南针view

android 自定义指南针view

2024-06-09 03:00| 来源: 网络整理| 查看: 265

这是我第一次在csdn上写文章,因为自己还是个实习生,总感觉实力不够,写不出好文章。做android实习生已经5个多月了,记录一下平时用到的知识。这个指南针view是我在csdn看到原形,感觉很好玩的。然后我自己就动手写这个。效果如下:

下面是自定义view代码:

package com.example.viewlearn; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Paint.Style; import android.graphics.Typeface; import android.util.AttributeSet; import android.view.View; class CompassView extends View { private Paint mCirclePaint;//外圆画笔 private Paint mTextPaint;//方位画笔 private Paint mLinepaint;//刻度画笔 private float mDegree = 0f;//指针度 private int mTextHight;//字高 private Paint mDegreePain;//指针度画笔 private Paint mSmallCirclePaint;//内圆画笔 private Paint mSmallerCirclePaint;//最小内圆画笔 private Paint mPointerPaint;//指针画笔 private Paint mBorderPaint;//外圆边框画笔 public CompassView(Context context) { super(context); initView(); } public CompassView(Context context, AttributeSet attrs) { super(context, attrs); initView(); } public CompassView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); initView(); } public float getmDegree() { return mDegree; } public void setmDegree(float mDegree) { this.mDegree = mDegree; invalidate(); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int width = measure(widthMeasureSpec); int height = measure(heightMeasureSpec); int d = Math.min(width, height); setMeasuredDimension(d, d); } protected int measure(int measureSpec){ int size = 0; int measureMode = MeasureSpec.getMode(measureSpec); if(measureMode == MeasureSpec.UNSPECIFIED){ size = 250; }else{ size = MeasureSpec.getSize(measureSpec); } return size; } protected void initView(){ mBorderPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mBorderPaint.setColor(Color.WHITE); mCirclePaint = new Paint(Paint.ANTI_ALIAS_FLAG); mCirclePaint.setColor(getResources().getColor(R.color.shape1_color)); mCirclePaint.setAntiAlias(true); mCirclePaint.setStrokeWidth(2f); mCirclePaint.setStyle(Style.STROKE); mTextPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mTextPaint.setColor(getResources().getColor(R.color.location_color)); mTextPaint.setTextSize(35f); mTextPaint.setTypeface(Typeface.DEFAULT_BOLD); mLinepaint = new Paint(Paint.ANTI_ALIAS_FLAG); mLinepaint.setColor(getResources().getColor(R.color.line_color)); mDegreePain = new Paint(Paint.ANTI_ALIAS_FLAG); mDegreePain.setColor(getResources().getColor(R.color.degress_color)); mDegreePain.setTextSize(16f); mSmallCirclePaint = new Paint(Paint.ANTI_ALIAS_FLAG); mSmallCirclePaint.setColor(getResources().getColor(R.color.small_circle_bg)); mSmallerCirclePaint = new Paint(Paint.ANTI_ALIAS_FLAG); mSmallerCirclePaint.setColor(Color.WHITE); mPointerPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mPointerPaint.setColor(getResources().getColor(R.color.pointer_color)); mPointerPaint.setStrokeWidth(2f); mTextHight = (int) mLinepainasureText("NN"); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); int px = getMeasuredWidth()/2; int py = getMeasuredHeight()/2; int radius = Math.min(px, py); int smallRadius = (int)(radius * 0.5); int smallerRadius =(int)(radius * 0.2); canvas.drawCircle(px, py, radius,mBorderPaint);//外圆边框 canvas.drawCircle(px, py, radius,mCirclePaint);//外圆 canvas.drawCircle(px, py, smallRadius,mSmallCirclePaint);//小圆 canvas.drawCircle(px, py, smallerRadius,mSmallerCirclePaint);//最小圆 canvas.drawText(String.valueOf((int)mDegree)+"°", px-mTextHight*2, py+mTextHight, mTextPaint);//指针度数 canvas.save(); canvas.rotate(-mDegree, px, py); for(int i = 0;i= degree || degree >= 337.5) { positionstr = "N"; } else if (22.5 < degree && degree


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有