Android编程简单实现雷达扫描效果
本文实例讲述了Android编程简单实现雷达扫描效果。分享给大家供大家参考,具体如下:
在eoe看到有一篇关于雷达扫描的文章,然后看了下,很简单,但是觉得还有很多可以优化的地方,下面贴出来
packagecom.example.wave;
importandroid.content.Context;
importandroid.graphics.Canvas;
importandroid.graphics.Color;
importandroid.graphics.Matrix;
importandroid.graphics.Paint;
importandroid.graphics.Paint.Style;
importandroid.graphics.Shader;
importandroid.graphics.SweepGradient;
importandroid.util.AttributeSet;
importandroid.widget.FrameLayout;
publicclassRadarViewextendsFrameLayout{
privateintviewSize=500;
privatePaintmPaintLine;
privatePaintmPaintSector;
privatebooleanisStart=false;
privateScanThreadmThread;
privateintstart=0;
privatefinalintpaintWidth=10;
publicRadarView(Contextcontext){
super(context);
init();
}
publicRadarView(Contextcontext,AttributeSetattrs){
super(context,attrs);
init();
}
privatevoidinit(){
initPaint();
mThread=newScanThread();
setBackgroundColor(Color.TRANSPARENT);
}
privatevoidinitPaint(){
mPaintLine=newPaint();
mPaintLine.setStrokeWidth(paintWidth);
mPaintLine.setAntiAlias(true);
mPaintLine.setStyle(Style.STROKE);
mPaintLine.setColor(0xffff0000);
mPaintSector=newPaint();
mPaintSector.setColor(0x9D00ff00);
mPaintSector.setAntiAlias(true);
}
publicvoidsetViewSize(intsize){
this.viewSize=size;
mShader=newSweepGradient(viewSize>>1,viewSize>>1,Color.TRANSPARENT,Color.GREEN);
setMeasuredDimension(viewSize,viewSize);
}
@Override
protectedvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec){
setMeasuredDimension(viewSize,viewSize);
}
publicvoidstart(){
mThread.start();
isStart=true;
}
publicvoidstop(){
if(isStart){
Thread.interrupted();
isStart=false;
}
}
privateShadermShader=newSweepGradient(viewSize>>1,viewSize>>1,Color.TRANSPARENT,Color.GREEN);
privateMatrixmatrix=newMatrix();
@Override
protectedvoidonDraw(Canvascanvas){
super.onDraw(canvas);
inthalfRadaSize=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);
}
protectedclassScanThreadextendsThread{
inthalfRadaSize=viewSize>>1;
@Override
publicvoidrun(){
while(isStart){
start=start+2;
matrix.reset();
matrix.postRotate(start,halfRadaSize,halfRadaSize);
postInvalidate();
try{
Thread.sleep(10);
}catch(InterruptedExceptione){
e.printStackTrace();
}
}
}
}
}
希望本文所述对大家Android程序设计有所帮助。