簡體   English   中英

如何在android中的viewpager上從右到左獲取前一個片段

[英]How to get previous fragment from right to left on a viewpager in android

我用viewpagerfragment s創建了一個android應用程序。 我使用片段上的兩個按鈕前進和后退。 當我使用前進動作時,下一個片段從右到左。 這意味着此動作中的片段從右向左變化。

這是我的工作代碼,

MainActivity.java

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);
        }
    }
}

FirstFragment1.java

public class FirstFragment1 extends Fragment {

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

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


        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(1); // fourth fragment index is 3
                }
            }
        });

        return v;
    }

    public static FirstFragment1 newInstance(String text) {

        FirstFragment1 f = new FirstFragment1();
        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);
        }
    }

}

SecondFragment1.java

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) {
                    ( (MainActivity)getActivity()).setCurrentItem(0); // second fragment index is 1


                }

            }
        });

        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);
        }
    }

}

當我使用向后動作時,前一個片段從左到右。 但它應該是對的,我不知道該怎么做。

例如: -

當我單擊SecondFragment1中按鈕時, FirstFragment1應該在viewpager上從右到左。 但目前它來自左到右。

我怎么能實現這個目標? 我應該使用動畫嗎?

有什么想法嗎? 謝謝。

我建議你設置自定義轉換:

從右邊輸入:

<?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>

從左邊出口:

<?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>

從左邊進入:

<?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>

退出到右邊:

<?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>

然后你可以這樣設置過渡:

fragmentTransaction.setCustomAnimations(R.anim.from_right, R.anim.to_left);

希望這對你有所幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM