2017-02-20 6 views
0

私は画面の下からビューをスライドさせて、もう少しすべてが正しく収まるように別のビューを折りたたみようとしています。スムースanimateLayoutChangesアニメーション

私は属性animateLayoutChangesと2つの単純なxmlアニメーションslid_up.xmlslid_down.xmlでそれを行うことができました。

私の問題は、animateLayoutChangesという属性からViewPagerになるアニメーションがスムーズでないことです。

これを修正する方法はありますか?

slid_up.xml

<translate 
    android:duration="1000" 
    android:fromYDelta="100%" 
    android:toYDelta="0" /> 
</set> 

slid_down.xml

<translate 
    android:duration="1000" 
    android:fromYDelta="0" 
    android:toYDelta="100%" /> 
</set> 

P.S.私はHeightアニメーターとしてカスタムアニメーターを作成しようとしましたが、ビューの元の高さが乱れてしまいます。

HeightResizeAnimation

public class HeightResizeAnimation extends Animation { 
    private View mView; 
    private float mToHeight; 
    private float mFromHeight; 
    private int duration = 300; 

    public HeightResizeAnimation(View v, float offset) { 
     mView = v; 
     mToHeight = v.getHeight() + offset; 
     mFromHeight = v.getHeight(); 
     setDuration(duration); 
    } 

    @Override 
    protected void applyTransformation(float interpolatedTime, Transformation t) { 
     float newHeight = (mToHeight - mFromHeight) * interpolatedTime + mFromHeight; 
     mView.getLayoutParams().height = (int) newHeight; 
     mView.requestLayout(); 
    } 
} 

アニメーション後の高さは、もはやアニメーションの前にいたmatch_parentようになることはありません。

更新 ここでは今 enter image description here

あなたは下へファブアニメーションはFabはそれはのように思える子

+0

アニメートしたいもののビデオを投稿できますか?それに応じて更新しますか?アニメーション属性を使用する場合、requestLayout()は必要ありません。 –

+0

requestLayoutはまったく問題ではありません。HeightResizeAnimationの問題は、ビューをポートレートからランドスケープに変更すると、アニメーションの前にある高さがmatch_parentになりませんでした。 – gmetax

+0

@AnuragSingh、ビデオとGIF私が – gmetax

答えて

0

すべてのソリューションは、gif形式で見ることができるようandroid:clipChildren="false"

を使用するようにした後、それがダウンして元の位置に起こっている間に、FABはトリミングなっています。私がFAB viewPagerの親にandroid:clipChildren="false"を使用した後、FABはもう切り取られていません。

+1

あなたがどこでアンドロイドを使用したかを示すコード全体を投稿してください:clipChildren = "false" –

+0

レイアウトのすべてのxmlを置くと読みにくいです。 – gmetax

1

であることをviewpagerのためにもスムーズされていないことを確認することができ起こるアニメーションですスナックバーを表示したいだけでなく、FABをそれに沿って移動させたいのですか?あなたのxmlレイアウトでhttp://www.androidhive.info/2015/09/android-material-design-snackbar-example/

+0

が好きなアニメーションを示しているので、「好き!」はスナックバーなので、トーストのようなものです。あなたの答えはありがとうございますが、私が望むものではありません。 – gmetax

+0

