雷达扫描动画

该博客介绍了一个雷达扫描动画的实现过程,通过在`RadarMainActivity`中设置布局、动画效果,包括`RotateAnimation`和`AlphaAnimation`,并使用Handler进行消息传递更新扫描状态。在扫描过程中,模拟了扫描BaseAnimation动画的数量,最终完成扫描显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.duguang.baseanimation.ui.imitate;

import android.content.pm.PackageManager;
import android.os.Handler;
import android.os.Message;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.LinearInterpolator;
import android.view.animation.RotateAnimation;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;

import com.duguang.baseanimation.R;
import com.duguang.baseanimation.ui.base.BaseActivity;

public class RadarMainActivity extends BaseActivity{

   protected static final String tag = "AntiVirusActivity";
   protected static final int SCAN_LODING = 1;
   protected static final int FINSH_SCAN = 2;
   private ImageView im_scan;
   private ImageView im_dian;
   private TextView tv_lodingApk;
   private TextView tv_count;
   private LinearLayout ll_scanText;
   private ProgressBar pb_loding;
   
   private int count;
   
   private Handler handler = new Handler(){
      public void handleMessage(Message msg) {
         switch (msg.what) {
         case SCAN_LODING:
            tv_lodingApk.setText("正在扫描:"+count+"BaseAnimation动画");
            TextView tv = new TextView(RadarMainActivity.this);
            tv.setTextSize(14);
            tv_count.setText("已扫描:"+count+"BaseAnimation动画");
            ll_scanText.addView(tv,0);
            break;
         case FINSH_SCAN:
            tv_lodingApk.setText("扫描完毕");
            im_scan.clearAnimation();//清除此ImageView身上的动画
            im_dian.clearAnimation();//清除此ImageView身上的动画
            break;
         }
      };
   };
   

   @Override
   public void setView() {
      setContentView(R.layout.activity_imitate_radar);
      
      im_scan = (ImageView) findViewById(R.id.im_scan);
      im_dian = (ImageView) findViewById(R.id.im_dian);
      tv_lodingApk = (TextView) findViewById(R.id.tv_lodingApk);
      ll_scanText = (LinearLayout) findViewById(R.id.ll_scanText);
      pb_loding = (ProgressBar) findViewById(R.id.pb_loding);
      tv_count = (TextView) findViewById(R.id.tv_count);
      
      RotateAnimation animation = new RotateAnimation(0, 359, Animation.RELATIVE_TO_SELF,
            0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
      animation.setDuration(2000);
      animation.setRepeatCount(0);
      animation.setInterpolator(new LinearInterpolator());
      animation.setFillEnabled(true);
      animation.setFillAfter(true);
      animation.setAnimationListener(new Animation.AnimationListener() {
         @Override
         public void onAnimationStart(Animation animation) {

         }

         @Override
         public void onAnimationEnd(Animation animation) {
            im_scan.startAnimation(animation);
         }

         @Override
         public void onAnimationRepeat(Animation animation) {

         }
      });
      im_scan.startAnimation(animation);

      
      AlphaAnimation animation2 = new AlphaAnimation(0.0f, 1.0f);
      animation2.setDuration(3000);
      animation2.setRepeatCount(Animation.INFINITE);
      im_dian.startAnimation(animation2);
      
      count = 0;
      
      fillData();
      
   }

   @Override
   public void initView() {
      // TODO Auto-generated method stub
      
   }

   @Override
   public void setListener() {
      // TODO Auto-generated method stub
      
   }

   /**
    * 初始化数据
    */
   private void fillData() {
      tv_lodingApk.setText("开始准备释放空闲CPU线程");
      new Thread(){
         public void run() {
            PackageManager pm = getPackageManager();
            pb_loding.setMax(177);
            for (int i = 1; i <= 177; i++) {
               Message msg = Message.obtain();
               msg.what = SCAN_LODING;
               handler.sendMessage(msg);
               count =i;
               pb_loding.setProgress(count);
               try {
                  Thread.sleep(100);
               } catch (InterruptedException e) {
                  e.printStackTrace();
               }
            }
            Message msg = Message.obtain();
            msg.what = FINSH_SCAN;
            handler.sendMessage(msg);
         };
      }.start();
      
   }

   
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值