像一些手机安全卫士或者评分的软件都带有雷达扫描的效果,那么这个效果怎么实现呢,其实很简单! 上源码和效果图
那么只需要绘制这三张图片,然后蓝色覆盖灰色的,用clipRect函数显示百分比,然后用canvas旋转第三张的雷达图片即可。是不是很简单。
源码:
显示效果:
那么只需要绘制这三张图片,然后蓝色覆盖灰色的,用clipRect函数显示百分比,然后用canvas旋转第三张的雷达图片即可。是不是很简单。
源码:
package com.fenjin.app.view; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.util.AttributeSet; import android.view.View; import com.fenjin.app.humiture.R; import com.fenjin.app.util.CachedThreadPool; import com.fenjin.library.http.Tools; public class RadarView extends View { Bitmap bitmapBlue; Bitmap bitmapGray; Bitmap bitmapRadar; int height; float percent; int value;// 显示的值 float degrees; float ox; float oy; float cx; float cy; boolean hideRadar; public RadarView(Context context, AttributeSet attrs) { super(context, attrs); bitmapBlue = BitmapFactory.decodeResource(getResources(), R.drawable.circle_blue); bitmapGray = BitmapFactory.decodeResource(getResources(), R.drawable.circle_gray); bitmapRadar = BitmapFactory.decodeResource(getResources(), R.drawable.radar); ox = (bitmapBlue.getWidth() - bitmapRadar.getWidth()) >> 1; oy = (bitmapBlue.getHeight() - bitmapRadar.getHeight()) >> 1; cx = bitmapBlue.getWidth() >> 1; cy = bitmapBlue.getHeight() >> 1; hideRadar = true; } public void dismiss() { hideRadar = true;//停止线程 } public void startScanfThread() { hideRadar = false;//启动一个线程进行不断的旋转角度 CachedThreadPool.execute(new Runnable() { @Override public void run() { // TODO Auto-generated method stub while (!hideRadar) { degrees = (degrees += 2) >= 360 ? 0 : degrees; postInvalidate(); Tools.sleep(10); } } }); } @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { // TODO Auto-generated method stub super.onLayout(changed, left, top, right, bottom); height = getHeight(); percent = height / 100f; } @Override protected void onDraw(Canvas canvas) { // TODO Auto-generated method stub super.onDraw(canvas); canvas.drawBitmap(bitmapBlue, 0, 0, null); canvas.save(); canvas.clipRect(0, 0, getWidth(), (100 - value) * percent); canvas.drawBitmap(bitmapGray, 0, 0, null); canvas.restore(); if (!hideRadar) { canvas.save(); canvas.rotate(degrees, cx, cy); canvas.drawBitmap(bitmapRadar, ox, oy, null); canvas.restore(); } } public int getValue() { return value; } public void setValue(int value) { this.value = value; } public float getDegrees() { return degrees; } public void setDegrees(float degrees) { this.degrees = degrees; } public boolean isHideRadar() { return hideRadar; } public void setHideRadar(boolean hideRadar) { this.hideRadar = hideRadar; } }
显示效果:
收藏的用户(0) X
正在加载信息~
推荐阅读
最新回复 (2)
-
- GrettaProhztvc 2015-6-22引用 3楼这个是自己封装的,你可以使用一个匿名线程来实现就行了。
new Thread(){ public void run(){ //your code } }.start();
站点信息
- 文章2303
- 用户1336
- 访客11157669
每日一句
There is always a better way.
总有更好的办法。
总有更好的办法。
IntelliJ IDEA2018~2019.1激活码-注册码
C++实现NAT检测程序
Google Play商城将85款恶意App下架
打开显示interface.png 或者显示interface.swf
【黑苹果安装】——如何在windows下操作EFI分区
Android简单树状实现
Android 8.0应用图标适配
Android Studio3.4.1更新及槽点
C/C++通过WMI和系统API函数获取系统硬件配置信息
DuiLib编译出错:成员声明中不允许限定名
Java中的(耦合)控制反转
Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is
#ifdef _DEBUG失效问题
新会员