欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android仿微信雷达扫描效果的实现方法

程序员文章站 2023-11-28 22:40:28
本文主要给大家介绍的是关于android实现微信雷达扫描效果的相关内容,分享出来供大家参考学习,下面来看看详细的介绍: 废话不多说 先上图(用as录制的 转换工具不是很好...

本文主要给大家介绍的是关于android实现微信雷达扫描效果的相关内容,分享出来供大家参考学习,下面来看看详细的介绍:

废话不多说 先上图(用as录制的 转换工具不是很好 所以看得效果不是很好)

效果图

Android仿微信雷达扫描效果的实现方法

示例代码

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>

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。