0

ViewPagerFragmentsを使用してAndroidアプリを作成します。ここで私はFragmentTransactionを使用して、ボタンアクションを使用して互いにフラグメントをスライドさせます。また、私は断片間でシフトする方法を使用します。 MainActivityクラスにあります。Androidフラグメントトランザクションアニメーションが表示ページャで機能していません

これは、

import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.app.FragmentTransaction; 
import android.support.v4.view.ViewPager; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.MotionEvent; 
import android.view.View; 

public class MainActivity extends FragmentActivity { 

    private ViewPager viewPager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     viewPager=(ViewPager)findViewById(R.id.viewPager); 
     viewPager.setAdapter(new MyPagerAdapter2(getSupportFragmentManager())); 
     viewPager.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       if (viewPager.getCurrentItem() == 0) { 
        return true; 
       } 

       if (viewPager.getCurrentItem() == 1) { 
        return true; 
       } 

       if (viewPager.getCurrentItem() == 2) { 
        return true; 
       } 

       if (viewPager.getCurrentItem() == 3) { 
        return true; 
       } 

       if (viewPager.getCurrentItem() == 4) { 
        return true; 
       } 

       return false; 
      } 
     }); 



    } 

    private class MyPagerAdapter2 extends FragmentPagerAdapter { 

     public MyPagerAdapter2(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public Fragment getItem(int pos) { 
      switch(pos) { 

       case 0: return FirstFragment1.newInstance("FirstFragment_1"); 
       case 1: return SecondFragment1.newInstance("SecondFragment_1"); 
       case 2: return ThirdFragment1.newInstance("ThirdFragment_1"); 
       case 3: return FourthFragment1.newInstance("FourthFragment_1"); 
       case 4: return FifthFragment1.newInstance("FifthFragment_1"); 
       default: return FirstFragment1.newInstance("DefaultFragment_1"); 
      } 
     } 

     @Override 
     public int getCount() { 
      return 5; 
     } 
    } 

    public void setCurrentItem(int which) { 
     if(viewPager != null && which >= 0 && which <= 4) { 
      viewPager.setCurrentItem(which); 
     } 
    } 
} 

MainActivityクラスであり、ここで私の目的のためのサンプルコードで、

import android.app.Activity; 
import android.content.pm.ActivityInfo; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentTransaction; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.TextView; 

/** 
* Created by user on 5/11/2016. 
*/ 
public class SecondFragment1 extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.second_frag_1, container, false); 

     TextView tv = (TextView) v.findViewById(R.id.tvFragSecond); 
     tv.setText(getArguments().getString("msg")); 


     Button button=(Button)v.findViewById(R.id.printButton); 
     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       if(getActivity() != null) { 

        FragmentManager fragmentManager=getActivity().getSupportFragmentManager(); 
        FragmentTransaction transaction = fragmentManager.beginTransaction(); 
        transaction.setCustomAnimations(R.anim.from_right, R.anim.to_left); 
        FirstFragment1 firstFragment1=FirstFragment1.newInstance("Fragment Main"); 
        transaction.replace(R.id.firstFragment, firstFragment1, "first_fragment"); 
        transaction.commit(); 

        ((MainActivity)getActivity()).setCurrentItem(0); 
       } 

      } 
     }); 

     Button button1=(Button)v.findViewById(R.id.nextButton); 
     button1.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (getActivity() != null) { 
        ((MainActivity)getActivity()).setCurrentItem(2); // fourth fragment index is 3 
       } 
      } 
     }); 

     return v; 
    } 

    public static SecondFragment1 newInstance(String text) { 

     SecondFragment1 f = new SecondFragment1(); 
     Bundle b = new Bundle(); 
     b.putString("msg", text); 

     f.setArguments(b); 

     return f; 
    } 

    @Override 
    public void setUserVisibleHint(boolean isVisibleToUser) { 
     super.setUserVisibleHint(isVisibleToUser); 
     if(isVisibleToUser) { 
      Activity a = getActivity(); 
      if(a != null) a.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED); 
     } 
    } 

} 

は、これらは私のアニメーションファイル、

from_left.xml

