本文实例讲述了Android编程简单实现雷达扫描效果。分享给大家供大家参考,具体如下:
在eoe看到有一篇关于雷达扫描的文章,然后看了下,很简单,但是觉得还有很多可以优化的地方,下面贴出来
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
package com.example.wave;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Shader;
import android.graphics.SweepGradient;
import android.util.AttributeSet;
import android.widget.FrameLayout;
public class RadarView extends FrameLayout {
private int viewSize = 500 ;
private Paint mPaintLine;
private Paint mPaintSector;
private boolean isStart = false ;
private ScanThread mThread;
private int start = 0 ;
private final int paintWidth = 10 ;
public RadarView(Context context) {
super (context);
init();
}
public RadarView(Context context, AttributeSet attrs) {
super (context, attrs);
init();
}
private void init() {
initPaint();
mThread = new ScanThread();
setBackgroundColor(Color.TRANSPARENT);
}
private void initPaint() {
mPaintLine = new Paint();
mPaintLine.setStrokeWidth(paintWidth);
mPaintLine.setAntiAlias( true );
mPaintLine.setStyle(Style.STROKE);
mPaintLine.setColor( 0xffff0000 );
mPaintSector = new Paint();
mPaintSector.setColor( 0x9D00ff00 );
mPaintSector.setAntiAlias( true );
}
public void setViewSize( int size) {
this .viewSize = size;
mShader = new SweepGradient(viewSize >> 1 , viewSize >> 1 , Color.TRANSPARENT, Color.GREEN);
setMeasuredDimension(viewSize, viewSize);
}
@Override
protected void onMeasure( int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(viewSize, viewSize);
}
public void start() {
mThread.start();
isStart = true ;
}
public void stop() {
if (isStart) {
Thread.interrupted();
isStart = false ;
}
}
private Shader mShader = new SweepGradient(viewSize >> 1 , viewSize >> 1 , Color.TRANSPARENT, Color.GREEN);
private Matrix matrix = new Matrix();
@Override
protected void onDraw(Canvas canvas) {
super .onDraw(canvas);
int halfRadaSize = viewSize >> 1 ;
canvas.drawCircle(halfRadaSize, halfRadaSize, halfRadaSize >> 1 , mPaintLine);
canvas.drawCircle(halfRadaSize, halfRadaSize, halfRadaSize - (paintWidth >> 1 ), mPaintLine);
canvas.drawLine(halfRadaSize, 0 , halfRadaSize, viewSize, mPaintLine);
canvas.drawLine( 0 , halfRadaSize, viewSize, halfRadaSize, mPaintLine);
mPaintSector.setShader(mShader);
canvas.concat(matrix);
canvas.drawCircle(halfRadaSize, halfRadaSize, halfRadaSize - paintWidth, mPaintSector);
}
protected class ScanThread extends Thread {
int halfRadaSize = viewSize >> 1 ;
@Override
public void run() {
while (isStart) {
start = start + 2 ;
matrix.reset();
matrix.postRotate(start, halfRadaSize, halfRadaSize);
postInvalidate();
try {
Thread.sleep( 10 );
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
|
希望本文所述对大家Android程序设计有所帮助。