gpt4 book ai didi

java - 如何使用Animation类获得流畅的动画效果?

转载 作者:太空宇宙 更新时间:2023-11-04 11:22:02 26 4
gpt4 key购买 nike

我有以下类来向上滑动 FrameLayout。它基本上降低了 View 的高度。它的效果非常好,但唯一的问题是动画的流畅度并不能令我满意。它提供 10 FPS。

SlideUpDownAnimation.java

package anim;

import android.util.Log;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.Transformation;

public class SlideUpDownAnimation extends Animation {
private static final String TAG = "ANIMATION";
private View view;
private boolean isUp;
private int startHeight;
private int finalHeight;
private int difference;

public SlideUpDownAnimation(View view, boolean isUp, int finalHeight) {
this.view = view;
this.isUp = isUp;
this.startHeight = view.getMeasuredHeight();
this.finalHeight = finalHeight;
this.difference = this.finalHeight - view.getLayoutParams().height;
}

@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
int newHeight;

// daha yüksek bir değerden azalarak ilerliyor demektir.
if (!isUp) {
newHeight = (int) (this.difference * (1 - interpolatedTime));
view.getLayoutParams()
.height = newHeight;
} else {
newHeight = (int) (this.startHeight - (this.difference * interpolatedTime));
view.getLayoutParams()
.height = newHeight;
}

Log.i(TAG, "Start height: " + this.startHeight + " New height: " + newHeight + " interpolated time: " + interpolatedTime);

view.requestLayout();
}
}

我将持续时间设置为 1000 毫秒。这是我的日志:

06-28 17:48:21.876 13403-13403/com.menulux.menu I/ANIMATION: Start height: 800 New height: 800 interpolated time: 0.0
06-28 17:48:21.876 13403-13403/com.menulux.menu I/ANIMATION: Start height: 800 New height: 800 interpolated time: 0.0
06-28 17:48:22.006 13403-13403/com.menulux.menu I/ANIMATION: Start height: 800 New height: 777 interpolated time: 0.061846644
06-28 17:48:22.116 13403-13403/com.menulux.menu I/ANIMATION: Start height: 800 New height: 739 interpolated time: 0.16699407
06-28 17:48:22.236 13403-13403/com.menulux.menu I/ANIMATION: Start height: 800 New height: 679 interpolated time: 0.33210987
06-28 17:48:22.356 13403-13403/com.menulux.menu I/ANIMATION: Start height: 800 New height: 613 interpolated time: 0.51570535
06-28 17:48:22.476 13403-13403/com.menulux.menu I/ANIMATION: Start height: 800 New height: 547 interpolated time: 0.6971313
06-28 17:48:22.591 13403-13403/com.menulux.menu I/ANIMATION: Start height: 800 New height: 493 interpolated time: 0.8468266
06-28 17:48:22.716 13403-13403/com.menulux.menu I/ANIMATION: Start height: 800 New height: 453 interpolated time: 0.9569855
06-28 17:48:22.831 13403-13403/com.menulux.menu I/ANIMATION: Start height: 800 New height: 438 interpolated time: 0.99944496
06-28 17:48:22.961 13403-13403/com.menulux.menu I/ANIMATION: Start height: 800 New height: 438 interpolated time: 1.0
06-28 17:48:23.076 13403-13403/com.menulux.menu I/ANIMATION: Start height: 800 New height: 438 interpolated time: 1.0

最佳答案

您可以使用 view.animate().translationY(distance); 将 View 向下滑动一段距离

然后使用以下命令将其滑回原始位置:view.animate().translationY(0);

您还可以进行一些有趣的组合,例如:

// Prepare the View for the animation
view.setVisibility(View.VISIBLE);
view.setAlpha(0.0f);

// Start the animation
view.animate()
.translationY(view.getHeight())
.alpha(1.0f);

它将按照其高度向下滑动,然后消失。

您也可以将该 View 淡出回其原始位置。

使用AnimatorListener,您也可以在动画完成后将view设置为“消失”。

此处引用:Show hide view with animation

如果您想走 XML 路线。这也可能是一个不错的选择:

  <?xml version="1.0" encoding="utf-8"?>

<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="300"
android:fromYDelta="100%"
android:interpolator="@android:anim/decelerate_interpolator"
android:toYDelta="0%" />

可以更改这些增量以获得不同的效果/方向

关于java - 如何使用Animation类获得流畅的动画效果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44806095/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com