Android 在ViewPager中输入动画

Android 在ViewPager中输入动画,android,android-fragments,android-viewpager,android-animation,Android,Android Fragments,Android Viewpager,Android Animation,我有以下视图:显示3个片段的ViewPager。用户可以水平滚动查看ViewPager中的其他片段。 我需要创建一个动画,当创建活动并填充ViewPager时,显示从屏幕右侧进入的片段。 这可能吗?谢谢 XML: 适配器: public class MyFragmentStatePagerAdapter extends FragmentStatePagerAdapter { ArrayList<Fragment> fragmentsList; private flo

我有以下视图:显示3个片段的ViewPager。用户可以水平滚动查看ViewPager中的其他片段。 我需要创建一个动画,当创建活动并填充ViewPager时,显示从屏幕右侧进入的片段。 这可能吗?谢谢

XML:

适配器:

public class MyFragmentStatePagerAdapter extends FragmentStatePagerAdapter {
    ArrayList<Fragment> fragmentsList;

    private float pageWidth = 1;
    public void setPageWidth(float pageWidth) { this.pageWidth = pageWidth; }

    public MyFragmentStatePagerAdapter(FragmentManager fm, ArrayList<Fragment> fragmentsList) {
        super(fm);
        this.fragmentsList = fragmentsList;
    }
    @Override
    public int getCount() { 
        return fragmentsList.size(); 
    }       
    @Override
    public Fragment getItem(int position) {
        if (position<fragmentsList.size() & fragmentsList.get(position)!=null) {
            return fragmentsList.get(position);
        }
        return null;
    }
    @Override
    public float getPageWidth(int position) {
      return(pageWidth);
    }
}
公共类MyFragmentStatePagerAdapter扩展了FragmentStatePagerAdapter{
ArrayList碎屑岩;
私有浮动页面宽度=1;
public void setPageWidth(float pageWidth){this.pageWidth=pageWidth;}
公共MyFragmentStatePagerAdapter(FragmentManager fm、ArrayList fragmentsList){
超级(fm);
this.fragmentsList=fragmentsList;
}
@凌驾
public int getCount(){
返回fragmentsList.size();
}       
@凌驾
公共片段getItem(int位置){

如果(位置这里有一个链接可以帮助您:


它与公认的解决方案类似,但使用相同的插值器,仅根据系数更改持续时间。您需要在XML中使用ViewPagerCustomDuration而不是ViewPager,然后可以执行以下操作:

ViewPagerCustomDuration vp = (ViewPagerCustomDuration) findViewById(R.id.myPager);
vp.setScrollDurationFactor(2); // make the animation twice as slow

好的,我找到了解决方案。我只需扩展ViewPager并在onDraw中制作动画。
此代码正在按我的需要工作:

public class ViewPagerCustom extends ViewPager {

    private Context mContext;
    private boolean startAnimationDone = false;

    public ViewPagerCustom(Context context) {
        super(context);
        mContext = context;
        init();
    }

    public ViewPagerCustom(Context context, AttributeSet attrs) {
        super(context, attrs);
        mContext = context;
        init();
    }

    DisplayMetrics metrics;
    TranslateAnimation anim;
    private void init() {
        metrics = mContext.getResources().getDisplayMetrics();
        anim = new TranslateAnimation(metrics.widthPixels+200, 0, 0, 0);
        anim.setInterpolator(new DecelerateInterpolator());
        anim.setDuration(500);
    }

    private Canvas enterAnimation(Canvas c) {
        startAnimationDone = true;
        final int childCount = getChildCount();
        for (int i = 0; i < childCount; i++) {
            final View child = getChildAt(i);
            child.startAnimation(anim);
        }
        return c;
    }

    @Override
    protected void onDraw(Canvas c) {
        if (startAnimationDone==false) {
            c = enterAnimation(c);
        } 
        super.onDraw(c);
    }

}
public类ViewPagerCustom扩展了ViewPager{
私有上下文;
私有布尔startAnimationDone=false;
公共视图页面RCUSTOM(上下文){
超级(上下文);
mContext=上下文;
init();
}
public ViewPagerCustom(上下文、属性集属性){
超级(上下文,attrs);
mContext=上下文;
init();
}
显示度量;
翻译动画;
私有void init(){
metrics=mContext.getResources().getDisplayMetrics();
anim=新的TranslateAnimation(metrics.widthPixels+200,0,0,0);
动画设定插补器(新减速插补器());
动画设定持续时间(500);
}
私有画布动画(画布c){
startAnimationDone=true;
final int childCount=getChildCount();
for(int i=0;i
谢谢,但我需要在OnCreate期间仅在创建ViewPager时才显示动画。
ViewPagerCustomDuration vp = (ViewPagerCustomDuration) findViewById(R.id.myPager);
vp.setScrollDurationFactor(2); // make the animation twice as slow
public class ViewPagerCustom extends ViewPager {

    private Context mContext;
    private boolean startAnimationDone = false;

    public ViewPagerCustom(Context context) {
        super(context);
        mContext = context;
        init();
    }

    public ViewPagerCustom(Context context, AttributeSet attrs) {
        super(context, attrs);
        mContext = context;
        init();
    }

    DisplayMetrics metrics;
    TranslateAnimation anim;
    private void init() {
        metrics = mContext.getResources().getDisplayMetrics();
        anim = new TranslateAnimation(metrics.widthPixels+200, 0, 0, 0);
        anim.setInterpolator(new DecelerateInterpolator());
        anim.setDuration(500);
    }

    private Canvas enterAnimation(Canvas c) {
        startAnimationDone = true;
        final int childCount = getChildCount();
        for (int i = 0; i < childCount; i++) {
            final View child = getChildAt(i);
            child.startAnimation(anim);
        }
        return c;
    }

    @Override
    protected void onDraw(Canvas c) {
        if (startAnimationDone==false) {
            c = enterAnimation(c);
        } 
        super.onDraw(c);
    }

}