답변:
서브 클래 싱해야합니다 ViewPager
. onTouchEvent
아이 뷰를 터치하는 것과 같이 변경하고 싶지 않은 좋은 것들이 많이 있습니다. onInterceptTouchEvent
당신이 바꾸고 싶은 것입니다. 의 코드를 보면 ViewPager
주석이 표시됩니다.
/*
* This method JUST determines whether we want to intercept the motion.
* If we return true, onMotionEvent will be called and we do the actual
* scrolling there.
*/
완벽한 솔루션은 다음과 같습니다.
먼저이 클래스를 src
폴더에 추가하십시오 .
import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.animation.DecelerateInterpolator;
import android.widget.Scroller;
import java.lang.reflect.Field;
public class NonSwipeableViewPager extends ViewPager {
public NonSwipeableViewPager(Context context) {
super(context);
setMyScroller();
}
public NonSwipeableViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
setMyScroller();
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
// Never allow swiping to switch between pages
return false;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// Never allow swiping to switch between pages
return false;
}
//down one is added for smooth scrolling
private void setMyScroller() {
try {
Class<?> viewpager = ViewPager.class;
Field scroller = viewpager.getDeclaredField("mScroller");
scroller.setAccessible(true);
scroller.set(this, new MyScroller(getContext()));
} catch (Exception e) {
e.printStackTrace();
}
}
public class MyScroller extends Scroller {
public MyScroller(Context context) {
super(context, new DecelerateInterpolator());
}
@Override
public void startScroll(int startX, int startY, int dx, int dy, int duration) {
super.startScroll(startX, startY, dx, dy, 350 /*1 secs*/);
}
}
}
다음으로, 일반 대신이 클래스를 사용할 수 있는지 확인하십시오 ViewPager
당신은 아마로 지정하는 android.support.v4.view.ViewPager
. 레이아웃 파일에서 다음과 같이 지정하십시오.
<com.yourcompany.NonSwipeableViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
이 특정 예는 a에 LinearLayout
있고 전체 화면을 차지하기위한 것이므로 layout_weight
1 layout_height
은 0dp입니다.
그리고 setMyScroller();
부드러운 전환을위한 방법입니다
0dp
/ 1
무게 솔루션 을 선택 match_parent
했습니까? 그렇게하면 성능이 향상됩니까?
executeKeyEvent()
입니다. 그런 다음이 메소드를 호출 allowScroll()
합니다. // Never allow swiping by keyboard LEFT, RIGHT, TAB and SHIFT+TAB keys
@Override public boolean executeKeyEvent(KeyEvent event) { return false; }
보다 일반적인 확장은 즉시 페이징을 활성화 및 비활성화 할 수 ViewPager
있는 SetPagingEnabled
방법 을 만드는 것 입니다. 활성화 / 스 와이프, 단지 오버라이드 (override)하는 두 가지 방법을 사용하지 않으려면 : onTouchEvent
와 onInterceptTouchEvent
. 페이징이 비활성화 된 경우 둘 다 "false"를 반환합니다.
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;
}
}
그런 다음 XML의 내장 viewpager 대신 이것을 선택하십시오.
<mypackage.CustomViewPager
android:id="@+id/myViewPager"
android:layout_height="match_parent"
android:layout_width="match_parent" />
setPagingEnabled
메소드 를 호출하기 만하면 false
사용자가 스 와이프하여 페이지 매김을 할 수 없습니다.
onTouchEvent
와 onInterceptTouchEvent
함께 방법을return enabled && super.onTouchEvent(event);
가장 간단한 방법은로 setOnTouchListener
돌아가는 것 true
입니다 ViewPager
.
mPager.setOnTouchListener(new OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event)
{
return true;
}
});
pager.setCurrentItem(pager.getCurrentItem());
반환하기 전에 추가 할 때 작동합니다 true
.
public int getItemPosition(Object object) { return POSITION_NONE; }
어댑터에있는 레이아웃 결함을 해결하려면 페이지를 강제로 재생하고 다른 문제도 해결할 수 있습니다.
스타일을 선언하는 것이 좋으므로 xml에서 속성을 변경할 수 있습니다.
private boolean swipeable;
public MyViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyViewPager);
try {
swipeable = a.getBoolean(R.styleable.MyViewPager_swipeable, true);
} finally {
a.recycle();
}
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
return swipeable ? super.onInterceptTouchEvent(event) : false;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return swipeable ? super.onTouchEvent(event) : false;
}
그리고 values / attr.xml에서 :
<declare-styleable name="MyViewPager">
<attr name="swipeable" format="boolean" />
</declare-styleable>
레이아웃 xml에서 사용할 수 있도록 :
<mypackage.MyViewPager
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/viewPager"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:swipeable="false" />
물론 get / set 속성을 계속 가질 수 있습니다.
다른 ViewPager 내에 ViewPager 자체가있는 경우 에만 재정의 onTouchEvent
하고 onInterceptTouchEvent
충분하지 않습니다. Child ViewPager는 첫 번째 / 마지막 페이지에 위치하지 않는 한 상위 ViewPager에서 가로 스크롤 터치 이벤트를 훔칩니다.
이 설정이 제대로 작동하려면 canScrollHorizontally
방법 도 재정의해야합니다 .
아래 LockableViewPager
구현을 참조하십시오 .
public class LockableViewPager extends ViewPager {
private boolean swipeLocked;
public LockableViewPager(Context context) {
super(context);
}
public LockableViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
public boolean getSwipeLocked() {
return swipeLocked;
}
public void setSwipeLocked(boolean swipeLocked) {
this.swipeLocked = swipeLocked;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return !swipeLocked && super.onTouchEvent(event);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
return !swipeLocked && super.onInterceptTouchEvent(event);
}
@Override
public boolean canScrollHorizontally(int direction) {
return !swipeLocked && super.canScrollHorizontally(direction);
}
}
이제 우리는 사용자 정의를 만들 필요가 없습니다 ViewPager
ViewPager2
안드로이드에서 사용 가능한 새로운 이름보기
ViewPager2
전통적인 수평 페이징 외에 수직 페이징을 지원합니다. ViewPager2
요소의 android:orientation
속성 을 설정 하여 요소에 대한 수직 페이징을 활성화 할 수 있습니다XML 사용
<androidx.viewpager2.widget.ViewPager2
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/pager"
android:orientation="vertical" />
코드 사용
에서 비활성화 스 와이프로 viewpager2
사용
viewPager2.setUserInputEnabled(false);
사용중인 스 와이프를 활성화 viewpager2
하려면
viewPager2.setUserInputEnabled(true);
자세한 내용은 이것을 확인하십시오
확인하십시오 : ViewPager에서 ViewPager2로 마이그레이션
완전한 예를 보려면 Android에서 ViewPager2 사용을 확인 하십시오.
viewpager2
로RecyclerView.Adapter
ViewPager에서 확장하는 경우 이전에 @araks로 표시된대로 재정의해야합니다.executeKeyEvent
@Override
public boolean executeKeyEvent(KeyEvent event)
{
return isPagingEnabled ? super.executeKeyEvent(event) : false;
}
Galaxy Tab 4 10 '과 같은 일부 장치는 대부분의 장치가 표시하지 않는 다음 단추를 표시합니다.
스 와이프를 비활성화하려면
mViewPager.beginFakeDrag();
스 와이프를 사용하려면
mViewPager.endFakeDrag();
특정 페이지에서 스 와이프를 비활성화하고 멋진 고무 밴드 애니메이션을 제공해야했습니다. 방법은 다음과 같습니다.
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset,
int positionOffsetPixels) {
if (position == MANDATORY_PAGE_LOCATION && positionOffset > 0.5) {
mViewPager.setCurrentItem(MANDATORY_PAGE_LOCATION, true);
}
}
onPageSelected
가 실행됩니다. 다음 페이지에서도 전환됩니다. 따라서이 코드는 필요하지 않습니다.
나는 이것을 게시하는 것이 늦다는 것을 알고 있지만 결과를 달성하기위한 작은 해킹이 있습니다.)
보기 페이지 아래에 더미보기를 추가하기 만하면 됩니다 .
<android.support.v4.view.ViewPager
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v4.view.ViewPager>
<RelativeLayout
android:id="@+id/dummyView"
android:layout_width="match_parent"
android:layout_height="match_parent">
</RelativeLayout>
그런 다음에을 추가 OnClickListener
하십시오 RelativeLayout
.
dummyView = (RelativeLayout) findViewById(R.id.dummyView);
dummyView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Just leave this empty
}
});
레이아웃, 배치 및 동작으로 약간의 창의력을 발휘하면 상상할 수있는 모든 것을 할 수있는 방법을 찾는 방법을 배우게됩니다. :)
행운을 빕니다!
setClickable
것입니다 . setOnClickListener
onClick
나는 CustomViewPager
슬쩍 컨트롤과 함께 썼다 :
public class ScrollableViewPager extends ViewPager {
private boolean canScroll = true;
public ScrollableViewPager(Context context) {
super(context);
}
public ScrollableViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void setCanScroll(boolean canScroll) {
this.canScroll = canScroll;
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
return canScroll && super.onTouchEvent(ev);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return canScroll && super.onInterceptTouchEvent(ev);
}
}
사용자가 설정 한 경우 canScroll
에 true
,이 ViewPager
손가락으로 보내 주시면 될 수있다,false
반대로.
나는 이것을 내 프로젝트에서 사용하며 지금까지 훌륭하게 작동합니다.
나는이 수업을 성공적으로 사용했다. 일부 장치에서 화살표를 사용하여 스 와이프하지 않거나 접근성을 위해 executeKeyEvent를 재정의 해야합니다.
import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.MotionEvent;
public class ViewPagerNoSwipe extends ViewPager {
/**
* Is swipe enabled
*/
private boolean enabled;
public ViewPagerNoSwipe(Context context, AttributeSet attrs) {
super(context, attrs);
this.enabled = false; // By default swiping is disabled
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return this.enabled ? super.onTouchEvent(event) : false;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
return this.enabled ? super.onInterceptTouchEvent(event) : false;
}
@Override
public boolean executeKeyEvent(KeyEvent event) {
return this.enabled ? super.executeKeyEvent(event) : false;
}
public void setSwipeEnabled(boolean enabled) {
this.enabled = enabled;
}
}
그리고 xml 에서 다음 과 같이 호출하십시오.
<package.path.ViewPagerNoSwipe
android:layout_width="match_parent"
android:layout_height="match_parent" />
performClick()
메소드가 대체되지 않음을 경고합니다 .
Kotlin에서 내 솔루션은 위의 답변을 결합합니다.
class CustomViewPager(context: Context, attrs: AttributeSet): ViewPager(context, attrs) {
var swipeEnabled = false
override fun onTouchEvent(ev: MotionEvent?): Boolean {
return if (swipeEnabled) super.onTouchEvent(ev) else false
}
override fun onInterceptTouchEvent(ev: MotionEvent?): Boolean {
return if (swipeEnabled) super.onInterceptTouchEvent(ev) else false
}
override fun executeKeyEvent(event: KeyEvent): Boolean {
return if (swipeEnabled) super.executeKeyEvent(event) else false
}
}
onInterceptTouchEvent()
하면 자식 뷰가 입력을받지 못하게됩니다. 대부분의 경우 이것은 의도 된 동작이 아닙니다.
kotlin에서는 ViewPager 클래스를 상속하는 사용자 정의 위젯을 만들고 스 와이프 동작을 제어하기위한 플래그 값을 추가하여이 문제를 해결할 수 있습니다.
NoSwipePager.kt
class NoSwipePager(context: Context, attrs: AttributeSet) : ViewPager(context, attrs) {
var pagingEnabled: Boolean = false
override fun onTouchEvent(event: MotionEvent): Boolean {
return if (this.pagingEnabled) {
super.onTouchEvent(event)
} else false
}
override fun onInterceptTouchEvent(event: MotionEvent): Boolean {
return if (this.pagingEnabled) {
super.onInterceptTouchEvent(event)
} else false
}
}
xml에서
<your.package.NoSwipePager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/tab_layout" />
프로그래밍 방식으로 스 와이프를 사용 중지합니다. kotlin-android-extensions
플러그인이 build.gradle에 적용 되면 아래 코드를 작성하여 스 와이프를 비활성화 할 수 있습니다.
view_pager.pagingEnabled = false
그렇지 않으면 아래 코드를 사용하여 스 와이프를 비활성화 할 수 있습니다.
val viewPager : ViewPager = findViewById(R.id.view_pager)
viewPager.pagingEnabled = false
onInterceptTouchEvent()
하면 자식 뷰가 입력을받지 못하게됩니다. 대부분의 경우 이것은 의도 된 동작 이 아닙니다 .
super.onInterceptTouchEvent(event)
하지 않으면 이러한보기에서 입력을받지 않습니다 (문서화 된 onInterceptTouchEvent
메소드의 목적 임 ).
onInterceptTouchEvent()
메서드 를 재정의 하면 내용 (콘텐츠)이 입력을받지 못하게 한다는 사실을 여전히 다루고 있습니다.
오버라이드 (override) 중 하나에서 진정한 돌아보십시오 onInterceptTouchEvent () 및 / 또는 onTouchEvent () 호출기에 터치 이벤트를 소비합니다.
true
터치 이벤트가 처리되었다는 의미 로 돌아가고 싶지 않습니까?
특정 페이지 (이 예에서는 2 페이지)에서 스 와이프를 비활성화하는 또 다른 쉬운 솔루션 :
int PAGE = 2;
viewPager.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (viewPager.getCurrentItem() == PAGE) {
viewPager.setCurrentItem(PAGE-1, false);
viewPager.setCurrentItem(PAGE, false);
return true;
}
return false;
}
This worked for me
viewPager.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (viewPager.getCurrentItem() == 0) {
viewPager.setCurrentItem(-1, false);
return true;
}
else if (viewPager.getCurrentItem() == 1) {
viewPager.setCurrentItem(1, false);
return true;
}
else if (viewPager.getCurrentItem() == 2) {
viewPager.setCurrentItem(2, false);
return true;
}
return true;
}
});
확대 / 축소 및 이동을 지원 하는 ImageView
s 및을 사용 하여 이미지 갤러리를 작성하는 경우 ViewPager
여기에 설명 된 간단한 해결책을 참조하십시오. Phimpme Android (및 Github 샘플 -PhotoView에서 기본 ViewPager를 확장하여 확대 가능한 ImageView 구현) ). 이 솔루션은 ViewPager
단독으로 는 작동하지 않습니다 .
public class CustomViewPager extends ViewPager {
public CustomViewPager(Context context) {
super(context);
}
public CustomViewPager(Context context, AttributeSet attrs)
{
super(context,attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
try {
return super.onInterceptTouchEvent(event);
} catch (IllegalArgumentException e) {
return false;
}
}
}
Xamarin에서 Android에 동일하게 구현하려면 C #으로의 번역이 있습니다.
속성의 이름을 " ScrollEnabled "로 지정했습니다. iOS는 excat과 동일한 이름을 사용하기 때문입니다. 따라서 두 플랫폼에서 동일한 이름을 지정하므로 개발자가 더 쉽게 사용할 수 있습니다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.Support.V4.View;
using Android.Util;
namespace YourNameSpace.ViewPackage {
// Need to disable swiping for ViewPager, if user performs Pre DSA and the dsa is not completed yet
// http://stackoverflow.com/questions/9650265/how-do-disable-paging-by-swiping-with-finger-in-viewpager-but-still-be-able-to-s
public class CustomViewPager: ViewPager {
public bool ScrollEnabled;
public CustomViewPager(Context context, IAttributeSet attrs) : base(context, attrs) {
this.ScrollEnabled = true;
}
public override bool OnTouchEvent(MotionEvent e) {
if (this.ScrollEnabled) {
return base.OnTouchEvent(e);
}
return false;
}
public override bool OnInterceptTouchEvent(MotionEvent e) {
if (this.ScrollEnabled) {
return base.OnInterceptTouchEvent(e);
}
return false;
}
// For ViewPager inside another ViewPager
public override bool CanScrollHorizontally(int direction) {
return this.ScrollEnabled && base.CanScrollHorizontally(direction);
}
// Some devices like the Galaxy Tab 4 10' show swipe buttons where most devices never show them
// So, you could still swipe through the ViewPager with your keyboard keys
public override bool ExecuteKeyEvent(KeyEvent evt) {
return this.ScrollEnabled ? base.ExecuteKeyEvent(evt) : false;
}
}
}
.axml 파일에서 :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<YourNameSpace.ViewPackage.CustomViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/white"
android:layout_alignParentTop="true" />
</LinearLayout>
위 코드 중 아무것도 원활하게 작동하지 않습니다.
<HorizontalScrollView
android:id="@+id/horizontalScrollView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</HorizontalScrollView>
여기 내 구현입니다
스 와이프 애니메이션을 사용하지 않으려면 왼쪽과 오른쪽으로 swipeListener를 사용하고 애니메이션을 사용하지 않고 손가락으로 스크롤을 원할 수 있다는 입니다.
1 재정의 Viewpager
방법 onInterceptTouchEvent
및onTouchEvent
2- 나만의 만들기 GestureDetector
3- 스 와이프 제스처를 감지하고 setCurrentItem(item, false)
ViewPager
public class ViewPagerNoSwipe extends ViewPager {
private final GestureDetector gestureDetector;
private OnSwipeListener mOnSwipeListener;
public void setOnSwipeListener(OnSwipeListener onSwipeListener) {
mOnSwipeListener = onSwipeListener;
}
public ViewPagerNoSwipe(@NonNull Context context) {
super(context);
gestureDetector = new GestureDetector(context, new GestureListener());
}
public ViewPagerNoSwipe(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
gestureDetector = new GestureDetector(context, new GestureListener());
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
return true;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
gestureDetector.onTouchEvent(ev);
return false;
}
public class GestureListener extends GestureDetector.SimpleOnGestureListener {
private static final int SWIPE_THRESHOLD = 100;
private static final int SWIPE_VELOCITY_THRESHOLD = 100;
@Override
public boolean onDown(MotionEvent e) {
return true;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
boolean result = false;
try {
float diffY = e2.getY() - e1.getY();
float diffX = e2.getX() - e1.getX();
if (Math.abs(diffX) > Math.abs(diffY)) {
if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
if (diffX > 0) {
if(mOnSwipeListener!=null)
mOnSwipeListener.onSwipeRight();
} else {
if(mOnSwipeListener!=null)
mOnSwipeListener.onSwipeLeft();
}
result = true;
}
} else if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) {
if (diffY > 0) {
if(mOnSwipeListener!=null)
mOnSwipeListener.onSwipeBottom();
} else {
if(mOnSwipeListener!=null)
mOnSwipeListener.onSwipeTop();
}
result = true;
}
} catch (Exception exception) {
exception.printStackTrace();
}
return result;
}
}
public interface OnSwipeListener {
void onSwipeRight();
void onSwipeLeft();
void onSwipeTop();
void onSwipeBottom();
}
}
ViewPager를 설정할 때 swipeListener를 설정하십시오.
postsPager.setOnSwipeListener(new ViewPagerNoSwipe.OnSwipeListener() {
@Override
public void onSwipeRight() {
postsPager.setCurrentItem(postsPager.getCurrentItem() + 1,false);
}
@Override
public void onSwipeLeft() {
postsPager.setCurrentItem(postsPager.getCurrentItem() - 1, false);
}
...
}
방금 viewpager를 약간 사용자 정의하고 쉽게 스 와이프를 비활성화했습니다.
public class CustomViewPager extends ViewPager {
private boolean swipeLocked;
public CustomViewPager(Context context) {
super(context);
}
public CustomViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
public boolean getSwipeLocked() {
return swipeLocked;
}
public void setSwipeLocked(boolean swipeLocked) {
this.swipeLocked = swipeLocked;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return !swipeLocked && super.onTouchEvent(event);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
return !swipeLocked && super.onInterceptTouchEvent(event);
}
@Override
public boolean canScrollHorizontally(int direction) {
return !swipeLocked && super.canScrollHorizontally(direction);
}
}
ViewPager2를 사용하는 경우 다음을 사용해야합니다.
viewpager.setUserInputEnabled(false);
로부터 문서 :
사용자 시작 스크롤을 활성화 또는 비활성화합니다. 여기에는 터치 입력 (스크롤 및 플링 제스처) 및 접근성 입력이 포함됩니다. 키보드 입력 비활성화는 아직 지원되지 않습니다. 사용자가 시작한 스크롤이 비활성화되면 setCurrentItem을 통한 프로그래밍 방식 스크롤이 계속 작동합니다. 기본적으로 사용자 시작 스크롤이 사용 가능합니다.
shareViewPager?.setOnTouchListener(object :View.OnTouchListener{
override fun onTouch(v: View?, event: MotionEvent?): Boolean {
for (PAGE in 0..shareViewPager.adapter!!.count){
if (shareViewPager.currentItem==PAGE){
shareViewPager.setCurrentItem(PAGE-1,false)
shareViewPager.setCurrentItem(PAGE,false)
}}
return true
}
})