Android仿微信雷达扫描效果的实现方法
作者:程序亦非猿580230 发布时间:2022-07-28 01:49:17
标签:android,雷达扫描,微信
本文主要给大家介绍的是关于Android实现微信雷达扫描效果的相关内容,分享出来供大家参考学习,下面来看看详细的介绍:
废话不多说 先上图(用AS录制的 转换工具不是很好 所以看得效果不是很好)
效果图
示例代码
Activity 代码
public class ShapeDrawableActivity extends AppCompatActivity {
private ImageView ivLightbeam;
private ObjectAnimator radarScanAnim; // 扫描动画
private int width;
private int height;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_shape_drawable);
ivLightbeam = (ImageView) findViewById(R.id.ivLightbeam);
}
@Override
protected void onResume() {
super.onResume();
startScan();
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (height == 0 || width == 0) { //获取屏幕长、宽
width = ScreenUtils.getScreenWidth(this);
height = ScreenUtils.getScreenHeight(this); //根据屏幕长、宽计算扫描圆的直径
int diameter = (int) Math.sqrt(Math.pow(height, 2) + Math.pow(width, 2)); //修改光束的大小,使光束可以扫描到整个屏幕
FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(diameter, diameter);
ivLightbeam.setLayoutParams(layoutParams); //将扫描光束的中心移至屏幕内容中心
int offsetX = (width - diameter) / 2;
int offsetY = (height - diameter) / 2 + ScreenUtils.getStatusHeight(this) / 2;
ivLightbeam.setX(offsetX);
ivLightbeam.setY(offsetY);
}
}
@Override
protected void onPause() {
super.onPause();
stopScan();
} // 开始扫描
private void startScan() {
radarScanAnim = ObjectAnimator.ofFloat(ivLightbeam, "rotation", 0f, 360f);
radarScanAnim.setDuration(2000); //2秒扫描一圈
radarScanAnim.setInterpolator(new LinearInterpolator());
radarScanAnim.setRepeatCount(ObjectAnimator.INFINITE);//循环扫描
ivLightbeam.setVisibility(View.VISIBLE);
radarScanAnim.start();
} // 停止扫描
private void stopScan() {
ivLightbeam.setVisibility(View.GONE);
radarScanAnim.end();
}
}
Activity 布局文件
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FA000000"
android:clipToPadding="false"
android:fitsSystemWindows="true">
<ImageView
android:id="@+id/ivWave"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="5dp"
android:src="@drawable/wave" />
<ImageView
android:id="@+id/ivLightbeam"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/light_beam" />
</FrameLayout>
绘制扫描光束
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<size
android:width="500dp"
android:height="500dp" />
<gradient
android:endColor="#AAAAAAAA"
android:startColor="#00000000"
android:type="sweep"
/>
</shape>
绘制雷达波纹
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<!--最外层圆圈-->
<shape android:shape="oval">
<solid android:color="#10FFFFFF" />
<size
android:width="600dp"
android:height="600dp" />
<stroke
android:color="#10B8B8B8"
android:dashWidth="1dp" />
</shape>
</item>
<item
android:bottom="100dp"
android:left="100dp"
android:right="100dp"
android:top="100dp">
<!--最中间层圆圈-->
<shape android:shape="oval">
<solid android:color="#1CFFFFFF" />
<stroke
android:color="#1CB8B8B8"
android:dashWidth="1dp" />
</shape>
</item>
<item
android:bottom="200dp"
android:left="200dp"
android:right="200dp"
android:top="200dp">
<!--最中心圆圈-->
<shape android:shape="oval">
<solid android:color="#2CFFFFFF" />
<stroke
android:color="#2CB8B8B8"
android:dashWidth="1dp" />
</shape>
</item>
</layer-list>
来源:http://www.jianshu.com/p/4028b814a57d


猜你喜欢
- 偶然机会看到一种对象初始的方式:// 新建一个列表,并赋值 "Harry","Tony","
- 什么是委托?委托是寻址方法的.NET版本,使用委托可以将方法作为参数进行传递。委托是一种特殊类型的对象,其特殊之处在于委托中包含的只是一个活
- Java环境配置原理详解1.Jdk安装目录文件说明:一般jdk安装目录及路径 \Java\jdk1.7.0_79\lib,里面主要包含以下文
- 一、数组的基本用法1.什么是数组数组:存储一组相同数据类型的数据的集合。2.定义数组 int[] :int类型数组 do
- 本文研究的主要是java网络爬虫连接超时的问题,具体如下。在网络爬虫中,经常会遇到如下报错。即连接超时。针对此问题,一般解决思路为:将连接时
- 本文实例为大家分享了java实现猜拳小游戏的具体代码,供大家参考,具体内容如下实现下图要求public class User {privat
- 简介Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。 lambda表达式就和方法
- 1 Mybatis-Plus简介Mybatis-Plus 提供了多种方式来执行 SQL,包括使用注解、XML 映射文件和 Lambda 表达
- using System.Runtime.InteropServices; using System.Text; publicclass F
- 参考了一下网上别人写的,再使用的时候是放在新开的线程中来播放音乐的,后来发现每次进入Activity后就会重复开始一个音乐播放的声音。为了避
- 有的时候,我们需要对一堆数据进行统计分析后生成HTML或Excel格式报表。本来这并不是一件很难的事,但确是件比较麻烦的事情。最令人头痛的是
- 本文实例讲述了Java matches类,Pattern类及matcher类用法。分享给大家供大家参考,具体如下:Pattern类正则表达式
- 1、首先创建一个按钮<Buttonandroid:id="@+id/click"android:layout_wi
- 本文实例讲述了Java内置观察者模式。分享给大家供大家参考,具体如下:之前也简单地写过观察者模式(又称为发布-订阅模式)小例子,现在项目中也
- 无障碍服务可以模拟一些用户操作,无障碍可以处理的对象,通过类 AccessibilityNodeInfo 表示,通过无障碍服务,可以通过它的
- 目录引言编译环境及说明图片素材分割事件处理OnPaint事件鼠标交互事件代码汇总引言我们有时候会在程序的文件夹里看见一些图标,而这些图标恰好
- 前言Sharding-JDBC是ShardingSphere的第一个产品,也是ShardingSphere的前身。它定位为轻量级Java框架
- 本文汇集36个Android开发常用经典代码片段,包括拨打电话、发送短信、唤醒屏幕并解锁、是否有网络连接、动态显示或者是隐藏软键盘等,希望对
- 实现字符串库函数功能有些时候我们可能会被限制无法使用库函数,这个时候我们需要编写自己的库函数。但了解了字符串库函数的功能之后,想要实现并不困
- Java 定时器在JAVA中实现定时器功能要用的二个类是Timer,TimerTaskTimer类是用来执行任务的类,它接受一个