像一些手机安全卫士或者评分的软件都带有雷达扫描的效果,那么这个效果怎么实现呢,其实很简单! 上源码和效果图
那么只需要绘制这三张图片,然后蓝色覆盖灰色的,用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();
站点信息
- 文章2312
- 用户1336
- 访客11622688
每日一句
Compliment yourself daily.
每天夸自己一句。
每天夸自己一句。
How to Ungroup Icons on Windows 11 Taskbar With a Registry Hack (and 2 More Ways)
反编译修改class文件变量
如何在大学成为一名优秀的程序员?
VMware NAT端口映射外网访问虚拟机linux
ubuntu下提取DSDT SSDT
使用HTML和CSS设计磨砂玻璃效果
解决android studio 4.4使用javah失败
vscode使用eslint自动代码格式化
c++浮点运算能力附安卓版
【源码】两种仪表盘
P2P中NAT之间的打洞可能性
jQuery的load方法Cannot read property 'indexOf' of undefined
【开源Roguelike游戏】素地牢源码
新会员