本文共 2175 字,大约阅读时间需要 7 分钟。
基于飞掷的动画使用与物体速度成比例的摩擦力。使用它来动画化一个对象的属性,并且想要逐渐结束动画。它有一个最初的势头,大部分是从手势速度收到的,并逐渐减慢。当动画的速度足够低以至于在设备屏幕上没有可见的变化时,动画即告结束
要了解相关主题,请阅读以下指南要使用基于物理学的支持库,您必须按如下方式将支持库添加到您的项目中:
dependencies { implementation 'com.android.support:support-dynamic-animation:27.1.1' }
在FlingAnimation类,您可以为对象创建一扔动画。要构建一个动画动画,请创建一个FlingAnimation类的实例并提供一个对象以及您想要进行动画处理的对象的属性。
FlingAnimation fling = new FlingAnimation(view, DynamicAnimation.SCROLL_X);
起始速度定义了动画属性在动画开始时的变化速度。默认启动速度设置为每秒零像素。因此,您必须定义开始速度以确保动画不会立即结束。
您可以使用固定值作为起始速度,也可以将其基于触摸手势的速度。如果您选择提供固定值,您应该以每秒dp的值定义值,然后将其转换为每秒像素数。以每秒dp定义值允许速度独立于设备的密度和形状因子。有关将起始速度转换为每秒像素数的更多信息,请参阅 Spring Animation中的“ 每秒转换为每秒像素数”部分 。
要设置速度,请调用该setStartVelocity()方法并以每秒像素为单位传递速度。该方法返回设置速度的投掷对象。
注意:使用 GestureDetector.OnGestureListener和 VelocityTracker类分别检索和计算触摸手势的速度。
如果要将属性值限制在一定范围内,可以设置最小动画值和最大动画值。当为具有固有范围的属性(如alpha(从0到1))设置动画时,此范围控件特别有用。
注意:当动画动画的值达到最小值或最大值时,动画结束。
要设置最小值和最大值,分别调用setMinValue() 和setMaxValue()方法。两种方法都会返回您设置了该值的动画对象。
该setFriction()方法可以让您更改动画的摩擦。它定义了动画中速度下降的速度。
注意:如果您未在动画开始时设置摩擦,则动画使用默认摩擦值1。该方法返回其动画使用您提供的摩擦值的对象。
示例代码下面的例子说明了一个水平投掷。从速度追踪器捕获的速度是velocityX,滚动边界被设置为0和maxScroll。摩擦力设置为1.1。FlingAnimation fling = new FlingAnimation(view, DynamicAnimation.SCROLL_X);fling.setStartVelocity(-velocityX) .setMinValue(0) .setMaxValue(maxScroll) .setFriction(1.1f) .start();
当您为未以像素定义的自定义属性设置动画时,应设置用户可见的动画值的最小更改。它决定了结束动画的合理阈值。
动画时不需要调用此方法, DynamicAnimation.ViewProperty因为最小可见变化是从属性派生的。例如:
要设置动画的最小可见变化,请调用该 setMinimumVisibleChange()方法,并传递最小可见常量或您需要为自定义属性计算的值。有关计算此值的更多信息,请参阅 计算最小可见更改值 部分。
anim.setMinimumVisibleChange(DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE);
注意:只有在为像素定义的自定义属性制作动画时,才需要传递值。
要计算自定义属性的最小可见更改值,请使用以下公式:
最小可见变化=自定义属性值的范围/以像素为单位的反转范围
例如,要进行动画制作的属性从0进步到100.这对应于200像素的更改。根据公式,最小可见变化值是100/200等于0.5像素。
Lastest Update:2018.05.23
QQ:94297366
微信打赏:
公众号推荐:
转载于:https://blog.51cto.com/4789781/2120981