下拉动画

时间:2017-07-21 07:54:23

标签: android animation drop-down-menu

我正在尝试创建一个下拉动画。当用户点击指定的按钮@+id/btnToHideView时,我希望视图@+id/relativeLayoutControls下拉/向上滑动(VISIBLE / GONE)。

以下是布局文件的外观:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/btnToHideView"
        android:layout_width="25dp"
        android:layout_height="25dp"
        android:layout_marginLeft="5dp"
        android:layout_marginStart="5dp"
        android:layout_marginTop="5dp"
        android:background="@drawable/hide_btn"
        />

    <RelativeLayout
        android:id="@+id/relativeLayoutControls"
        android:layout_width="60dp"
        android:layout_height="fill_parent"
        android:layout_marginRight="6dp"
        android:layout_marginEnd="6dp"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true">

        //I have buttons in this layoout

    </RelativeLayout>

</LinearLayout>

这就是我的尝试:

我在res/anim

中创建了2个动画文件

slide_down.xml

    <?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <translate
        android:duration="1000"
        android:fromYDelta="0"
        android:toYDelta="100%" />
</set>

slide_up.xml

    <?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <translate
        android:duration="1000"
        android:fromYDelta="100%"
        android:toYDelta="0" />
</set>

然后我尝试通过以下方式处理:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    controlsHide = (RelativeLayout) findViewById(R.id.relativeLayoutControls);

    final Animation slide_down = AnimationUtils.loadAnimation(getApplicationContext(),
            R.anim.slide_down);

    final Animation slide_up = AnimationUtils.loadAnimation(getApplicationContext(),
            R.anim.slide_up);

    btnToHideView = (Button) findViewById(R.id.btnToHideView);

    btnToHideView.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View view) {

            //I just did slide_up to test if its working
            controlsHide.startAnimation(slide_up);

        }
    });

我跟着this post,但是当我按下按钮时没有任何反应。在logcat中,它只打印ACTION_DOWN

2 个答案:

答案 0 :(得分:2)

请试试这个:

<强>效果基本show:

Animation slideUp = AnimationUtils.loadAnimation(activity, R.anim.slide_up);
view.startAnimation(slideUp);

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>

view.animate().translationY(0);

<强>下拉:

view.animate().translationY(view.getHeight());

答案 1 :(得分:0)

这是我的源代码实现(refer here),您可以使用它们

// Initially hide/show the content view.
redLayout = mView.findViewById(R.id.history_operation);
//Load animation
slide_down = AnimationUtils.loadAnimation(getActivity(), R.anim.slide_down);
slide_up = AnimationUtils.loadAnimation(getActivity(), R.anim.slide_up);
  • 创建用于向下和向上滑动的动画 xml。如果您愿意,您可以随意设置动画的持续时间。这里我设置了 500 毫:
<translate
    android:duration="500"
    android:fromYDelta="-100%"
    android:toYDelta="0" />

<translate
    android:duration="500"
    android:fromYDelta="0"
    android:toYDelta="-100%" />
  • 在源代码中实现动画:

      slide_up.setAnimationListener(new Animation.AnimationListener() {
          @Override
          public void onAnimationStart(Animation animation) {
    
          }
    
          @Override
          public void onAnimationEnd(Animation animation) {
              //When the animation was finished, set gone to the view
              redLayout.setVisibility(View.GONE);
          }
    
          @Override
          public void onAnimationRepeat(Animation animation) {
    
          }
      });
      slide_down.setAnimationListener(new Animation.AnimationListener() {
          @Override
          public void onAnimationStart(Animation animation) {
              //When the animation start, set visible to the view
              redLayout.setVisibility(View.VISIBLE);
          }
    
          @Override
          public void onAnimationEnd(Animation animation) {
          }
    
          @Override
          public void onAnimationRepeat(Animation animation) {
    
          }
      });
    

最后调用toggle函数来启动定义好的动画

private void toggle1() {
    // Start animation
    if(isFadeOut){
        redLayout.startAnimation(slide_down);
    }else {
        redLayout.startAnimation(slide_up);
    }
    isFadeOut = !isFadeOut;
}
相关问题