2013-06-05 11 views
8

現在ViewPagerでページを切り替える間にカスタムアニメーションを作成しています。左にスライドすると、Viewが左に移動し、下から新しいViewが前面に表示されます。私は左に移動ビューは、(私が処分という)folowing画像に似縮小をしたいと思います:第二と第三の画像にChallange:ViewPagerのカスタムアニメーション。選択した要素の高さを変更する(折りたたみを表示する)

enter image description hereenter image description hereenter image description here

私は新しいビューを想像しませんでした正面に来るが、私はそれが必要ではないと思う。どのようにしてコードを修正することができますか?

TableLayout、RelativeLayout、FrameLayoutの高さを変更し、両方のTextViewの高さを維持したいと思います。また、私は全体のビューのX位置を変更する必要があります。

私はあなたの創造的な答え(コード)を楽しみにしています。以下は私のアニメーション用のコードを添付します。

import android.view.View; 
import android.widget.RelativeLayout; 
import android.annotation.SuppressLint; 
import android.support.v4.view.ViewPager.PageTransformer; 

public class DepthPageTransformer implements PageTransformer { 
    private static float MIN_SCALE = 0.75f; 

    @SuppressLint("NewApi") 
    public void transformPage(View view, float position) { 
     int pageWidth = view.getWidth(); 

     if (position < -1) { // [-Infinity,-1) 
      // This page is way off-screen to the left. 
      view.setAlpha(0); 

     } else if (position <= 0) { // [-1,0] 
      // Use the default slide transition when moving to the left page 
      view.setTranslationX(0); 
      view.setScaleX(1); 
      view.setScaleY(1); 
      //float scaleFactor = (1 - Math.abs(position)); 

      //WHAT TO PUT HERE TO ARCHIVE MY GOAL?? 

      //This is how I can get particular layouts: 
      // RelativeLayout relativeLayout = (RelativeLayout) view.findViewById(R.id.fragment_object_canvas_RelativeLayout1); 
      //relativeLayout.setScaleX(scaleFactor); 
      //relativeLayout.setScaleY(scaleFactor); 

     } else if (position <= 1) { // (0,1] 
      // Fade the page out. 
      view.setAlpha(1 - position); 

      // Counteract the default slide transition 
      view.setTranslationX(pageWidth * -position); 
      //view.setRotation(1 - (position*360)); 

      // Scale the page down (between MIN_SCALE and 1) 
      float scaleFactor = MIN_SCALE 
        + (1 - MIN_SCALE) * (1 - Math.abs(position)); 
      view.setScaleX(scaleFactor); 
      view.setScaleY(scaleFactor); 

     } else { // (1,+Infinity] 
      // This page is way off-screen to the right. 
      view.setAlpha(0); 
     } 
    } 
} 

UPDATE:

私は全体のビューの高さを操作することができます(今のところ私はこれを行うことができます)次のコードで:

LinearLayout relativeLayout = (LinearLayout) view.findViewById(R.id.fragment_object_canvas_linearLayout1); 
      relativeLayout.setLayoutParams(new FrameLayout.LayoutParams(relativeLayout.getWidth(), NEW_HEIGHT_HERE))); 

しかし、私がすべきかわかりません私はNEW_HEIGHT_HERE変数を使って、それがコアに働くようにします...

答えて

5

ポジションフロート変数で作業しようとします。 レイアウトの高さを取得し、...:

relativeLayout.setLayoutParams(....,position*height+height) 
+0

を呼び出すことによって、あなたのアニメーションを選択することができます。私は私が変更する必要があると思う:topMargin、メインコンテナのbottomMargin、そしてtextViews間のコンテナの高さ。誰かがそれを解決できるなら、私はコードを待っている。 – Marek

1

あなたは、元のコードを掲示する人々にかなりしつこいようですが、なぜ車輪の再発明?このライブラリーには、ViewPagerの素晴らしいアニメーションがたくさんあります。あなたが要求しているようなものもあります。

https://github.com/jfeinstein10/JazzyViewPager

JazzyViewPager - カスタムスワイプアニメーションの素晴らしいセットを追加しますViewPagerを使用して簡単にできます。あなたのViewPagersをJazzyViewPagesに変更すれば、あなたは行こうとしています!


public enum TransitionEffect { 
     Standard, 
     Tablet, 
     CubeIn, 
     CubeOut, 
     Flip, 
     Stack, 
     ZoomIn, 
     ZoomOut, 
     RotateUp, 
     RotateDown, 
     Accordion 
    } 

あなたは、私はそれを動作させることができない

private JazzyViewPager mJazzy; 
/* ... */ 
mJazzy.setTransitionEffect(TransitionEffect.*); 
+0

私は以前このライブラリを見てきましたが、もう一度私は達成したいアニメーションがないと言わなければなりません。私は両方のtextViewsを垂直アニメーションの影響を受けないままにしておきたいと思います。 – Marek