软件编程
位置:首页>> 软件编程>> Android编程>> Android编程简单实现雷达扫描效果

Android编程简单实现雷达扫描效果

作者:freesonhp  发布时间:2021-06-17 20:38:04 

标签:Android,扫描

本文实例讲述了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程序设计有所帮助。

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com