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程序设计有所帮助。