我有这样的观点
当用户点击任何按钮时,例如“奥迪”。
我想要的是用动画来显示上面的视图
我试过的是
我制作这样的布局(仅用于测试动画)
<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
来自底部。我希望我的图像显示我想要的东西。
提前致谢。
答案 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)
由于代码中的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
。
答案 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);