Android实现心跳的效果

最近再做一个教育类的项目。在做一些学习工具的时候,美工提出了一些要求,大致如下:

其实实现过程也不难,大致就是对一个视图控件添加一个圆形的背景,然后该视图进行动画处理,膨胀的同时,透明度增大,收缩的同时,透明度降低。

我在例子中是使用了TextView,所以首先对TextView添加一个圆形的背景:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval" >

    <size
        android:height="90dp"
        android:width="90dp" />

    <solid android:color="@color/color_space_studytools_red" />

    <corners android:radius="180dip" />

    <padding
        android:bottom="4dip"
        android:left="4dip"
        android:right="4dip"
        android:top="4dip" />

</shape>

然后为TextView添加动画,包括调整大小的ScaleAnimation和调整透明度的AlphaAnimation。调整大小有两个部分,膨胀和收缩。在膨胀完毕后马上收缩,也就是对膨胀的动画进行监听,在onAnimationEnd()方法里面进行收缩,

	// 按钮模拟心脏跳动
	private void playHeartbeatAnimation(final View heartbeatView) {
		AnimationSet swellAnimationSet = new AnimationSet(true);
		swellAnimationSet.addAnimation(new ScaleAnimation(1.0f, 1.8f, 1.0f, 1.8f, Animation.RELATIVE_TO_SELF, 0.5f,
				Animation.RELATIVE_TO_SELF, 0.5f));
		swellAnimationSet.addAnimation(new AlphaAnimation(1.0f, 0.3f));

		swellAnimationSet.setDuration(500);
		swellAnimationSet.setInterpolator(new AccelerateInterpolator());
		swellAnimationSet.setFillAfter(true);

		swellAnimationSet.setAnimationListener(new AnimationListener() {

			@Override
			public void onAnimationStart(Animation animation) {
			}

			@Override
			public void onAnimationRepeat(Animation animation) {
			}

			@Override
			public void onAnimationEnd(Animation animation) {
				AnimationSet shrinkAnimationSet = new AnimationSet(true);
				shrinkAnimationSet.addAnimation(new ScaleAnimation(1.8f, 1.0f, 1.8f, 1.0f, Animation.RELATIVE_TO_SELF,
						0.5f, Animation.RELATIVE_TO_SELF, 0.5f));
				shrinkAnimationSet.addAnimation(new AlphaAnimation(0.3f, 1.0f));
				shrinkAnimationSet.setDuration(1000);
				shrinkAnimationSet.setInterpolator(new DecelerateInterpolator());
				shrinkAnimationSet.setFillAfter(false);
				heartbeatView.startAnimation(shrinkAnimationSet);// 动画结束时重新开始,实现心跳的View
			}
		});

		heartbeatView.startAnimation(swellAnimationSet);
	}

心跳的效果是要不停地膨胀和收缩,所以要开一个线程来处理,每当收缩完毕后重新膨胀。