こんにちは@gmetax、更新されたアニメーションを見ても、私はまだスナックバーだと言いますが、内部のカスタムビュー(https://material.io/guidelines/components/snackbars-toasts.html#)でこれを確認できますout:http://stackoverflow.com/questions/32453946/how-to-customize-snackbars-layoutスナックバーを使用すると、他のビューの上に表示されるアニメーションの滑らかさに役立つでしょう。下のビューの高さを変更します。 –

+0

ですが、スナックバーは時間制限があります。 :/ – gmetax

1

は、ビューに次のように追加します:

android:visibility="gone" 
android:alpha="0" 
android:id="@+id/text_view_liked" 

私はTextViewするビューをasummingていますので、あなたがAndroidのサポートライブラリからスナックバーとCoordinatorLayoutの組み合わせを使用することができます行うに 。 ImageViewのクリックで は、以下でtext_view_likedをアニメーション気に入っ:

final TextView textViewLiked = (TextView) findViewById(R.id.text_view_get_liked); 
    final FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 

    PropertyValuesHolder pvhYTextViewLiked = PropertyValuesHolder 
     .ofFloat(View.Y, 
      textViewLiked.getBottom(), 
      (textViewLiked.getBottom() - textViewLiked.getHeight())); 

    PropertyValuesHolder pvhAlphaTextViewLiked = PropertyValuesHolder 
     .ofFloat(View.ALPHA, 0f, 1f); 

    ObjectAnimator objectAnimator = ObjectAnimator.ofPropertyValuesHolder(textViewLiked, 
     pvhYTextViewLiked, 
     pvhAlphaTextViewLiked); 

    ObjectAnimator objectAnimatorFab = ObjectAnimator.ofFloat(fab, View.Y, fab.getY(), 
     fab.getY() - textViewLiked.getHeight()); 

    AnimatorSet animatorSet = new AnimatorSet(); 
    animatorSet.play(objectAnimator).with(objectAnimatorFab); 
    animatorSet.addListener(new AnimatorListenerAdapter() { 

     @Override 
     public void onAnimationStart(Animator animation) { 
     super.onAnimationStart(animation); 
     textViewLiked.setVisibility(View.VISIBLE); 
     } 

     @Override 
     public void onAnimationEnd(Animator animation) { 
     super.onAnimationEnd(animation); 

     new Handler().postDelayed(new Runnable() { 
      @Override 
      public void run() { 

      PropertyValuesHolder pvhYTextViewLiked = PropertyValuesHolder 
       .ofFloat(View.Y, 
        textViewLiked.getTop(), 
        (textViewLiked.getTop() + textViewLiked.getHeight())); 

      PropertyValuesHolder pvhAlphaTextViewLiked = PropertyValuesHolder 
       .ofFloat(View.ALPHA, 1f, 0f); 

      ObjectAnimator objectAnimator = ObjectAnimator.ofPropertyValuesHolder(textViewLiked, 
       pvhYTextViewLiked, 
       pvhAlphaTextViewLiked); 

      ObjectAnimator objectAnimatorFab = ObjectAnimator.ofFloat(fab, View.Y, fab.getY(), 
       fab.getY() + textViewLiked.getHeight()); 

      AnimatorSet animatorSet = new AnimatorSet(); 
      animatorSet.play(objectAnimator).with(objectAnimatorFab); 
      animatorSet.addListener(new AnimatorListenerAdapter() { 
       @Override 
       public void onAnimationEnd(Animator animation) { 
       super.onAnimationEnd(animation); 
       textViewLiked.setVisibility(View.GONE); 
       } 
      }); 
      animatorSet.start(); 
      } 
     }, 1000); 

     } 
    }); 

あなたはそれに応じて

new Handler継続時間を調整することができますだけで進行状況インジケータのプロセスが終了される自動化するために作成されます。あなたは進行状況インジケータの終了を呼び出すことができます。

+0

あなたはその質問を理解していません。私は「Liked!」とまったく同じように作成したくはありませんが、それはビデオに表示されています。私が「好き!」を作成したければ、私は@Piotr Zawadzkiの答えに行きます。しかし、ファブがより滑らかなアニメーションを持っているかどうかを確認するためにあなたの答えを試しましたが、それは持っていませんでした。 – gmetax

+0

スナックバーの期間は限られています。その中に進捗インジケータを表示する必要があります。私のビューはビューグループにすることができます。しかし、スナックバーはできません。また、Snacbarの幅はタブレットの画面全体の幅をカバーしません。また、私が逃していることを教えてください。ビューがスムーズに移行しながら上下にスライドするので、ファブを上下に動かしたいですか? –

+0

あなたの例は、「好きな!」ビューに基づいていました。私はスナックバーの限界を知っていて、私が望むように私はそれを使うことができないことを知っています。私の質問でgifが表示されたら、ファブがスムーズに動かず、ビューページ(白い背景)もスムーズに動かないことがわかります – gmetax

関連する問題