简体   繁体   English

PagerTransform动画后如何在ViewPager中为项目设置动画?

[英]How to animate an item in the ViewPager after PagerTransform animation?

I am working with viewpager transformer. 我正在使用viewpager变压器。 I am able add a transition effect using transformPage() method. 我可以使用transformPage()方法添加过渡效果。 The below given is my pager. 下面给出的是我的寻呼机。

final ViewPager pager = (ViewPager) localView
            .findViewById(R.id.pager);
pager.setAdapter(new my_adapter());
pager.setPageTransformer(true, new PageTransformer() {

        @Override
        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(1);
            } else if (position <= 1) { // [-1,1]
                View dummyImageView = view.findViewById(R.id.tourImage);
                dummyImageView.setTranslationX(-position
                            * (pageWidth / 2)); // Half
                View imageBottom = view
                            .findViewById(R.id.tour_bottom_image);
                imageBottom.setTranslationX(-position
                            * (pageWidth / 10)); // Half speed
            } else { // (1,+Infinity]
                // This page is way off-screen to the right.
                view.setAlpha(1);

            }
        }
    });

And this is my adapter, 这是我的适配器,

private class my_adapter extends PagerAdapter {

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

    @Override
    public boolean isViewFromObject(View view, Object o) {
        return view == o;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((View) object);
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        View new_view = null;
        LayoutInflater inflater = getActivity().getLayoutInflater();
        new_view = inflater.inflate(R.layout.tour_page_one, null);
        TextView tvTourDesc = (TextView) new_view
                    .findViewById(R.id.tourDesc);
        ImageView imageTour = (ImageView) new_view
                    .findViewById(R.id.tourImage);
        ImageView imageBottomTour = (ImageView) new_view
                    .findViewById(R.id.tour_bottom_image);

        container.addView(new_view);
        return new_view;
    }
}

What I am trying to do is animate an item in the adapter, for instance imageTour imageView,once the transition animation is finished. 我想要做的是在过渡动画完成后,对适配器中的一个项目进行动画处理,例如imageTour imageView。 When I add any animation it starts along with the pager transform animation. 当我添加任何动画时,它与寻呼机转换动画一起开始。 I want to animate it always after the transition animation. 我想总是在过渡动画之后对其进行动画处理。 I tried using onPageChangeListener with the pager but it doesn't return any view other than the currentPage number so that i can add animation to imageTour(imageView). 我尝试将onPageChangeListener与传呼机一起使用,但它不返回除currentPage号以外的任何视图,以便可以将动画添加到imageTour(imageView)。

In your transformPage() method: 在您的transformPage()方法中:

if (position == 0.0) {  // page is settled in center
    // add animation to image
    // start the animation
}

I know an old question but somebody may need it, though. 我知道一个老问题,但是有人可能需要它。

    AnimateMyView(yourViewPager.getChildAt(position).findViewById(R.id.id_your_item_like_image_view));

    void AnimateMyView(View v){
        Animation anim = AnimationUtils.loadAnimation(this,
                R.anim.anim);
         v.startAnimation(anim);
     }

By the way I got some error on getChildAt(position) code and getChildAt(mViewPager.getChildCount()-1) fixed my problem. 顺便说一下,我在getChildAt(position)代码上遇到了一些错误,而getChildAt(mViewPager.getChildCount()-1)解决了我的问题。 So you may need to change the code like that: 因此,您可能需要像这样更改代码:

 AnimateMyView(yourViewPager.getChildAt(mViewPager.getChildCount()-1).findViewById(R.id.id_your_item_like_image_view));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM