huangcm
2025-04-09 02d4ce54b909bd733f12e9f3fa4c1b03cf2d6f45
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package com.DeviceTest.view;
 
import com.DeviceTest.R;
import com.DeviceTest.R.drawable;
 
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.View;
 
public class CompassView extends View {
 
   private float yaw = 0;
   private Paint paint;
   private Drawable compass;
 
   public CompassView(Context context) {
       this(context, null);
   }
 
   public CompassView(Context context, AttributeSet attrs) {
       this(context, attrs, 0);
   }
 
   public CompassView(Context context, AttributeSet attrs, int defStyle) {
       super(context, attrs, defStyle);
       paint = new Paint();
       paint.setColor(Color.RED);
       // paint.setStyle(Style.FILL_AND_STROKE);
       paint.setStrokeWidth(2);
 
       compass = getResources().getDrawable(R.drawable.compass);
 
       this.setBackgroundColor(Color.WHITE);
   }
 
   public void update(float yaw) {
       if (Math.abs(this.yaw - yaw) > 1) {
           this.yaw = yaw;
           postInvalidate();
       }
   }
 
   protected void onDraw(Canvas canvas) {
       int height = getHeight();
       int width = getWidth();
       int midX = width / 2;
       int midY = height / 2;
       int size = (height > width ? width : height) * 3 / 8;
       compass.setBounds(midX - size, midY - size, midX + size, midY + size);
       canvas.save();
       canvas.rotate(-yaw, midX, midY);
       compass.draw(canvas);
       canvas.restore();
       paint.setTextSize(size / 3);
       canvas.drawText((int) yaw + "\260", 0, size / 3, paint);
   }
}