如何在 PagerTransform 动画之后为 ViewPager 中的项目设置动画?
How to animate an item in the ViewPager after PagerTransform animation?
我正在使用 viewpager 转换器。我可以使用 transformPage() 方法添加过渡效果。下面给出的是我的寻呼机。
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);
}
}
});
这是我的适配器,
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;
}
}
我想做的是在过渡动画完成后为适配器中的项目设置动画,例如 imageTour imageView。当我添加任何动画时,它会与寻呼机变换动画一起开始。我想在过渡动画之后始终为其设置动画。我尝试将 onPageChangeListener 与寻呼机一起使用,但它 return 除了 currentPage 编号之外没有任何视图,因此我可以将动画添加到 imageTour(imageView)。
在您的 transformPage()
方法中:
if (position == 0.0) { // page is settled in center
// add animation to image
// start the animation
}
我知道一个老问题,但有人可能需要它。
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);
}
顺便说一下,我在 getChildAt(position) 代码上遇到了一些错误,getChildAt(mViewPager.getChildCount()-1) 解决了我的问题。所以你可能需要像这样更改代码:
AnimateMyView(yourViewPager.getChildAt(mViewPager.getChildCount()-1).findViewById(R.id.id_your_item_like_image_view));
我正在使用 viewpager 转换器。我可以使用 transformPage() 方法添加过渡效果。下面给出的是我的寻呼机。
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);
}
}
});
这是我的适配器,
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;
}
}
我想做的是在过渡动画完成后为适配器中的项目设置动画,例如 imageTour imageView。当我添加任何动画时,它会与寻呼机变换动画一起开始。我想在过渡动画之后始终为其设置动画。我尝试将 onPageChangeListener 与寻呼机一起使用,但它 return 除了 currentPage 编号之外没有任何视图,因此我可以将动画添加到 imageTour(imageView)。
在您的 transformPage()
方法中:
if (position == 0.0) { // page is settled in center
// add animation to image
// start the animation
}
我知道一个老问题,但有人可能需要它。
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);
}
顺便说一下,我在 getChildAt(position) 代码上遇到了一些错误,getChildAt(mViewPager.getChildCount()-1) 解决了我的问题。所以你可能需要像这样更改代码:
AnimateMyView(yourViewPager.getChildAt(mViewPager.getChildCount()-1).findViewById(R.id.id_your_item_like_image_view));