Android仿微信雷达扫描效果的实现方法
程序员文章站
2023-11-28 22:40:28
本文主要给大家介绍的是关于android实现微信雷达扫描效果的相关内容,分享出来供大家参考学习,下面来看看详细的介绍:
废话不多说 先上图(用as录制的 转换工具不是很好...
本文主要给大家介绍的是关于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>
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。