android 自定义动画

android中主要有两种动画模式,一种是tweened animation(渐变动画),包含了4种动画类型,alpha(透明度)、scale(尺寸缩放)、translate(位置变换)、rotate(图形旋转),第二种是frame by frame (帧动画),就是逐帧播放设置好的动画

我们看下第一种动画的实现

第一步,定义好动画的xml文件,在res/anim下新建myanim.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 透明度变换| 开始透明度为10%| 目标透明度为100% |时间为2秒 -->
    <alpha
     android:fromAlpha="0.1"
     android:toAlpha="1.0"
     android:duration="2000"
     />
    <!-- 缩放动画 | 开始X和Y都为0|动画结束时放大到140%|pivotX与pivotY设置动画相对于自身的位置|fillAfter表示播放完成后是否 被应用-->
    <scale
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:fromXScale="0.0"
        android:toXScale="1.4"
        android:fromYScale="0.0"
        android:toYScale="1.4"
        android:pivotX="50%"
        android:pivotY="50%"
        android:fillAfter="false"
        android:duration="3000"
        />
    <!-- 位置变换 |起始X和为Y都为30 | 结束X为0,Y为50,也就是会向左下方向移动|时间为3秒 -->
    <translate
        android:fromXDelta="30"
        android:toXDelta="0"
        android:fromYDelta="30"
        android:toYDelta="50"
        android:duration="3000"
        />
    <!-- 旋转动画 |从0度开始 ,结束角度为350,动画相对于自身位置为50%,时间为3秒-->
    <rotate
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:fromDegrees="0"
        android:toDegrees="+350"
        android:pivotX="50%"
        android:pivotY="50%"
        android:duration="3000"
        />
</set>

然后在activity_main.xml 新增加一个图片和按钮,按钮用来启动动画

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/RelativeLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.ssln.animation.MainActivity" >

    <ImageView
        android:id="@+id/myImageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:layout_gravity="center_horizontal"
        android:src="@drawable/img" />

    <Button
        android:id="@+id/butStart"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/myImageView"
        android:layout_alignParentBottom="true"
        android:text="开始动画" />

</RelativeLayout>

最后,在MainActivity.java中添加代码

package com.ssln.animation;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends ActionBarActivity {

    Animation myAnim;    //动画
    ImageView myImg;    //图像
    Button      myBtn;    //开始按钮

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //加载动画
        myAnim=AnimationUtils.loadAnimation(this, R.anim.myanim);
        //查找图片
        myImg=(ImageView)findViewById(R.id.myImageView);
        //查走按钮
        myBtn=(Button)findViewById(R.id.butStart);

        myBtn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                //启动动画
                myImg.startAnimation(myAnim);
            }
        });

    }
}

显示效果如下,旋转中透明度增加,放大了图片并平移了位置

时间: 2024-10-29 19:09:52

android 自定义动画的相关文章

Android自定义动画类——实现3D旋转动画

Android中的补间动画分为下面几种: (1)AlphaAnimation :透明度改变的动画. (2)ScaleAnimation:大小缩放的动画. (3)TranslateAnimation:位移变化的动画. (4)RotateAnimation:旋转动画. 然而在实际项目中透明度.缩放.位移.旋转这几种动画并不能满足我们的需求,比如我们需要一个类似下面的3D旋转动画. 这时候就需要用到自定义动画,自定义动画需要继承Animation,并重写applyTransformation(floa

Android 自定义动画 Loading

转自:http://my.oschina.net/janson2013/blog/118558 1.定义一个ImageView 定义一个ImageView是为了装载图片,其中的图片将被rotate用来进行旋转,其他View亦可. 资源文件为 Java代码    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android

创建Material Design风格的Android应用--使用自定义动画

动画在Material Design设计中给用户反馈放用户点击时,并且在程序用户界面中提供连贯的视觉.Material主题为按钮(Button)和activity的转换提供了一些默认的动画,在android5.0(api 21)和更高的版本,你可以自定义这些动画和创建一个新动画: Touch feedback(触摸反馈) Circular Reveal(循环揭露效果) Activity transitions(Activity转换效果) Curved motion(曲线运动) View stat

Android Material Design-Defining Custom Animations(自定义动画)-(六)

用户跟你的app进行交互时,material design中的动画给予用户动作的反馈和提供视觉的一致性(感受).Material主题提供了一些默认的按钮和activity过渡的动画效果,而在 Android 5.0(API级别21)或以上的系统版本中你可以自定义这些动画,还可以创建新的动画: l  Touch feedback(触摸反馈) l  Circular Reveal(循环显示) l  Activity transitions(Activity过渡) l  Curved motion(曲

【转】android 自定义ViewPager,修改原动画

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38026503 记 得第一次见到ViewPager这个控件,瞬间爱不释手,做东西的主界面通通ViewPager,以及图片切换也抛弃了ImageSwitch之类的,开 始让ViewPager来做.时间长了,ViewPager的切换效果觉得枯燥,形成了审美疲劳~~我们需要改变,今天教大家如何改变ViewPager 切换时的效果,实现个性化的图片切换~~ 看一下这样效果的图片切换: 是

Android自定义水波纹动画Layout

Android自定义水波纹动画Layout 源码是双11的时候就写好了,但是我觉得当天发不太好,所以推迟了几天,没想到过了双11女友就变成了前女友,桑心.唉不说了,来看看代码吧. 展示效果 Hi前辈 话不多说,我们先来看看效果: 这一张是<Hi前辈>的搜索预览图,你可以在这里下载这个APP查看更多效果:http://www.wandoujia.com/apps/com.superlity.hiqianbei LSearchView 这是一个MD风格的搜索框,集成了ripple动画以及searc

android 动画(4)自定义动画

动画(4)自定义动画 使用监听事件对animation 进行状态的变化 large.xml <?xml version="1.0" encoding="utf-8"?> <scale xmlns:android="http://schemas.android.com/apk/res/android" android:duration="1000" android:fromXScale="0.2&qu

Android自定义组件系列【8】——遮罩文字动画

遮罩文字的动画我们在Flash中非常常见,作为Android的应用开发者你是否也想将这种动画做到你的应用中去呢?这一篇文章我们来看看如何自定义一个ImageView来实现让一张文字图片实现文字的遮罩闪烁效果,下面先来看看效果吧. (录屏幕延时导致效果看起来不是很好) 一.实现原理 实现原理是重写View的onCreate方法,获取图片资源后对每个像素的透明度进行修改来实现,再启动一个线程来循环改变某个区域中的像素透明度. RGBA基础知识:(下面几段介绍文字引用自维基百科) RGBA是代表Red

android 自定义view+属性动画实现充电进度条

近期项目中需要使用到一种类似手机电池充电进度的动画效果,以前没学属性动画的时候,是用图片+定时器的方式来完成的,最近一直在学习动画这一块,再加上复习一下自定义view的相关知识点,所以打算用属性动画和自定义view的方式来完成这个功能,将它开源出来,供有需要的人了解一下相关的内容. 本次实现的功能类似下面的效果: 接下来便详细解析一下如何完成这个功能,了解其中的原理,这样就能举一反三,实现其他类似的动画效果了. 详细代码请看大屏幕 https://github.com/crazyandcoder