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

本文共 3433 字,大约阅读时间需要 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 轴。平移的距离设置为菜单栏的宽度。当 isOpentrue 时,菜单栏会从右边平移到左边,实现收缩效果。反之,当 isOpenfalse 时,菜单栏会从左边平移到右边,展开。

属性动画的属性值解析

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

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

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

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

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

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/

你可能感兴趣的文章
Numpy.fft.fft和numpy.fft.fftfreq有什么不同
查看>>
Numpy.ndarray对象不可调用
查看>>
Numpy.VisibleDeproationWarning:从不整齐的嵌套序列创建ndarray
查看>>
Numpy:按多个条件过滤行?
查看>>
Numpy:条件总和
查看>>
numpy、cv2等操作图片基本操作
查看>>
numpy中的argsort的用法
查看>>
NumPy中的精度:比较数字时的问题
查看>>
numpy判断对应位置是否相等,all、any的使用
查看>>
Numpy多项式.Polynomial.fit()给出的系数与多项式.Polyfit()不同
查看>>
Numpy如何使用np.umprod重写range函数中i的python
查看>>
numpy学习笔记3-array切片
查看>>
numpy数组替换其中的值(如1替换为255)
查看>>
numpy数组索引-ChatGPT4o作答
查看>>
NUMPY矢量化np.prod不能构造具有超过32个操作数的ufunc
查看>>
Numpy矩阵与通用函数
查看>>
numpy绘制热力图
查看>>
numpy转PIL 报错TypeError: Cannot handle this data type
查看>>
Numpy闯关100题,我闯了95关,你呢?
查看>>
nump模块
查看>>