所以我已经研究了如何使用this thread设置动画淡化和下拉/滑动动画的动画效果,但它并没有像预期的那样完全正常工作。首先,这是我用于动画的代码:
public void toggleAdvancedVisibility(View text) { //text is a clickable textview thats acts as a toggle
int dur = 1000;
final View advView = findViewById(R.id.enc_advanced);
if(advView.getVisibility() == View.GONE && animationDone) {
advView.setVisibility(View.VISIBLE);
advView.setAlpha(0.0f);
//animate fade + drop down
advView.animate()
.setDuration(dur)
.translationY(advView.getHeight())
.alpha(1.0f)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
animationDone = true;
}
});
animationDone=false;
}
else if(advView.getVisibility() == View.VISIBLE && animationDone) {
//animate fade + slide up
advView.animate()
.setDuration(dur)
.translationY(0)
.alpha(0.0f)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
advView.setVisibility(View.GONE);
animationDone = true;
}
});
animationDone = false;
}
}
正如我所说,虽然有动画,但它没有像预期的那样接近任何行为。
问题#1
视图几乎被推出了可见性。我相信这是由于行.translationY(advView.getHeight())
,好像我在动画之前将视图的位置设置为advView.setTranslationY(-advView.getHeight())
,然后动画.translationY(0)
它会转到应该的位置。< / p>
这个问题的一个明显问题是,当视图是动画时,视图在完成之前会与视图上方的视图“碰撞”。那么如何在不进入上方视图的情况下正确地向下/向上滑动呢?
问题#2 动画并没有完全“推”视图,这正是我的预期。我的意思是,动画视图下面也有一个视图。我希望下面的视图能够用动画视图向下推。虽然我还没有尝试过,但我认为这可以通过将相同的动画设置到它下面的视图来模拟,但还有另一种方法吗?
我对这个动画的东西很新,并且像这样操纵视图,所以任何帮助都会受到赞赏。
答案 0 :(得分:0)
我给你做了一个简短的例子,我看到它推动了视图的其余部分。 XML:
<LinearLayout 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"
tools:context="com.example.teststuff.MainActivity"
android:orientation="vertical">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/b1"
android:text="show"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tv1"
android:text="Hello World!"
android:visibility="gone"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!!!!"/>
这是.java:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv1 = (TextView) findViewById(R.id.tv1);
tv2 = (TextView) findViewById(R.id.tv2);
b1 = (Button) findViewById(R.id.b1);
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (tv1.isShown()){
tv1.startAnimation(slideInAnimation(view));
tv1.setVisibility(View.GONE);
}
else {
tv1.startAnimation(slideOutAnimation(view));
tv1.setVisibility(View.VISIBLE);
}
}
});
}
private TranslateAnimation slideOutAnimation(View view){
TranslateAnimation animate = new TranslateAnimation(0,0,-view.getHeight(),0);
animate.setDuration(500);
animate.setFillAfter(false);
return animate;
}
private TranslateAnimation slideInAnimation(View view){
TranslateAnimation animate = new TranslateAnimation(0,0,0,-view.getHeight());
animate.setDuration(500);
animate.setFillAfter(true);
return animate;
}
它适用于我。