«

android实现点赞动画

时间:2024-3-2 18:33     作者:韩俊     分类: Android


想让APP给人一个好的映像,无非使自己实现的功能更加炫丽!!

接下来给大家介绍下点赞的一个动画效果:


接下来看看是如何实现的:

简单布局如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.wg.demo.MainActivity"
    android:background="@android:color/white" >

    <ImageView 
        android:id="@+id/id_hand"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/image_hand"
        android:layout_centerInParent="true"
        />

</RelativeLayout>

动画所需要的文件welcome_loading.xml:

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

    <translate
        android:duration="1200"
        android:fillAfter="true"
        android:fromYDelta="0.0"
        android:interpolator="@android:anim/linear_interpolator"
        android:toYDelta="-15%p"
         />

    <scale
        android:duration="1200"
        android:fromXScale="1"
        android:fromYScale="1"
        android:pivotX="50%"
        android:pivotY="0%"
        android:toXScale="1.2"
        android:toYScale="1.2" />

    <rotate
        android:duration="200"
        android:fromDegrees="0"
        android:pivotX="50%"
        android:pivotY="0%"
        android:startOffset="1000"
        android:toDegrees="30" />
    <rotate
        android:duration="400"
        android:fromDegrees="0"
        android:pivotX="50%"
        android:pivotY="0%"
        android:startOffset="1200"
        android:toDegrees="-60" />
    <rotate
        android:duration="400"
        android:fromDegrees="0"
        android:pivotX="50%"
        android:pivotY="0%"
        android:startOffset="1600"
        android:toDegrees="60" />
    <rotate
        android:duration="600"
        android:fromDegrees="0"
        android:pivotX="50%"
        android:pivotY="0%"
        android:startOffset="2000"
        android:toDegrees="-30" />

    <translate
        android:duration="600"
        android:fromYDelta="0.0"
        android:interpolator="@android:anim/linear_interpolator"
        android:startOffset="2000"
        android:toYDelta="18%p" />

    <scale
        android:duration="600"
        android:fromXScale="1"
        android:fromYScale="1"
        android:pivotX="50%"
        android:pivotY="0%"
        android:toXScale="0.833"
        android:toYScale="0.833"
        android:startOffset="2000" />

</set>
这里的android:fillAfter="false"指的是动画结束是画面停留在此动画的最后一帧;使用时注意:xml设置在scale标签里面设置时无效的,注意是set标签。

android:duration="600"是指显示的持续时间;

android:fromYDelta="0.0"是指动画起始时Y坐标上的位置

android:interpolator="@android:anim/linear_interpolator"是指动画的进度使用interpolater控制变化速度,即包括实现匀速,加速,减速,无规则变加速等等

android:toYDelta="-15%p"是指动画结束时Y坐标上的位置

详细参考如下:

<!--

Tween Animation:通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果。

Alpha:渐变透明度动画效果
Scale:渐变尺寸伸缩动画效果
Translate:画面转换位置移动动画效果
Rotate:画面旋转动画效果

Tween Animation 通用属性[类型] 功能 Duration[long] 属性为动画持续时间 时间以毫秒为单位
fillAfter [boolean] 当设置为true ,该动画转化在动画结束后被应用
fillBefore[boolean] 当设置为true ,该动画转化在动画开始前被应用

interpolator 指定一个动画的插入器 有一些常见的插入器
accelerate_decelerate_interpolator
加速-减速 动画插入器
accelerate_interpolator
加速-动画插入器
decelerate_interpolator
减速- 动画插入器
其他的属于特定的动画效果
repeatCount[int] 动画的重复次数
RepeatMode[int] 定义重复的行为 1:重新开始 2:plays backward
startOffset[long] 动画之间的时间间隔,从上次动画停多少时间开始执行下个动画
zAdjustment[int] 定义动画的Z Order的改变 0:保持Z Order不变
1:保持在最上层
-1:保持在最下层
-->
<!-- 尺寸伸缩动画效果 scale

属性:interpolator 指定一个动画的插入器

有三种动画插入器:
accelerate_decelerate_interpolator 加速-减速 动画插入器
accelerate_interpolator 加速-动画插入器
decelerate_interpolator 减速- 动画插入器

其他的属于特定的动画效果
fromXScale 属性为动画起始时 X坐标上的伸缩尺寸
toXScale 属性为动画结束时 X坐标上的伸缩尺寸

fromYScale 属性为动画起始时Y坐标上的伸缩尺寸
toYScale 属性为动画结束时Y坐标上的伸缩尺寸

说明:
以上四种属性值
0.0表示收缩到没有
1.0表示正常无伸缩
值小于1.0表示收缩
值大于1.0表示放大

pivotX 属性为动画相对于物件的X坐标的开始位置
pivotY 属性为动画相对于物件的Y坐标的开始位置
说明:
以上两个属性值 从0%-100%中取值
50%为物件的X或Y方向坐标上的中点位置
长整型值:
duration 属性为动画持续时间
说明: 时间以毫秒为单位

布尔型值:
fillAfter 属性 当设置为true ,该动画转化在动画结束后被应用
-->
<!--
画面转换位置移动动画效果 translate

fromXDelta toXDelta 为动画、结束起始时 X坐标上的位置
fromYDelta toYDelta 为动画、结束起始时 Y坐标上的位置
-->

<!--
画面转移旋转动画效果 rotate

fromDegrees 为动画起始时物件的角度 说明
当角度为负数——表示逆时针旋转
当角度为正数——表示顺时针旋转
(负数from——to正数:顺时针旋转)
(负数from——to负数:逆时针旋转)
(正数from——to正数:顺时针旋转)
(正数from——to负数:逆时针旋转)
toDegrees 属性为动画结束时物件旋转的角度 可以大于360度
pivotX
pivotY 为动画相对于物件的X、Y坐标的开始位 说明:以上两个属性值 从0%-100%中取值
50%为物件的X或Y方向坐标上的中点位置
-->

说了这么久,接下来看看我们的activity是这样的:

public class MainActivity extends Activity {
    private ImageView handImage;
    private Animation animation;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
        handImage = (ImageView) findViewById(R.id.id_hand);
        animation = AnimationUtils.loadAnimation(this, R.anim.welcome_loading);
    }

    @Override
    protected void onResume() {
        super.onResume();
        handImage.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                handImage.startAnimation(animation);
            }
        });
    }
}

好了,就这样决绝啦!!


资源下载地址:

http://download.csdn.net/detail/hehaiminginadth/8800479



参考链接:

http://blog.sina.com.cn/s/blog_4e60b09d0100q887.html



标签: android

热门推荐