android 用java实现 一串文字 从上到下单个文字显示 又从下到上单个逐渐收起 写出java代码
时间: 2024-03-17 08:46:55 浏览: 16
好的,以下是一个简单的Java代码示例,实现一串文字从上到下单个文字显示,又从下到上单个逐渐收起:
```
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ValueAnimator;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private static final int ANIMATION_DURATION = 500;
private static final int TEXT_SIZE = 24;
private static final int TEXT_COLOR = 0xFF000000;
private static final String TEXT_CONTENT = "一串文字";
private FrameLayout mContainer;
private TextView mTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContainer = findViewById(R.id.container);
// 创建一个TextView
mTextView = new TextView(this);
mTextView.setText(TEXT_CONTENT);
mTextView.setTextSize(TypedValue.COMPLEX_UNIT_SP, TEXT_SIZE);
mTextView.setTextColor(TEXT_COLOR);
mTextView.setGravity(Gravity.CENTER);
// 将TextView添加到容器中
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
params.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL;
mContainer.addView(mTextView, params);
// 创建从上到下显示的动画
ValueAnimator animIn = ValueAnimator.ofFloat(0f, 1f);
animIn.setDuration(ANIMATION_DURATION);
animIn.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationStart(Animator animation) {
// 动画开始时,将TextView透明度设为0
mTextView.setAlpha(0f);
}
});
animIn.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
// 动画更新时,将TextView透明度设为动画值,并将TextView向下移动
float alpha = (float) animation.getAnimatedValue();
mTextView.setAlpha(alpha);
int containerHeight = mContainer.getHeight();
int textViewHeight = mTextView.getHeight();
int topMargin = (int) ((containerHeight - textViewHeight) / 2 * (1 - alpha));
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) mTextView.getLayoutParams();
params.topMargin = topMargin;
mTextView.setLayoutParams(params);
}
});
// 创建从下到上收起的动画
ValueAnimator animOut = ValueAnimator.ofFloat(1f, 0f);
animOut.setDuration(ANIMATION_DURATION);
animOut.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
// 动画结束时,将TextView从容器中移除
mContainer.removeView(mTextView);
}
});
animOut.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
// 动画更新时,将TextView透明度设为动画值,并将TextView向上移动
float alpha = (float) animation.getAnimatedValue();
mTextView.setAlpha(alpha);
int containerHeight = mContainer.getHeight();
int textViewHeight = mTextView.getHeight();
int topMargin = (int) ((containerHeight - textViewHeight) / 2 * alpha);
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) mTextView.getLayoutParams();
params.topMargin = topMargin;
mTextView.setLayoutParams(params);
}
});
// 启动动画
animIn.start();
animOut.setStartDelay(ANIMATION_DURATION * (TEXT_CONTENT.length() + 1));
animOut.start();
}
}
```
其中,`mContainer`是一个`FrameLayout`,用于容纳`TextView`;`ANIMATION_DURATION`表示动画持续时间,`TEXT_SIZE`和`TEXT_COLOR`表示`TextView`的字体大小和颜色;`TEXT_CONTENT`是要显示的文字。
代码中首先创建一个`TextView`,并将其添加到`mContainer`中。然后创建两个`ValueAnimator`对象,分别实现从上到下显示和从下到上收起的动画效果。最后启动动画,其中`animOut.setStartDelay(ANIMATION_DURATION * (TEXT_CONTENT.length() + 1))`表示让从下到上收起的动画延迟一段时间再启动,以实现单个文字逐个收起的效果。
希望这个示例能够帮助您实现您的需求,如果您还有任何问题或需要更多的帮助,请随时告诉我。