です
<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shareInterpolator="false"> 
    <translate 
     android:fromXDelta="-100%" android:toXDelta="0%" 
     android:fromYDelta="0%" android:toYDelta="0%" 
     android:duration="500"/> 
</set> 

from_right.xml

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shareInterpolator="false"> 
    <translate 
     android:fromXDelta="100%" android:toXDelta="0%" 
     android:fromYDelta="0%" android:toYDelta="0%" 
     android:duration="500" /> 
</set> 

to_left.xml

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shareInterpolator="false"> 
    <translate 
     android:fromXDelta="0%" android:toXDelta="-100%" 
     android:fromYDelta="0%" android:toYDelta="0%" 
     android:duration="500"/> 
</set> 

to_right.xml

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shareInterpolator="false"> 
    <translate 
     android:fromXDelta="0%" android:toXDelta="100%" 
     android:fromYDelta="0%" android:toYDelta="0%" 
     android:duration="500" /> 
</set> 

問題: - 使用このアニメーションファイルは、間にシフトします断片は偽ではないrking。私はSecondFragment1ボタンをクリックすると

は、フラグメント番目の0は、右から左方向にViewPagerにロードする必要があります。しかし、そのプロセスはここでは違います。まず、0番目のフラグメントは左から右の方向にViewPagerにロードされ、次に右から左の方向にロードされます。

私の目的は、開始時に右から左の方向にViewPagerまでのロード0番目のフラグメントです。

これを正しい表示でどのように取得できますか?アイデアはありますか?

ありがとうございます。

+1

をオーバーライドして行うに投稿しますビューページのページを変更するには?そして、フラグメントを変更するためにビューページをスワイプする必要がありますか? – MichaelStoddart

答えて

1

ボタンを押したときにフラグメントを置き換えたいという質問からわかりますか?だから私はビューのページャを削除し、それをFrameLayoutで置き換えることから始める。クラスの最上部に

宣言でframeLayout:私が使用私の場合は

FrameLayout fl_frag_container = (FrameLayout) findViewById(R.id.fl_frag_container); 

は、その後、あなたが表示されているフラグメントを変更するのフラグメントから呼び出すことができMainActivityでメソッドを作成

public void setSecondaryFrag(int page, String name, String url, String id) { 
    transaction = fragMan.beginTransaction(); 
    switch (page) { 
     case Constants.VIEW_EVENTS: 
      transaction.replace(fl_frag_container.getId(), new ViewEventsFragment()); 
      break; 
     case Constants.VIEW_ARTIST_PROFILE: 
      transaction.replace(fl_frag_container.getId(), BrandArtistProfileFragment.newInstance(Constants.ARTISTS, name, url, id)); 
      break; 
     case Constants.VIEW_BRAND_PROFILE: 
      transaction.replace(fl_frag_container.getId(), BrandArtistProfileFragment.newInstance(Constants.BRANDS,name, url, id)); 
      break; 
     case Constants.VIEW_TICKETS: 
      transaction.replace(fl_frag_container.getId(), new ViewTicketFragment()); 
      break; 

    } 
    transaction.addToBackStack(null); 
    transaction.setCustomAnimations(R.anim.from_right, R.anim.to_left); 
    transaction.commitAllowingStateLoss(); 
} 

そしてフラグメントに私が呼ぶだろう

((MainActivity) getActivity).setSecondaryFrag(page, "", "", ""); 

これは、フラグメントを置き換えるために、フレームのレイアウトを使用して、ニーズ

に合わせて変更することができますが

は、あなたがそのviewpagerを必要とする場合、これは

+0

私はViewPagerを使用する必要があります。それは、アプリケーションの要件です。助けてくれてありがとう 。あなたは別のアイデアを持っていますか? – Barrier

+0

ユーザーはフラグメント間でスワイプする必要がありますか? – MichaelStoddart

+0

場合によっては、この権限が必要です。 – Barrier

1

を役に立てば幸いviewpager用のアダプタを使用する必要がなくなりますこれを見て、その後に使用されることはSOあなたがフラグメントトランザクションを使用しているviewpagerアニメーション

Android ViewPager With different Animation like zoom in,fade etc

+0

私はこれまでに試しました。しかし、それは私を助けなかった – Barrier

関連する問題