I have an animation inside a viewpager. It appears and disappears when it receives a touch event anywhere in the viewpager.
The problems is that I would like to disable the animation for the swiping gesture itself
Here is the code:
public class PageActivity extends Activity {
public int pagenum;
CustomPagerAdapter mCustomPagerAdapter;
private Animation animUp, animUp2;
private Animation animDown, animDown2;
RelativeLayout ll, rr;
boolean visible = false, visible2 = false;
ViewPager mViewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_page);
animUp = AnimationUtils.loadAnimation(this, R.anim.anim_up);
animDown = AnimationUtils.loadAnimation(this, R.anim.anim_down);
animUp2 = AnimationUtils.loadAnimation(this, R.anim.anim_up2);
animDown2 = AnimationUtils.loadAnimation(this, R.anim.anim_down2);
ll = (RelativeLayout) findViewById(R.id.slider);
ll.setVisibility(View.GONE);
rr = (RelativeLayout) findViewById(R.id.slider2);
rr.setVisibility(View.GONE);
Intent extra = this.getIntent();
pagenum = extra.getExtras().getInt("key");
mCustomPagerAdapter = new CustomPagerAdapter(this);
mViewPager.setAdapter(mCustomPagerAdapter);
mViewPager.setCurrentItem(pagenum);
}
@Override
public boolean dispatchTouchEvent( MotionEvent event){
if(event.getActionMasked()==MotionEvent.ACTION_UP) {
if (!visible && !visible2) {
ll.setVisibility(View.VISIBLE);
ll.startAnimation(animUp);
visible = true;
rr.setVisibility(View.VISIBLE);
rr.startAnimation(animDown2);
visible2 = true;
} else {
ll.startAnimation(animDown);
ll.setVisibility(View.GONE);
visible = false;
rr.setVisibility(View.GONE);
rr.startAnimation(animUp2);
visible2 = false;
}
}
return super.dispatchTouchEvent(event);
}
}
This is kinda hackish, but you could put an
OnPageChangeListeneron theViewPagerand listen for the page dragging event. If you get the event, don't do the animation.I've updated your code for a possible solution: