简体   繁体   中英

android -How to disable paging by swiping with finger on viewpager but allow onClickListener

This is my code for viewPager . I want to disable user to swipe between viewPager but be able to click on it .

This is my code ;

        vp= (ViewPager)header.findViewById(R.id.pager); 
    vp.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            return true;
        }
    });

    vp.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent in=new Intent (FistActiivty.this,List.class);
            in.putExtra("for","latest");
            startActivity(in);              
        }
    });

it disable swipe by user but onclicklistener is not working after that .

How can I make onclicklistener works again but disable swipe by user ?

You need to create custom class that extends ViewPager like this

MyViewPager.java

public class MyViewPager extends ViewPager 
{
    public MyViewPager(Context context) 
    {
        super(context);
    }

    public MyViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent arg0) {
        // Never allow swiping to switch between pages
        return false;
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        // Never allow swiping to switch between pages
        return false;
    }

}

Secondly, you need to make one change in your xml where you have defined android.support.v4.view.ViewPager

Like this

<YourProjectPackageName.MyViewPager
        android:id="@+id/viewPager"
        android:layout_width="fill_parent"
        android:layout_height="match_parent" />

Create custom viewpager class:

public class CustomViewPager extends ViewPager {

private boolean enabled;

public CustomViewPager(Context context, AttributeSet attrs) {
    super(context, attrs);
    this.enabled = true;
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    if (this.enabled) {
    return super.onTouchEvent(event);
}

return false;
}

@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
    if (this.enabled) {
        return super.onInterceptTouchEvent(event);
    }

    return false;
}

public void setPagingEnabled(boolean enabled) {
    this.enabled = enabled;
}
}

and use it i your xml file:

<mypackage.CustomViewPager 
android:id="@+id/myViewPager" 
android:layout_height="match_parent" 
android:layout_width="match_parent" />

I am using this. You need to call viewPager.setPagingEnabled(false);

import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;

/**
 * Created by ksenchy on 2.4.2015.
 */
public class CustomViewPager extends ViewPager {

    private boolean enabled = true;

    public CustomViewPager(Context context) {
        super(context);
    }

    public CustomViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return !enabled || super.onTouchEvent(event);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent event) {
        return enabled && super.onInterceptTouchEvent(event);
    }

    public void setPagingEnabled(boolean enabled) {
        this.enabled = enabled;
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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