android帧动画,移动位置,缩放,改变透明度等动画讲解

1.苦逼的需求又来了,需要实现一些动画效果,第一个想到的是播放gif图片,但是这样会占包的资源,并且清晰度不高,于是想着程序实现,自己用帧动画+缩放+移动+透明度 实现了一些想要的效果,这里跟大家分享一下

2.效果图如下:

3.帧动画实现代码

1).首先获取每帧显示的ImageView控件,然后把所有帧放到AnimationDrawable对象里面去,开启动画,通过handle延时2秒关闭动画

		ImageView ivFrame = (ImageView) findViewById(R.id.iv_frame);
		// 通过逐帧动画的资源文件获得AnimationDrawable示例
		final AnimationDrawable frameAnim = (AnimationDrawable) getResources().getDrawable(R.drawable.thank_you_boss_anim);
		ivFrame.setBackgroundDrawable(frameAnim);// 把AnimationDrawable设置为ImageView的背景
		frameAnim.start();

		new Handler().postDelayed(new Runnable() {
			@Override
			public void run(){
				if (frameAnim != null && frameAnim.isRunning()) {//2秒之后结束动画
					frameAnim.stop();
				}
			}
		},2000);

2).thank_you_boss_anim.xml  所有帧的布局文件   设置每一帧的图片,每帧时间

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false" >
    <!-- 定义一个动画帧,Drawable为img0,持续时间300毫秒 -->
    <item  android:drawable="@drawable/icon_think_boss_one"   android:duration="100"/>
    <item android:drawable="@drawable/icon_think_boss_two"  android:duration="100"/>
    <item android:drawable="@drawable/icon_think_boss_three"  android:duration="100"/>
    <item  android:drawable="@drawable/icon_think_boss_four"  android:duration="300"/>
</animation-list>

4.帧动画加上移动  放大  透明度效果   

开启一个dialog,背景设置透明,得到帧动画跟文字图片显示ImageView,然后开启两个动画。

	/**
	 * 谢谢土豪打赏
	 */
	private void thankTuhaoReward(){
		View view=LayoutInflater.from(this).inflate(R.layout.activity_thank_tuhao_reward,null);
		final Dialog tyrantDialog = new Dialog(this,R.style.selectorDialog);

		tyrantDialog.findViewById(R.id.iv_frame);

		tyrantDialog.setContentView(view);
		tyrantDialog.setCanceledOnTouchOutside(true);

		ImageView ivFrame=(ImageView) tyrantDialog.findViewById(R.id.iv_frame);

		// 通过逐帧动画的资源文件获得AnimationDrawable示例
		final AnimationDrawable frameAnim=(AnimationDrawable) getResources().getDrawable(R.drawable.thank_you_tyrant_anim);
		ivFrame.setBackgroundDrawable(frameAnim);//把AnimationDrawable设置为ImageView的背景
		frameAnim.start();

		ImageView playThinkOneText=(ImageView) tyrantDialog.findViewById(R.id.play_think_one_text);
		Animation anim = AnimationUtils.loadAnimation(this,R.anim.translate_thank_you_tyrant);
		playThinkOneText.startAnimation(anim);
		anim.setFillAfter(true);
		tyrantDialog.show();

		view.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				stop(frameAnim);
				tyrantDialog.cancel();
			}
		});

		anim.setAnimationListener(new AnimationListener() {
			@Override
			public void onAnimationStart(Animation animation) {}
			@Override
			public void onAnimationRepeat(Animation animation) {}
			@Override
			public void onAnimationEnd(Animation animation){
				stop(frameAnim);
				tyrantDialog.cancel();
			}
		});
	}

	/**
	 * 停止播放
	 */
	protected void stop(AnimationDrawable frameAnim) {
		if (frameAnim != null && frameAnim.isRunning()) {
			frameAnim.stop();
		}
	}

帧动画的布局文件我就不贴出来了,贴一下移动,缩放,改变透明度的布局文件    translate_thank_you_tyrant.xml

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

    <translate
        android:duration="1000"
        android:fromXDelta="30"
        android:fromYDelta="30"
        android:toXDelta="30"
        android:toYDelta="-120" />

    <alpha
        android:duration="2000"
        android:fromAlpha="0.4"
        android:toAlpha="1.0" />

    <scale
        android:duration="2000"
        android:fillAfter="false"
        android:fromXScale="0.4"
        android:fromYScale="0.4"
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="1.0"
        android:toYScale="1.0" />
    <!--
     translate 位置转移动画效果
        整型值:
        fromXDelta 属性为动画起始时 X坐标上的位置
        toXDelta   属性为动画结束时 X坐标上的位置

        fromYDelta 属性为动画起始时 Y坐标上的位置
        toYDelta   属性为动画结束时 Y坐标上的位置
        注意:没有指定fromXType toXType fromYType toYType 时候,默认是以自己为相对参照物 

        长整型值:
        duration  属性为动画持续时间
        说明:      时间以毫秒为单位
    -->

