本文实例讲述了 Android 编程简单实现雷达扫描效果分享给大家供大家参考, 具体如下:
在 eoe 看到有一篇关于雷达扫描的文章, 然后看了下, 很简单, 但是觉得还有很多可以优化的地方, 下面贴出来
- 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 程序设计有所帮助
来源: https://www.php1.cn/detail/php-36ddee723d.html