I have ViewPager with 3 Fragments. I just want to know is it possible to move elements (ImageView, TextView, e.t.c) in Fragment when user start to scroll the page and go to another page? What the best way to do that? Here below my code that I used before. I used it in my MainActivity. Only after test I understand that I am on the wrong way cause these code will work every time when user scroll. So is it possible to set it in Fragment?
My code that i used before in MainActivity:
@Override
public void transformPage(View page, float position) {
// transformation here
int pageWidth = page.getWidth();
ImageView mImageViewCloud = (ImageView) getView().findViewById(R.id.cloud);
ImageView mImageButterfly = (ImageView) getView().findViewById(R.id.butterfly);
if (position < -1) { // [-Infinity,-1)
// This page is way off-screen to the left.
page.setAlpha(0);
} else if (position <= 1) { // [-1,1]
if(mImageViewCloud!=null)mImageViewCloud.setTranslationX((float) (-(1 - position) * 0.5 * pageWidth));
if(mImageButterfly!=null)mImageButterfly.setTranslationX((float) ((1 - position) * 1.5 * pageWidth));
// The 0.5, 1.5, 1.7 values you see here are what makes the view move in a different speed.
// The bigger the number, the faster the view will translate.
// The result float is preceded by a minus because the views travel in the opposite direction of the movement.
} else { // (1,+Infinity]
// This page is way off-screen to the right.
page.setAlpha(0);
}
}
Any help is appreciated. Thanks!
EDIT: AdapterFragment.java
public abstract class AdapterFragment extends Fragment {
SparseArray<AdapterFragment> registeredFragments = new SparseArray<AdapterFragment>();
@Override
public Object instantiateItem(ViewGroup container, int position) {
AdapterFragment fragment = (AdapterFragment) super.instantiateItem(container, position);
registeredFragments.put(position, fragment);
return fragment;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
registeredFragments.remove(position);
super.destroyItem(container, position, object);
}
public void pass(int farFarAway) {
for(int i = 0, nSize = registeredFragments.size(); i < nSize; i++)
registeredFragments.valueAt(i).pass(farFarAway);
}
final int pageWidth = ViewPager.getMeasuredWidth(); //after ViewPager drawn, probably its also screen width
final int scrollRange = (AdapterFragment.getCount()-1)*pageWidth;
ViewPager.OnPageChangeListener OPCL = new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
float farFarAway=(float)(position*pageWidth+positionOffsetPixels), scrollToFactor = farFarAway/scrollRange;
AdapterFragment.pass(farFarAway);
}
@Override
public void onPageScrollStateChanged(int state) {
}
};
}