模仿新浪微博雷达搜索动画效果

昨天更新的了新浪微博看到个好玩的玩意,雷达搜索,功能就不介绍了,当然作为安卓开发的第一眼看到的不是功能,而是搜索界面的雷达搜索动画效果,然后思绪了一下就模仿了写了一个,当然可能写的有点简单,这个见谅了,基本实现了该有的动画效果 怎么也有90%的相识度。
录制的gif略卡,PS有没有好点的gif生成软件推荐推荐

新浪微博效果

本软件的效果

一、首先来看我实现的布局文件
用的是RelativeLayout相对布局 其中动画分为几个中间的旋转为一个imageview 其它的形状各为一个Activity
看布局文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="fill_parent"android:layout_height="fill_parent"android:background="#F2F2F2" ><RelativeLayout
        android:layout_width="fill_parent"android:layout_height="fill_parent"android:layout_centerInParent="true" ><ImageView
            android:id="@+id/radar_img"android:layout_width="300dp"android:layout_height="300dp"android:layout_centerInParent="true"android:src="@drawable/main_bottom_selecl_item"android:visibility="gone" /><ImageView
            android:id="@+id/radar_bttom_img"android:layout_width="300dp"android:layout_height="300dp"android:layout_centerInParent="true"android:src="@drawable/amain_setting_bg" /><ImageView
            android:id="@+id/radar_top_img"android:layout_width="300dp"android:layout_height="300dp"android:layout_centerInParent="true"android:src="@drawable/main_setting_bg"android:visibility="gone" /><RelativeLayout
            android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:layout_weight="1"android:background="@drawable/radar_button_scan" ><ImageView
                android:id="@+id/radar_imageing"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:src="@drawable/radar_button_icon_scaning" /></RelativeLayout></RelativeLayout></RelativeLayout>

二、
动画效果了解动画的都知道Android的常用动画有哪几总类型
 Tweened Animations的分类
  1、Alpha:淡入淡出效果
  2、Scale:缩放效果
  3、Rotate:旋转效果
  4、Translate:移动效果
 至于这搜索中用到是只有Scale(缩放效果)和Alpha(淡入淡出效果)
圆中心放大的动画

AnimationSet animationSet = new AnimationSet(true);//居中位置形状由0.3倍变化到1.0倍ScaleAnimation sa = new ScaleAnimation(0.3f, 1.0f, 0.3f, 1.0f,ScaleAnimation.RELATIVE_TO_SELF, 0.5f,ScaleAnimation.RELATIVE_TO_SELF, 0.5f);sa.setDuration(900);//动画时间sa.setFillAfter(true);sa.setRepeatCount(0);sa.setInterpolator(new LinearInterpolator());//匀速变化animationSet.addAnimation(sa);

上面就是中间的圆形从小变大的动画效果

下面则是中心图标旋转动画下拍过
这个可以用来当作ProgressBar使用 只需要一张图片就可以旋转
调用方法

Animation operatingAnim = AnimationUtils.loadAnimation(this, R.anim.sss);LinearInterpolator lin = new LinearInterpolator();operatingAnim.setInterpolator(lin);findViewById(R.id.radar_imageing).startAnimation(operatingAnim);
   <rotate
        android:duration="1500"android:fromDegrees="0"android:pivotX="50%"android:pivotY="50%"android:repeatCount="-1"android:repeatMode="restart"android:toDegrees="360" ></rotate>

