【问题标题】:android Disable touch when swiping in viewpagerandroid在viewpager中滑动时禁用触摸
【发布时间】:2015-06-24 22:16:20
【问题描述】:

我在viewpager 中有一个动画。当它在viewpager 的任意位置接收到触摸事件时,它会出现和消失。

问题是我想禁用滑动手势本身的动画

代码如下:

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);

    }
 }

【问题讨论】:

    标签: android android-viewpager viewpagerindicator


    【解决方案1】:

    这有点骇人听闻,但您可以在ViewPager 上添加OnPageChangeListener 并监听页面拖动事件。如果你得到事件,不要做动画。

    我已更新您的代码以获得可能的解决方案:

    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;
        boolean dragging = 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);
            mViewPager.setOnPageChangeListener(new SimpleOnPageChangeListener() {
    
                @Override
                public void onPageScrollStateChanged(int state) {
    
                    switch (state) {
                    case ViewPager.SCROLL_STATE_DRAGGING:
                        dragging = true;
                        break;
                    case ViewPager.SCROLL_STATE_IDLE:
                        dragging = false;
                        break;
                    }
                }
    
            });
        }
    
        @Override
        public boolean dispatchTouchEvent(MotionEvent event) {
            if (event.getActionMasked() == MotionEvent.ACTION_UP && !dragging) {
                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);
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-07-24
      • 2020-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多