视图上的动画

时间:2012-08-09 09:07:30

标签: android android-animation

我有这样的观点

enter image description here

当用户点击任何按钮时,例如“奥迪”。

我想要的是用动画来显示上面的视图 enter image description here

我试过的是

我制作这样的布局(仅用于测试动画)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<LinearLayout
    android:id="@+id/hideLayout"
    android:layout_width="200dip"
    android:layout_height="wrap_content"
    android:layout_above="@+id/buttonLayout"
    android:background="#f0f"
    android:visibility="gone" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />
</LinearLayout>

<LinearLayout
    android:id="@+id/buttonLayout"
    android:layout_width="200dip"
    android:layout_height="wrap_content" >

    <Button
        android:id="@+id/btn_showView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Show View" />
</LinearLayout>

然后制作像

这样的动画

Animation showView=(Button)findViewById(R.id.btn_showView);

我的动画文件是

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

    <translate
        android:duration="300"
        android:fromYDelta="100%p"
        android:toYDelta="0" />

</set>

然后

showView=(Button)findViewById(R.id.btn_showView);

    showView.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            hideLayout.startAnimation(animShow);
            animShow.setAnimationListener(new AnimationListener() {

                @Override
                public void onAnimationStart(Animation animation) {
                    hideLayout.setVisibility(View.VISIBLE);

                }

                @Override
                public void onAnimationRepeat(Animation animation) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onAnimationEnd(Animation animation) {
                    hideLayout.setVisibility(View.VISIBLE);

                }
            });

        }
    });

它工作但不是我想要的。 text View来自底部。我希望我的图像显示我想要的东西。

提前致谢。

3 个答案:

答案 0 :(得分:1)

我找到了android&gt; = 3.0,Object Animator

的解决方案

我修正了视图的高度,因为在我的情况下这不是问题。

我制作了两个视图

1)顶视图宽度固定高度100dip(需要设置为动画)使其不可见

2)底部视图固定高度100dip(可见)

3)当我点击showView时,我会调用以下行

ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(topLayout,
            "y", 100, 0);
objectAnimator.addListener(new AnimatorListener() {

        @Override
        public void onAnimationStart(Animator animation) {
            // TODO Auto-generated method stub
            topLayout.setVisibility(View.VISIBLE);
            showView.bringToFront();
        }

        @Override
        public void onAnimationRepeat(Animator animation) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onAnimationEnd(Animator animation) {

        }

        @Override
        public void onAnimationCancel(Animator animation) {
            // TODO Auto-generated method stub

        }
    });
            objectAnimator.setDuration(500);
    objectAnimator.start();

可能会对某人有所帮助。 :)

答案 1 :(得分:0)

由于代码中的TextViewandroid:fromYDelta="100%p"来自底层。如果您希望textView从其原始位置向上移动,请使用以下代码:

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

       <translate
            android:duration="500"
            android:toYDelta="-66%"
            android:fromYDelta="0%" />

   </set> 

根据您的要求更改值-66%

从图像中我可以猜到,您希望 Marke: Audi的父级布局滑入和滑出。 为此,您必须为父布局(要放入和移出的布局的父级)设置动画,并且还必须修复两个视图的高度比。然后在动画结束时,只需将上部视图的可见性更改为 GONE

答案 2 :(得分:0)

尝试制作res - &gt;动画文件夹

slide_in_bottom.xml

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromYDelta="-100%p" android:toYDelta="0%p"
android:duration="@android:integer/config_longAnimTime" />

slide_in_top.xml

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromYDelta="100%p" android:toYDelta="0%p"
android:duration="@android:integer/config_longAnimTime"/>

slide_out_bottom.xml

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
   android:duration="@android:integer/config_longAnimTime"
   android:fromYDelta="0"
   android:toYDelta="100%p" />

slide_out_top.xml

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromYDelta="0" android:toYDelta="-100%p"
android:duration="@android:integer/config_longAnimTime" />

overridePendingTransition(R.anim.slide_in_top,R.anim.slide_out_top);