private class HeatbeatThread extends Thread {
		public void run() {
			try {
				sleep(100);
			} catch (InterruptedException e1) {
				e1.printStackTrace();
			}
			while (true) {
				runOnUiThread(new Runnable() {
					public void run() {
						for (View view : heartbeatViews) {
							playHeartbeatAnimation(view);
						}
					}
				});
				try {
					Thread.sleep(1500);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		};
	}

最后和Activity的生命周期结合,对线程进行开始和结束。

	private Thread heartbeatThread;

	/**
	 * 开始心跳
	 */
	private void startHeartBeat() {
		if (heartbeatThread == null) {
			heartbeatThread = new HeatbeatThread();
		}
		if (!heartbeatThread.isAlive()) {
			heartbeatThread.start();
		}
	}

	/**
	 * 停止心跳
	 */
	private void stopHeartBeat() {
		if (heartbeatThread != null && heartbeatThread.isInterrupted()) {
			heartbeatThread.interrupt();
			heartbeatThread = null;
			System.gc();
		}
	}

	@Override
	protected void onResume() {
		super.onResume();
		startHeartBeat();
	}

	@Override
	protected void onPause() {
		super.onPause();
		stopHeartBeat();
	}

Demo下载为:http://download.csdn.net/detail/u014375869/8838599

时间: 2024-08-07 00:31:21

Android实现心跳的效果的相关文章

Android仿IOS回弹效果 ScrollView回弹 总结

Android仿IOS回弹效果  ScrollView回弹 总结 应项目中的需求  需要仿IOS 下拉回弹的效果 , 我在网上搜了很多 大多数都是拿scrollview 改吧改吧 试了一些  发现总有点小问题 下面的代码是我对大家发布的做了点小修改   觉得没太大问题 package com.example.myscrollview; import android.content.Context; import android.graphics.Rect; import android.util

Android开发之动画效果浅析

Android开发之动画效果浅析 请尊重他人的劳动成果,转载请注明出处:Android开发之动画效果浅析 程序运行效果图: Android动画主要包含补间动画(Tween)View Animation.帧动画(Frame)Drawable Animation.以及属性动画Property Animation.下面依次介绍一下各个动画. 1.   补间动画(Tween) Tween动画,通过对View 的内容进行一系列的图形变换 (包括平移.缩放.旋转.改变透明度)来实现动画效果.动画效果的定义可

Android UI-SlidingMenu侧滑菜单效果

Android UI-SlidingMenu侧滑菜单效果 本篇博客给大家分享一个效果比较好的侧滑菜单的Demo,实现点击左边菜单切换Fragment. 效果如下: 主Activity代码: package com.infzm.slidingmenu.demo; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.View; import android.view.View.On

Android中半透明Activity效果另法

Android中的Activity有没有类似于像Windows程序样的窗口式显示呢? 答案当然是有. 下图就是一个窗口式Activity的效果图: 下面就说说实现过程: 首先看看AndroidManifest.xml 1: <?xml version="1.0" encoding="utf-8"?> 2: <manifest xmlns:android="http://schemas.android.com/apk/res/android

Android自定义类似ProgressDialog效果的Dialog

Android自定义类似ProgressDialog效果的Dialog. 方法如下: 1.首先准备两张自己要定义成哪样子的效果的图片和背景图片(也可以不要背景). 如我要的效果: 2.定义loading_dialog.xml布局文件(这里你也可以按自己的布局效果定义,关键是要有个imageView): [html] view plaincopy <?xml version="1.0" encoding="utf-8"?> <LinearLayout

android设置背景半透明效果

1.Button或者ImageButton的背景透明或者半透明 半透明:<Button android:background="#e0000000"···> 透明:<Button android:background="#00000000"···>   颜色和不透明度 (alpha) 值以十六进制表示法表示.任何一种颜色的值范围都是 0 到 255(00 到 ff).对于 alpha,00 表示完全透明,ff 表示完全不透明.表达式顺序是“a

android Activity切换动画效果

为Activity设置左右进出的效果,可以通过在Mainfest.xml文件中设置主题的方式来实现.还可以使用java代码. 一.设置样式 先看看实现动画的样式: <style name="AnimationRToL" mce_bogus="1" parent="@<span style="color:#ff0000;">android:style/Animation.Activity</span>&quo

巧用Drawable 实现Android UI 元素间距效果

源文地址: 巧用Drawable 实现Android UI 元素间距效果 在大部分的移动UI或者Web UI都是基于网格概念而设计的.这种网格一般都是有一些对其的方块组成.然后它们组合成为一个块. 使用网格这种设计原则能够有助于对齐UI元素,提升UI的一致性,同一时候还能让用户更加easy的获取UI上面包括的内容. 简而言之.网格是一个相当的强大的设计工具. 开发人员在使用网格设计原则的时候须要在UI 元素之间加入一些额外的间距,比方padding.margin或者spacing(依据你的设计方

Android实现左右滑动效果

本示例演示在Android中实现图片左右滑动效果.   关于滑动效果,在Android中用得比较多,本示例实现的滑动效果是使用ViewFlipper来实现的,当然也可以使用其它的View来实现.接下来就让我们开始实现这种效果.为了方便大家理解,我们先来看一下效果图: 主要效果图如下图:    接下来我们看一下程序结构图: MainActivity文件中代码: package com.android.flip; import android.app.Activity; import android