</set>

点击下载源码

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-08 13:07:33

android帧动画,移动位置,缩放,改变透明度等动画讲解的相关文章

【Android动画】之Tween动画 (渐变、缩放、位移、旋转)

Android 平台提供了两类动画. 一类是Tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转.平移.放缩和渐变). 第二类就是 Frame动画,即顺序的播放事先做好的图像,与gif图片原理类似. 下面就讲一下Tweene Animations. 主要类: Animation  动画 AlphaAnimation 渐变透明度 RotateAnimation 画面旋转 ScaleAnimation 渐变尺寸缩放 TranslateAnimation 位置移动 Animatio

[android] 帧动画和补间动画

逐帧显示一张图片,连起来成为动画 在res/drawable/目录下,创建一个xxx.xml的文件 添加<animation-list>节点,设置是否循环android:oneshot:”false” 添加条目<item>节点,设置资源android:drawable=”@drawable/xxx” 设置执行时间,android:duration=”100” 逐帧添加对应的图片 获取ImageView对象,通过findViewById() 调用ImageView对象的setBack

【转】android动画之Tween动画 (渐变、缩放、位移、旋转)

原文:http://blog.csdn.net/feng88724/article/details/6318430 Android 平台提供了两类动画. 一类是Tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转.平移.放缩和渐变). 第二类就是 Frame动画,即顺序的播放事先做好的图像,与gif图片原理类似. 下面就讲一下Tweene Animations. 主要类: Animation   动画 AlphaAnimation 渐变透明度 RotateAnimation

进阶的PageView——封装ScrollView 实现自动调整位置,缩放,透明度实例

上篇介绍了,简单封装PageView 的基本实现.XKPageView基本实现了,PageView 的功能,就可能用来实现上篇说的使用系统自带PageView实现不了的功能了(有点绕~) 同样地,我们先来看看使用效果图: 进阶使用XKPageView,主要用到了我们上篇说到的XKPageViewDelegate 的PageViewDidScroll函数,监听滚动事件. 滚动过程中计算金币缩放大小,还有 透明度设置.然后新增加了这个回调函数 std::function<void(XKPageVie

android动态控制组件的位置、大小和新的动画

一.动态设置组件的位置 其中view是需要改变位置的控件,top是需要设制的位置: private static void setLayoutX(View view,int top) { //克隆view的width.height.margin的值生成margin对象 MarginLayoutParams margin=new MarginLayoutParams(view.getLayoutParams()); //设置新的边距 margin.setMargins(margin.leftMar

动画效果-基础动画设置(改变大小,改变透明度,翻转,旋转,复原)

在可视化编程下 #import "BaseViewController.h" @interface BaseViewController () @property (weak, nonatomic) IBOutlet UIImageView *imageView; @end @implementation BaseViewController - (void)viewDidLoad { [super viewDidLoad]; } - (void)didReceiveMemoryWar

android 帧动画的实现及图片过多时OOM解决方案(一)

一,animation_list.xml中静态配置帧动画的顺序,如下: <?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="true" > <item android:drawable=&q

android动画具体解释六 XML中定义动画

动画View 属性动画系统同意动画View对象并提供非常多比view动画系统更高级的功能.view动画系统通过改变绘制方式来变换View对象,view动画是被view的容器所处理的,由于View本身没有要操控的属性.结果就是View被动画了.但View对象本身并没有变化. 在Android3.0中,新的属性和对应的getter和setter方法被增加以克服此缺点. 属性动画系统能够通过改变View对象的真实属性来动画Views. 并且.View也会在其属性改变时自己主动调用invalidate(

android动画详解六 XML中定义动画

动画View 属性动画系统允许动画View对象并提供很多比view动画系统更高级的功能.view动画系统通过改变绘制方式来变换View对象,view动画是被view的容器所处理的,因为View本身没有要操控的属性.结果就是View被动画了,但View对象本身并没有变化.在Android3.0中,新的属性和相应的getter和setter方法被加入以克服此缺点. 属性动画系统可以通过改变View对象的真实属性来动画Views.而且,View也会在其属性改变时自动调用invalidate()方法来刷