360手机卫士—扫描杀雷达效果[通俗易懂]

360手机卫士—扫描杀雷达效果

大家好,又见面了,我是全栈君。

360手机卫士---扫描杀雷达效果[通俗易懂]

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <!-- 背景是雷达图片 -->
        <FrameLayout
            android:layout_width="80dp"
            android:layout_height="match_parent" 
            android:background="@drawable/ic_scanner_malware">
            <ImageView
                android:id="@+id/iv_main_scan"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:src="@drawable/act_scanning_03" />
        </FrameLayout>

        <LinearLayout
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="match_parent"
            android:orientation="vertical" 
            android:gravity="center_vertical">

            <TextView
                android:id="@+id/tv_main_scan"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="杀毒引擎待命..." />

            <ProgressBar
                android:id="@+id/pb_main_scan"
                style="?android:attr/progressBarStyleHorizontal"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" 
                
                android:progressDrawable="<span style="color:#ff0000;">@drawable/my_progress</span>"/>
            	<!--  progressDrawable : 指定进度背景和进度图片-->
        </LinearLayout>

    </LinearLayout>

</LinearLayout>

my_progress.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
   
   <!-- 指定进度条的背景图片 -->
    <item android:id="@android:id/background"
        android:drawable="@drawable/security_progress_bg"></item>

    <!-- 指定进度条的进度图片 -->
    <item android:id="@android:id/progress"
        android:drawable="@drawable/security_progress"></item>
</layer-list>

MainActivity.java

package com.atguigu.l10_app;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.animation.Animation;
import android.view.animation.RotateAnimation;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

	private ImageView iv_main_scan;
	private TextView tv_main_scan;
	private ProgressBar pb_main_scan;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		// 旋转的图片
		iv_main_scan = (ImageView) findViewById(R.id.iv_main_scan);
		// 字体提示
		tv_main_scan = (TextView) findViewById(R.id.tv_main_scan);
		// 进度条
		pb_main_scan = (ProgressBar) findViewById(R.id.pb_main_scan);

		// 启动扫描动画
		startScanAnimation();

		// 開始扫描应用
		startScan();
	}

	/**
	 * 启动分线程扫描应用
	 */
	private void startScan() {
		new AsyncTask<Void, Void, Void>() {
			// 更新进度条之前先进行友好提示
			@Override
			protected void onPreExecute() {
				tv_main_scan.setText("開始扫描杀毒!");
			}

			@Override
			protected Void doInBackground(Void... params) {
				int appCount = 100;
				for (int i = 0; i < appCount; i++) {
					try {
						Thread.sleep(100);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					// 通知更新进度条
					publishProgress();
				}
				return null;
			}

			// 同步进度的显示
			protected void onProgressUpdate(Void[] values) {
				pb_main_scan.incrementProgressBy(1);
			}

			// 清除动画效果
			protected void onPostExecute(Void result) {
				tv_main_scan.setText("没有病毒, 请放心使用!");
				Toast.makeText(MainActivity.this, "扫描完毕, 没有发现病毒!", 0).show();
				// 停止扫描动画
				iv_main_scan.clearAnimation();
			}
		}.execute();
	}

	/**
	 * 启动扫描动画
	 */
	private void startScanAnimation() {
		RotateAnimation animation = new RotateAnimation(0f, 360f,
				Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
				0.5f);
		animation.setDuration(1000);
		animation.setRepeatCount(Animation.INFINITE);// 不限定反复次数
		// 旋转的图片启动动画效果
		iv_main_scan.startAnimation(animation);
	}
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115350.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 关于python项目依赖生成,数据导出和导入

    关于python项目依赖生成,数据导出和导入

    2022年4月2日
  • java布隆过滤器解决redis缓存穿透_redis缓存怎么过滤数据

    java布隆过滤器解决redis缓存穿透_redis缓存怎么过滤数据1:业务场景引入1:需求①原本有10亿个号码,现在又来了10万个号码,要快速准确判断这10万个号码是否在10亿个号码库中?解决方案1:将10亿个号码存入数据库中,进行数据库查询,准确性有了,但是速度会比较慢。解决办法二:将10亿号码放入内存中,比如Redis缓存中,这里我们算一下占用内存大小:10亿*8字节=8GB,通过内存查询,准确性和速度都有了,但是大约8gb的内存空间,挺浪费内存空间的。2:需求②接触过爬虫的,应该有这么一个需求,需要爬虫的网站千千万万,对于一个新的网站url,

    2022年10月6日
  • Unreal Engine 4 C++ 能够创建角色Zoom摄像头(资源)

    Unreal Engine 4 C++ 能够创建角色Zoom摄像头(资源)

    2022年1月14日
  • pycharm安装教程CSDN_java遇到解决不了的问题

    pycharm安装教程CSDN_java遇到解决不了的问题第三周开始接触python了,结果第一步装pycharm时就遇到了坑,正常安装完成后点运行时出现错误——NoJVMinstallationfound。助教说这是缺少jdk(java程序支持包),需要在网上找个最新的安装并配置下path路径。唉,编程小白,完全不知道这都是些啥o(╥﹏╥)o,于是开始了百度解决问题之路……运行pycharm错误——NoJVMinstallationfoun…

    2022年8月26日
  • 成员变量,类变量,局部变量的区别是什么_内部变量和局部变量

    成员变量,类变量,局部变量的区别是什么_内部变量和局部变量面向对象编程1.封装性面向对象编程核心思想之一就是将数据和对数据的操作封装在一起,通过抽象即从具体的实例中抽取共同的性质形成一般的概念。2.继承子类可以继承父类的属性和功能,即子类继承了父类所有的数据和数据上的操作,同时又可以添加子类独有的数据和数据上的操作。3.多态有两种意义的多态    1)操作名称的多态  2)和继承有关的多态类:

    2022年10月25日
  • 继电器驱动电路(各种单片机、CD4013触发器驱动电路图)

    继电器驱动电路(各种单片机、CD4013触发器驱动电路图)继电器工作原理详解(附3种驱动电路图)2019-09-1216:10继电器继电器是一种电子控制器件,它具有控制系统(又称输入回路)和被控制系统(又称输出回路),通常应用于自动控制电路中,它实际上是用较小的电流去控制较大电流的一种“自动开关”。故在电路中起着自动调节、安全保护、转换电路等作用。继电器的继电特性继电器的输入信号x从零连续增加达到衔铁开始吸合时的动作值xx,继电器的输出信号立刻从y=0跳跃y=ym,即常开触点从断到通。一旦触点闭合,输入量x继续增大,输出信号.

    2022年6月24日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号