2

我有这样的看法

在此处输入图像描述

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

我想要的是在上面显示一个带有动画的视图 在此处输入图像描述

我试过的是

我做了这样的布局(只是为了测试动画)

<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从底部来的。我希望我的图像显示我想要的。

提前致谢。

4

3 回答 3

1

我找到了 android >=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();

可能会帮助一些人。:)

于 2012-08-15T03:43:03.897 回答
0

由于在您的代码中TextView,因此来自底部。android: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.

于 2012-08-09T09:22:23.027 回答
0

尝试制作 res -> anim 文件夹

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

于 2012-08-09T09:31:54.123 回答