如何使视图可见并带有一些动画?

时间:2019-12-05 06:27:25

标签: android animation view

我有一个相对的布局,当网络连接不存在时,我需要显示该视图,而当连接恢复时,我需要显示该视图,我需要像youtube一样进行操作。 YT会在底部以绿色显示弹出窗口,有时视图会向下滑动。预先感谢,我是新来的。我在StackOverflow中找不到任何等效答案

<RelativeLayout

    android:id="@+id/dashboard_xmpp_connection_status_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:animateLayoutChanges="true"
    android:visibility="gone">

    <TextView
        android:id="@+id/dashboard_xmpp_connection_text"
        android:layout_width="match_parent"
        android:layout_height="33dp"
        android:animateLayoutChanges="true"
        style="@style/Connection_status"
        android:text="@string/msg_no_internet" />

</RelativeLayout>

4 个答案:

答案 0 :(得分:0)

    binding.filter.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (binding.filterExams.getVisibility() == View.VISIBLE) {
                Animation slide_down = AnimationUtils.loadAnimation(binding.filterExams.getRootView().getContext(),
                        R.anim.slide_up_filter);
                slide_down.setAnimationListener(new Animation.AnimationListener() {
                    @Override
                    public void onAnimationStart(Animation animation) {

                    }

                    @Override
                    public void onAnimationEnd(Animation animation) {
                        binding.filterExams.setVisibility(View.GONE);
                    }

                    @Override
                    public void onAnimationRepeat(Animation animation) {

                    }
                });
                binding.filterExams.startAnimation(slide_down);

            } else {
                binding.filterExams.setVisibility(View.VISIBLE);
                Animation slide_down = AnimationUtils.loadAnimation(binding.filterExams.getRootView().getContext(),
                        R.anim.slide_down);

                binding.filterExams.startAnimation(slide_down);

            }
        }
    });

您可以在xml文件中添加动画文件,例如

在这里我使用了上下滑动动画

slide_up_filter.xml

   <?xml version="1.0" encoding="utf-8"?>
  <set xmlns:android="http://schemas.android.com/apk/res/android" 
   android:interpolator="@android:anim/linear_interpolator">
    <scale
    android:duration="250"
    android:fromXScale="1.0"
    android:fromYScale="1.0"
    android:toXScale="1.0"
    android:toYScale="0.0" />
  </set>

slide_down.xml

 <?xml version="1.0" encoding="utf-8"?>
 <set xmlns:android="http://schemas.android.com/apk/res/android" 
android:interpolator="@android:anim/linear_interpolator">
<scale
    android:duration="250"
    android:fromXScale="1.0"
    android:fromYScale="0.0"
    android:toXScale="1.0"
    android:toYScale="1.0" />
 </set>

像这样,有一些动画

fade_in.xml

<?xml version="1.0" encoding="utf-8"?>
 <set xmlns:android="http://schemas.android.com/apk/res/android" 
android:interpolator="@android:anim/linear_interpolator">
 <alpha
    android:duration="2000"
    android:fromAlpha="0.1"
    android:toAlpha="1.0">
 </alpha>
 </set>

 fade_out.xml

 <?xml version="1.0" encoding="utf-8"?>
 <alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500"
android:fromAlpha="1.0"
android:interpolator="@android:anim/accelerate_interpolator"
android:toAlpha="0.0" />

答案 1 :(得分:0)

您可以使用 Support(androidx)软件包中提供的Transition API。

要使用此方法,您必须调用TransitionManager.geginDelayedTransition方法,然后根据需要将视图的可见性更改为visible和god。

  private void slideView(boolean show) {
        Transition transition = new Slide(Gravity.BOTTOM);
        transition.setDuration(600);
        transition.addTarget(R.id.id_of_relative_layout);

        TransitionManager.beginDelayedTransition(id_of_relative_layout, transition);
        if(show){
           relativeView.setVisibility(View.VISIBLE);
        }
        else{
           relativeView.setVisibility(View.GONE);
        }
   }

在要执行的操作上调用slideView()函数。

有关更多详细信息,请遵循此- Show and hide a View with a slide up/down animation

答案 2 :(得分:0)

因此您可以使用LottieAnimationView

您的应用gradle文件

implementation 'com.airbnb.android:lottie:3.0.7'//2.7.0

访问此网站并下载免费的lottie json文件

please click

   step 1:put this download lottie json file to android studio assets folder

您的布局文件

  <FrameLayout

    android:id="@+id/dashboard_xmpp_connection_status_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:animateLayoutChanges="true"
    android:visibility="gone">

    <com.airbnb.lottie.LottieAnimationView
         android:id="@+id/showAnimations"
         android:layout_gravity="center"
         android:layout_height="66dp"
         android:layout_width="56dp"
         android:visibility="gone"
         app:lottie_autoPlay="true"
         app:lottie_loop="false"
        app:lottie_fileName="animsix.json" <!--please put your download  json file -->
                />        


</FrameLayout>



 MainActivity


LottieAnimationView showLottie=findViewById(R.id.showAnimations);   

 if("network is available"){
    showLottie.setVisibility(View.GONE);
   }else{
    showLottie.setVisibility(View.VISIBLE);
    }

答案 3 :(得分:0)

您可以像这样简单地在文本视图中使用淡入淡出效果。

void fadeIn() {
    textView.setVisibility(View.VISIBLE);
    textView.setAlpha(0);
    int duration = getResources().getInteger(android.R.integer.config_mediumAnimTime);
    textView.animate().alpha(1).setDuration(duration);
}

textView.animate()返回ViewPropertyAnimator,其中包含各种自定义动画的方法。

Visit this for more details