博客
关于我
Android UI效果篇-(3)用属性动画实现收缩菜单
阅读量:358 次
发布时间:2019-03-04

本文共 3375 字,大约阅读时间需要 11 分钟。

属性动画实用指南:如何实现收缩菜单效果

属性动画是Android开发中一个强大的工具,能够通过代码直接修改视图的属性,从而实现各种动画效果。本文将详细介绍如何利用属性动画实现一个常见的收缩菜单功能。

第一种收缩样式:基本使用方法

以下是通过代码实现收缩菜单的基本样式。首先,我们需要定义一个开关标志位 isOpen,用于控制菜单的展开状态。接下来,我们获取底部菜单栏 ll 的实例,并为浮动按钮 fab 设置点击事件。

boolean isOpen = true;LinearLayout ll = (LinearLayout) findViewById(R.id.llbottom);FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);fab.setOnClickListener(new View.OnClickListener() {    @Override    public void onClick(View view) {        if (isOpen) {            isOpen = false;            ObjectAnimator animator = ObjectAnimator.ofFloat(ll, View.TRANSLATION_X, ll.getWidth());            animator.start();        } else {            isOpen = true;            ObjectAnimator animator = ObjectAnimator.ofFloat(ll, View.TRANSLATION_X, 0);            animator.start();        }    }});

在上述代码中,我们通过 ObjectAnimator.ofFloat 方法为菜单栏 ll 创建了一个平移动画,平移的方向是 X 轴。平移的距离设置为菜单栏的宽度。当 isOpen 为 true 时,菜单栏会从右边平移到左边,实现收缩效果。反之,当 isOpen 为 false 时,菜单栏会从左边平移到右边,展开。

属性动画的属性值解析

属性动画的核心在于对各个属性的理解和使用。以下是属性动画支持的主要属性及其作用:

  • translationX:用于控制 X 轴方向的平移。
  • translationY:用于控制 Y 轴方向的平移。
  • translationZ:虽然在大多数情况下不建议使用,但它可以用于 Z 轴方向的平移。
  • x 和 y:用于控制视图的 X 和 Y 坐标。
  • alpha:用于控制视图的透明度。
  • rotation:用于控制视图的旋转角度。
  • rotationX 和 rotationY:用于控制 3D 旋转。
  • scaleX 和 scaleY:用于控制 X 轴和 Y 轴方向的缩放。

需要注意的是,部分属性(如 translationZ)在不同 API 版本中可能存在兼容性问题,建议谨慎使用。

如何改变属性动画的缩放点

属性动画的一个不足之处是没有提供类似补间动画中的 pivotX 或 pivotY 方法来设置缩放动画的缩放中心。因此,我们需要手动设置缩放点。以下是一个实现方法的示例:

DisplayMetrics metric = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(metric);int width = metric.widthPixels;ll.setPivotX(width);ll.setPivotY(0);

通过上述代码,我们可以将缩放点设置为菜单栏的右上角(默认是左上角)。这个方法非常实用,因为它允许我们自定义缩放效果的中心点。

其他效果的实现示例

除了平移和缩放以外,属性动画还支持其他类型的动画效果。以下是一些常见实现示例:

1. 平移 Y 轴

if (isOpen2) {    isOpen2 = false;    ObjectAnimator animator = ObjectAnimator.ofFloat(ll2, View.TRANSLATION_Y, ll2.getHeight());    animator.start();} else {    isOpen2 = true;    ObjectAnimator animator = ObjectAnimator.ofFloat(ll2, View.TRANSLATION_Y, 0);    animator.start();}

2. 缩放 Y 轴

if (isOpen3) {    isOpen3 = false;    ObjectAnimator animator = ObjectAnimator.ofFloat(ll3, View.SCALE_Y, 1);    animator.start();} else {    isOpen3 = true;    ObjectAnimator animator = ObjectAnimator.ofFloat(ll3, View.SCALE_Y, 0);    animator.start();}

3. 缩放 X 轴

if (isOpen4) {    isOpen4 = false;    ObjectAnimator animator = ObjectAnimator.ofFloat(ll4, View.SCALE_X, 1);    animator.start();} else {    isOpen4 = true;    ObjectAnimator animator = ObjectAnimator.ofFloat(ll4, View.SCALE_X, 0);    animator.start();}

4. 同时缩放 X 轴和 Y 轴

if (isOpen5) {    isOpen5 = false;    ObjectAnimator animator = ObjectAnimator.ofFloat(ll5, View.SCALE_X, 1);    ObjectAnimator animator1 = ObjectAnimator.ofFloat(ll5, View.SCALE_Y, 1);    AnimatorSet animatorSet = new AnimatorSet();    animatorSet.playTogether(animator, animator1);    animatorSet.start();} else {    isOpen5 = true;    ObjectAnimator animator = ObjectAnimator.ofFloat(ll5, View.SCALE_X, 0);    ObjectAnimator animator1 = ObjectAnimator.ofFloat(ll5, View.SCALE_Y, 0);    AnimatorSet animatorSet = new AnimatorSet();    animatorSet.playTogether(animator, animator1);    animatorSet.start();}

这些代码示例展示了如何通过属性动画实现不同类型的动画效果。无论是平移、缩放还是旋转,属性动画都可以通过简单的代码实现,从而为用户带来更丰富的交互体验。

总结

属性动画是 Android 开发中一个强大的工具,能够通过代码直接修改视图的属性,从而实现各种动画效果。通过合理使用属性动画,我们可以轻松实现收缩菜单、平移、缩放、旋转等多种动画效果。在实际开发中,建议根据具体需求选择合适的属性动画类型,并通过合理设置缩放点和动画效果,打造更优雅的用户界面。

转载地址:http://xepr.baihongyu.com/

你可能感兴趣的文章