其中最外层圆环实现效果雷同上面的放大缩放效果在加上一个渐变动画代码如下

   /*** 最外围环形动画* * @return*/private AnimationSet getAnimAnnular() {AnimationSet animationSet = new AnimationSet(true);ScaleAnimation sa = new ScaleAnimation(1.0f, 1.5f, 1.0f, 1.5f,ScaleAnimation.RELATIVE_TO_SELF, 0.5f,ScaleAnimation.RELATIVE_TO_SELF, 0.5f);// 透明度变化animationSet.addAnimation(new AlphaAnimation(1.0f, 0.1f));animationSet.setDuration(400);sa.setDuration(500);sa.setFillAfter(true);sa.setRepeatCount(0);sa.setInterpolator(new LinearInterpolator());animationSet.addAnimation(sa);return animationSet;}

动画效果就是上面了 只是要规划好动画展示的时间和持续时间就能实现完全的旋转
三、动画展现步骤

ps动画时间的我只是初略的估算了一下,请根据可以根据自己的理解规划动画的时间

Created with Raphaël 2.1.2开始播放灰色动画播放白色动画no

1:先是灰色形状圆形的动画 播放,延时400ms播放中间透明白色圆形的动画展现

private void startcircularAnima() {grayAnimal = playHeartbeatAnimation();radarbttom.startAnimation(grayAnimal);new Handler().postDelayed(new Runnable() {@Overridepublic void run() {startwhiteAnimal();}}, 400);new Handler().postDelayed(new Runnable() {@Overridepublic void run() {startannularAnimat();}}, 600);}

2:白色圆形动画播放完毕则重复

    private void startwhiteAnimal() {AnimationSet whiteAnimal = playHeartbeatAnimation();whiteAnimal.setRepeatCount(0);whiteAnimal.setDuration(700);radartop.setVisibility(View.VISIBLE);radartop.startAnimation(whiteAnimal);whiteAnimal.setAnimationListener(new AnimationListener() {@Overridepublic void onAnimationStart(Animation animation) {}@Overridepublic void onAnimationRepeat(Animation animation) {}@Overridepublic void onAnimationEnd(Animation animation) {mAnnularImg.setVisibility(View.GONE);radartop.setVisibility(View.GONE);startcircularAnima();}});}
private void startannularAnimat() {mAnnularImg.setVisibility(View.VISIBLE);AnimationSet annularAnimat = getAnimAnnular();annularAnimat.setAnimationListener(new AnimationListener() {@Overridepublic void onAnimationStart(Animation animation) {}@Overridepublic void onAnimationRepeat(Animation animation) {// TODO Auto-generated method stub}@Overridepublic void onAnimationEnd(Animation animation) {mAnnularImg.setVisibility(View.GONE);}});mAnnularImg.startAnimation(annularAnimat);}

这样重复播放动画类似的效果就实现了我写的比较初级,有什么改进的意见或者错误请指点指点


主要代码
MainActivity

package com.example.anima;import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.View;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.AnimationSet;
import android.view.animation.AnimationUtils;
import android.view.animation.LinearInterpolator;
import android.view.animation.ScaleAnimation;
import android.widget.ImageView;public class MainActivity extends ActionBarActivity {private ImageView radarbttom;private ImageView radartop;private ImageView mAnnularImg;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mAnnularImg = (ImageView) findViewById(R.id.radar_img);radartop = (ImageView) findViewById(R.id.radar_top_img);radarbttom = (ImageView) findViewById(R.id.radar_bttom_img);startAnima();startcircularAnima();}AnimationSet grayAnimal;private void startannularAnimat() {mAnnularImg.setVisibility(View.VISIBLE);AnimationSet annularAnimat = getAnimAnnular();annularAnimat.setAnimationListener(new AnimationListener() {@Overridepublic void onAnimationStart(Animation animation) {}@Overridepublic void onAnimationRepeat(Animation animation) {// TODO Auto-generated method stub}@Overridepublic void onAnimationEnd(Animation animation) {mAnnularImg.setVisibility(View.GONE);}});mAnnularImg.startAnimation(annularAnimat);}private void startwhiteAnimal() {AnimationSet whiteAnimal = playHeartbeatAnimation();whiteAnimal.setRepeatCount(0);whiteAnimal.setDuration(700);radartop.setVisibility(View.VISIBLE);radartop.startAnimation(whiteAnimal);whiteAnimal.setAnimationListener(new AnimationListener() {@Overridepublic void onAnimationStart(Animation animation) {}@Overridepublic void onAnimationRepeat(Animation animation) {}@Overridepublic void onAnimationEnd(Animation animation) {mAnnularImg.setVisibility(View.GONE);radartop.setVisibility(View.GONE);startcircularAnima();}});}private void startcircularAnima() {grayAnimal = playHeartbeatAnimation();radarbttom.startAnimation(grayAnimal);new Handler().postDelayed(new Runnable() {@Overridepublic void run() {startwhiteAnimal();}}, 400);new Handler().postDelayed(new Runnable() {@Overridepublic void run() {startannularAnimat();}}, 600);}/*** 打开界面*/private void startAnima() {// 中心圆形的旋转动画Animation operatingAnim = AnimationUtils.loadAnimation(this, R.anim.sss);LinearInterpolator lin = new LinearInterpolator();operatingAnim.setInterpolator(lin);findViewById(R.id.radar_imageing).startAnimation(operatingAnim);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}/*** 两个圆环动画* * @return*/private AnimationSet playHeartbeatAnimation() {AnimationSet animationSet = new AnimationSet(true);ScaleAnimation sa = new ScaleAnimation(0.3f, 1.0f, 0.3f, 1.0f,ScaleAnimation.RELATIVE_TO_SELF, 0.5f,ScaleAnimation.RELATIVE_TO_SELF, 0.5f);// animationSet.addAnimation(new AlphaAnimation(1.0f, 0.9f));sa.setDuration(900);sa.setFillAfter(true);sa.setRepeatCount(0);sa.setInterpolator(new LinearInterpolator());animationSet.addAnimation(sa);return animationSet;}/*** 最外围环形动画* * @return*/private AnimationSet getAnimAnnular() {AnimationSet animationSet = new AnimationSet(true);ScaleAnimation sa = new ScaleAnimation(1.0f, 1.5f, 1.0f, 1.5f,ScaleAnimation.RELATIVE_TO_SELF, 0.5f,ScaleAnimation.RELATIVE_TO_SELF, 0.5f);// 透明度变化animationSet.addAnimation(new AlphaAnimation(1.0f, 0.1f));animationSet.setDuration(400);sa.setDuration(500);sa.setFillAfter(true);sa.setRepeatCount(0);sa.setInterpolator(new LinearInterpolator());animationSet.addAnimation(sa);return animationSet;}
}

布局文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="fill_parent"android:layout_height="fill_parent"android:background="#F2F2F2" ><RelativeLayout
        android:layout_width="fill_parent"android:layout_height="fill_parent"android:layout_centerInParent="true" ><ImageView
            android:id="@+id/radar_img"android:layout_width="300dp"android:layout_height="300dp"android:layout_centerInParent="true"android:src="@drawable/main_bottom_selecl_item"android:visibility="gone" /><ImageView
            android:id="@+id/radar_bttom_img"android:layout_width="300dp"android:layout_height="300dp"android:layout_centerInParent="true"android:src="@drawable/amain_setting_bg" /><ImageView
            android:id="@+id/radar_top_img"android:layout_width="300dp"android:layout_height="300dp"android:layout_centerInParent="true"android:src="@drawable/main_setting_bg"android:visibility="gone" /><RelativeLayout
            android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:layout_weight="1"android:background="@drawable/radar_button_scan" ><ImageView
                android:id="@+id/radar_imageing"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:src="@drawable/radar_button_icon_scaning" /></RelativeLayout></RelativeLayout></RelativeLayout>

代码下载地址
http://download.csdn.net/detail/shallcheek/8717163
转载请注明出处http://blog.csdn.net/shallcheek/article/details/45847209

模仿新浪微博雷达搜索动画效果相关推荐

  1. android 雷达搜索动画,Android实现微信雷达辐射搜索好友实例(逻辑清晰实现简单)...

    Android仿微信雷达扫描,仿安卓微信.云播雷达扫描动画效果点击中间的黑色圆圈开始扫描动画,再次点击复位,需要这种效果的朋友快点收藏了吧. 效果图如下: 这个界面大家肯定都非常熟悉了,下面来说一下原 ...

  2. 搜索效果和搜索动画效果

    搜索效果和搜索动画效果 开发工具与关键技术:DW 搜索效果 作者:周欢 撰写时间:2019/2/20 在生活中我们不难发现,往往大的软件都会有便捷的获取方式.因为软件越大功能也会相对的多一些,功能的繁 ...

  3. Canvas编程练习:20几行js代码实现雷达扫描动画效果

    灵感源于一不小心挖了一个陈年老贴etherdream发的<[分享]魔兽技能冷却效果(希望能有更好的思路)>的坟,看他的代码太长(约200行),于是自己动手写了一个,也就20多行代码,效果也 ...

  4. SuperMap iObjects .NET 之雷达扫描动画

    作者:贤 目录 1. 介绍 2. 开发环境 3. 流程设计 3.1. 核心逻辑 3.2. 整体流程 4. 代码实现 4.1. 渐变填充雷达扫描区域的扇形 4.2. 定时器刷新实现雷达动态效果 5. 总 ...

  5. 八十四、搜索框动画效果实现,React-Redux 进行应用数据的管理

    2020/11/21. 周六.今天又是奋斗的一天. @Author:Runsen 上次完成了Header布局如下,这次需要实现动画效果. 搜索框动画效果实现 React-transition-grou ...

  6. [html] 写一个搜索框,聚焦时搜索框向左拉长并有动画效果

    [html] 写一个搜索框,聚焦时搜索框向左拉长并有动画效果 为啥直接粘贴html发布以后就没有了呢 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚持一定很酷.欢迎大家一起讨论 ...

  7. android 仿搜索动画,Android仿京东顶部搜索框滑动伸缩动画效果

    最近使用京东发现,京东顶部的搜索框有一个新的伸缩效果,根据用户的手势滑动,伸缩搜索框.觉得效果还不错,就看了下其他的应用有没有这种伸缩的效果,发现安居客也使用了类似的一种效果,然后就想着实现这样的一种 ...

  8. android动画知乎,Android模仿知乎的回答详情页的动画效果

    废话不多说,咱们第一篇文章就是模仿"知乎"的回答详情页的动画效果,先上个原版的效果图,咱们就是要做出这个效果 在实现之前,我们先根据上面的动画效果,研究下需求,因为gif帧数有限, ...

  9. Qt5学习 模仿qq音乐播放器样式(2)——点击动画效果+歌词颜色变换展示

    拖的太久,主要再上一篇文章中,新学习了相关知识,做了右键菜单,点击按钮动画切换窗口和播放时歌词颜色显示当前播放位置. 主要为了实现功能的展示,所以很多文件读取都直接采用了本地文件这种比较low的方式. ...

最新文章

  1. SpringMVC接收checkbox传值
  2. 后台开发实用书籍--后台开发:核心技术与应用实践
  3. 详解HTTP与HTTPS
  4. python中变量名后的逗号_深入浅析python变量加逗号,的含义
  5. Hbase JMX 监控 - Region
  6. Eclipse中Maven项目出现红色感叹号问题
  7. 2019升职加薪必备:你一定要修炼的产品思维
  8. 26_多线程_第26天(Thread、线程创建、线程池)
  9. 【大数据部落】银行信用数据SOM神经网络聚类实现
  10. 漏洞 立即留言_ASPCMS留言板漏洞注入一句话木马插入数据库及修复方法
  11. unicode编码对照表
  12. iOS13.3越狱插件推荐
  13. 国内国外很火爆的代码生成器
  14. 计算机丢失deferrd.dll怎么解决,被Defer后怎么办?如何在RD调整策略绝地反击?!...
  15. 模拟人生 java 安卓版,超级模拟人生官方下载_超级模拟人生安卓版预约下载v1.0_3DM手游...
  16. 自动化测试的优缺点分析
  17. 深度linux软件中心 qq,ubuntu上安装QQ(包括多个软件安装方法)
  18. BS版的U8物料查询系统
  19. TencentOS-Tiny在苹果MacOS初上手
  20. 基于ssm的养老智慧服务平台毕业设计源码071526

热门文章

  1. php电视直播cms系统_在线网络电视直播内核完整PHP版 v3.0
  2. 有缺憾才有希冀----我的不完美求职经历
  3. HTML初识——概念
  4. Gattaca-千钧一发
  5. HackTheBox-baby breaking grad
  6. 计算机技术与软件专业技术资格(水平)考试—— 软考中级 网络工程师笔记five
  7. 求助打开网站显示welcome to nginx!
  8. Telnet 发邮件
  9. 推荐几个好用的在线编译器
  10. StopWatch简单使用