我的视图默认为invisible
(这是第一次)。
现在我需要使用此VISIBLE
:
animation
if (myView.getVisibility() == View.INVISIBLE) {
myView.setVisibility(View.VISIBLE);
myView.animate().translationY(0);
}
(与SnackBar默认动画一样)
但这不起作用。它将以默认动画
变为可见有什么简单的方法可以达到这个目的吗?
注意
我想要解雇我的观点,就像这样:
myView.animate().translationY(myView.getHeight());
答案 0 :(得分:29)
您可以使用XML
动画执行此操作。
使用slide-up
和XML
制作set
动画alpha
,并将此XML
放入资源anim
文件夹。
<强> slide_up.xml 强>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="500"
android:fromYDelta="100%"
android:toYDelta="0" />
</set>
使用:强>
使用AnimationUtils.loadAnimation()
从XML
加载动画,并使用.startAnimation()
方法设置和开始动画。
以下是一个例子:
ImageView imageView = (ImageView) findViewById(R.id.imageView);
// slide-up animation
Animation slideUp = AnimationUtils.loadAnimation(this, R.anim.slide_up);
if (imageView.getVisibility() == View.INVISIBLE) {
imageView.setVisibility(View.VISIBLE);
imageView.startAnimation(slideUp);
}
希望这会有所帮助〜
答案 1 :(得分:6)
使用ConstraintLayout添加动画
只需在可视性上方的视图上方添加以下代码:
TransitionManager.beginDelayedTransition(constraintLayout)
注意:
- ConstraintLayout将仅在其直接子代上执行动画,因为它仅在您更改其处理的子代上的布局参数和约束时才知道。
- ConstraintLayout仅对与布局相关的更改设置动画。
有关更多信息,请参见此帖子https://robinhood.engineering/beautiful-animations-using-android-constraintlayout-eee5b72ecae3
答案 2 :(得分:1)
基于this回答:
使用此方法,我可以使用visibility
动画(如VISIBLE
动画)将视图的slideUp
设置为snackbar
:
int getScreenHeight() {
DisplayMetrics displaymetrics = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
return displaymetrics.heightPixels;
}
public void animateOnScreen(View view) {
final int screenHeight = getScreenHeight();
ObjectAnimator animator = ObjectAnimator.ofFloat(view, "y", screenHeight, (screenHeight * 0.8F));
animator.setInterpolator(new DecelerateInterpolator());
animator.start();
}
然后我可以像这样使用它:
if (myView.getVisibility() == View.INVISIBLE) {
myView.setVisibility(View.VISIBLE);
animateOnScreen(myView);
}
答案 3 :(得分:1)
只需将android:animateLayoutChanges="true"
添加到布局中。
当我将可见性设置为linear_container
时,linear_bottom
将从下到上进行动画处理,并取代“ linear_container”。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:animateLayoutChanges="true"
android:orientation="vertical"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:id="@+id/layoutTop"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</android.support.design.widget.AppBarLayout>
<LinearLayout
android:id="@+id/linear_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
</LinearLayout>
<LinearLayout
android:id="@+id/linear_bottom"
android:layout_width="match_parent"
android:layout_height="wrap_content"
</LinearLayout>
</LinearLayout>
答案 4 :(得分:0)
这是动画视图可见度的最佳方法:
private void viewGoneAnimator(View view) {
view.animate()
.alpha(0f)
.setDuration(animationDuration)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
view.setVisibility(View.GONE);
}
});
}
private void viewVisibleAnimator(View view) {
view.animate()
.alpha(1f)
.setDuration(animationDuration)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
view.setVisibility(VISIBLE);
}
});
}
然后在您想要使视图可见或消失并将想要的视图作为参数的任何位置调用此方法。