Animate visibility of a view from gone to visible with animation

前端 未结 5 735
傲寒
傲寒 2021-02-01 17:53

I have a view that is invisible by default(Just for the first time).

Now I need to switch the visibility to VISIBLE with this animation

相关标签:
5条回答
  • 2021-02-01 18:23

    Just You need to add android:animateLayoutChanges="true" to your layout. When I set visibility gone to linear_container, linear_bottom will animate from bottom to up and take place of "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>
    
    0 讨论(0)
  • 2021-02-01 18:25

    This is the best way to animate views visibility :

    private void viewGoneAnimator(final View view) {
    
        view.animate()
                .alpha(0f)
                .setDuration(500)
                .setListener(new AnimatorListenerAdapter() {
                    @Override
                    public void onAnimationEnd(Animator animation) {
                        view.setVisibility(View.GONE);
                    }
                });
    
    }
    
    private void viewVisibleAnimator(final View view) {
    
        view.animate()
                .alpha(1f)
                .setDuration(500)
                .setListener(new AnimatorListenerAdapter() {
                    @Override
                    public void onAnimationEnd(Animator animation) {
                        view.setVisibility(VISIBLE);
                    }
                });
    
    }
    

    And then call this method wherever you wanted to make a view visible or gone and give the intended view to methods as the parameter.

    0 讨论(0)
  • 2021-02-01 18:26

    Based on this answer:

    with this methods, I can set the visibility of my view to VISIBLE with a slideUp animation(Like snackbar animation):

    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();
    }
    

    Then I can use it like this:

    if (myView.getVisibility() == View.INVISIBLE) {
        myView.setVisibility(View.VISIBLE);
        animateOnScreen(myView);
    }
    
    0 讨论(0)
  • 2021-02-01 18:30

    You can do this using XML animation.

    Create a slide-up animation XML using set and alpha and put this XML into your resource anim folder.

    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>
    

    USE:

    Use AnimationUtils.loadAnimation() to load animation from XML and set and start animation using .startAnimation() method.

    Here is an example:

    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);
    }
    

    Hope this will help~

    0 讨论(0)
  • 2021-02-01 18:33

    Add animations using ConstraintLayout

    Just add below code above the views whose visibility is updated:

    TransitionManager.beginDelayedTransition(constraintLayout)
    

    Note:

    • ConstraintLayout will only perform animation on its direct children since it only knows when you change layout parameters and constraints on the children that it handles.
    • ConstraintLayout only animates layout related changes.

    For more see this post https://robinhood.engineering/beautiful-animations-using-android-constraintlayout-eee5b72ecae3

    0 讨论(0)
提交回复
热议问题