可視性を変更するたびにレイアウトを上下にプッシュする でLinearLayout
表示または非表示にしたい があります。Animation
いくつかのサンプルを見てきましたが、私のニーズに合うものはありませんでした。
アニメーション用に 2 つの xml ファイルを作成しましたが、LinearLayout
.
可視性を変更するたびにレイアウトを上下にプッシュする でLinearLayout
表示または非表示にしたい があります。Animation
いくつかのサンプルを見てきましたが、私のニーズに合うものはありませんでした。
アニメーション用に 2 つの xml ファイルを作成しましたが、LinearLayout
.
Android 3.0 (Honeycomb) で導入された新しいアニメーション API を使用すると、このようなアニメーションを非常に簡単に作成できます。
距離だけ下にスライドするView
:
view.animate().translationY(distance);
次のように、後でView
元の位置に戻すことができます。
view.animate().translationY(0);
複数のアニメーションを簡単に組み合わせることもできます。次のアニメーションは、高さだけ下にスライドView
し、同時にフェード インします。
// Prepare the View for the animation
view.setVisibility(View.VISIBLE);
view.setAlpha(0.0f);
// Start the animation
view.animate()
.translationY(view.getHeight())
.alpha(1.0f)
.setListener(null);
View
次に、バックをフェードアウトして、スライドさせて元の位置に戻すことができます。また、アニメーションが終了したら背面AnimatorListener
の可視性を に設定できるように を設定します。View
GONE
view.animate()
.translationY(0)
.alpha(0.0f)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
view.setVisibility(View.GONE);
}
});
の新しいサブクラスを作成しAnimation
、オーバーライドして. 次のようなことを考えてみましょう:LinearLayout
LinearLayout
setVisibility()
Animations
public class SimpleViewAnimator extends LinearLayout
{
private Animation inAnimation;
private Animation outAnimation;
public SimpleViewAnimator(Context context)
{
super(context);
}
public void setInAnimation(Animation inAnimation)
{
this.inAnimation = inAnimation;
}
public void setOutAnimation(Animation outAnimation)
{
this.outAnimation = outAnimation;
}
@Override
public void setVisibility(int visibility)
{
if (getVisibility() != visibility)
{
if (visibility == VISIBLE)
{
if (inAnimation != null) startAnimation(inAnimation);
}
else if ((visibility == INVISIBLE) || (visibility == GONE))
{
if (outAnimation != null) startAnimation(outAnimation);
}
}
super.setVisibility(visibility);
}
}
if (filter_section.getVisibility() == View.GONE) {
filter_section.animate()
.translationY(filter_section.getHeight()).alpha(1.0f)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationStart(Animator animation) {
super.onAnimationStart(animation);
filter_section.setVisibility(View.VISIBLE);
filter_section.setAlpha(0.0f);
}
});
} else {
filter_section.animate()
.translationY(0).alpha(0.0f)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
filter_section.setVisibility(View.GONE);
}
});
}
Androidアプリで次のコードを使用して、ビューまたはレイアウトを上下にスライドできます
boolean isClicked = false;
LinearLayout mLayoutTab = (LinearLayout) findViewById(R.id.linearlayout);
if(isClicked) {
isClicked = false;
mLayoutTab.animate()
.translationYBy(120)
.translationY(0)
.setDuration(getResources().getInteger(android.R.integer.config_mediumAnimTime));
} else {
isClicked = true;
mLayoutTab.animate()
.translationYBy(0)
.translationY(120)
.setDuration(getResources().getInteger(android.R.integer.config_mediumAnimTime));
}
これが私の解決策です。ビューへの参照を取得して、このメソッドを呼び出すだけです。
public static void animateViewFromBottomToTop(final View view){
view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
final int TRANSLATION_Y = view.getHeight();
view.setTranslationY(TRANSLATION_Y);
view.setVisibility(View.GONE);
view.animate()
.translationYBy(-TRANSLATION_Y)
.setDuration(500)
.setStartDelay(200)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationStart(final Animator animation) {
view.setVisibility(View.VISIBLE);
}
})
.start();
}
});
}
他に何もする必要はありません =)