Android에서 뷰 페이저 스 와이프를 비활성화하거나 활성화하는 방법
내가하려는 작업 : 프로그램이 실행 중일 때 프로그래밍 방식으로 호출기에서 스 와이프를 활성화 / 비활성화하려고합니다.
예 : 흐름에있을 때 조건을 확인하고 반환true
하면 스 와이프 활성화가반환되고 조건이 반환되면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의 내장 뷰 페이지 대신 이것을 선택하십시오.
<mypackage.CustomViewPager
android:id="@+id/myViewPager"
android:layout_height="match_parent"
android:layout_width="match_parent" />
"false"로 "setPagingEnabled"메소드를 호출하기 만하면 사용자는 스 와이프하여 페이지를 매길 수 없습니다.
위의 방법론의 문제 : 흐름에 속성을 설정할 수 없습니다 . 즉, .... 스 와이프를 활성화하거나 비활성화 할 수 있습니다. 하지만 조건에 따라 할 수 없습니다
질문:
- 다른 방법으로 목표를 달성 할 수 있습니까? 그렇다면 그것은 무엇입니까?
- 아니면 이것이 가능하지 않습니까?
프로그래밍 방식으로 스 와이프 비활성화
final View touchView = findViewById(R.id.Pager);
touchView.setOnTouchListener(new View.OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event)
{
return true;
}
});
이것을 사용하여 수동으로 스 와이프합니다.
touchView.setCurrentItem(int index);
나를위한 최고의 솔루션. -먼저 다음과 같은 클래스를 만듭니다.
public class CustomViewPager extends ViewPager {
private Boolean disable = false;
public CustomViewPager(Context context) {
super(context);
}
public CustomViewPager(Context context, AttributeSet attrs){
super(context,attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
return !disable && super.onInterceptTouchEvent(event);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return !disable && super.onTouchEvent(event);
}
public void disableScroll(Boolean disable){
//When disable = true not work the scroll and when disble = false work the scroll
this.disable = disable;
}
}
레이아웃이 변경 - 그런 : <android.support.v4.view.ViewPager
이것에 대한<com.mypackage.CustomViewPager
-마지막으로 비활성화 view_pager.disableScroll(true);
하거나 활성화 할 수 있습니다.view_pager.disableScroll(false);
도움이 되었기를 바랍니다. :)
사용자 정의보기 호출기 어댑터에서 ViewPager
.
@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;
}
활성화하려면 각 super
메서드를 반환하십시오 .
super.onInterceptTouchEvent(event)
및 super.onTouchEvent(event)
.
제 경우에는 단순화 된 솔루션이 잘 작동했습니다. 재정의 메서드는 TouchEvent 리스너를 재정의하고 고정되도록 사용자 정의 뷰 페이저 어댑터에 있어야합니다.
@Override
public boolean onTouchEvent(MotionEvent event) {
return this.enabled && super.onTouchEvent(event);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
return this.enabled && super.onInterceptTouchEvent(event);
}
이 링크를 따라가는 다른 솔루션을 찾았습니다.
https://stackoverflow.com/a/42687397/4559365
It basically overrides the method canScrollHorizontally
to disable swiping by finger. Howsoever setCurrentItem
still works.
For disabling swiping
mViewPager.beginFakeDrag();
For enable swiping
if (mViewPager.isFakeDragging()) mViewPager.endFakeDrag();
This worked for me.
ViewPager.OnPageChangeListener onPageChangeListener = new ViewPager.OnPageChangeListener() {
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
// disable swipe
if(!swipeEnabled) {
if (viewPager.getAdapter().getCount()>1) {
viewPager.setCurrentItem(1);
viewPager.setCurrentItem(0);
}
}
}
public void onPageScrollStateChanged(int state) {}
public void onPageSelected(int position) {}
};
viewPager.addOnPageChangeListener(onPageChangeListener);
참고URL : https://stackoverflow.com/questions/29442216/how-to-disable-or-enable-viewpager-swiping-in-android
'code' 카테고리의 다른 글
Javascript / DOM : DOM 개체의 모든 이벤트를 제거하는 방법은 무엇입니까? (0) | 2020.11.01 |
---|---|
Rails의 기본 레이크 작업 재정의 (0) | 2020.11.01 |
Webpack의 로더 순서는 무엇입니까? (0) | 2020.11.01 |
버퍼링 된 IO와 버퍼링되지 않은 IO (0) | 2020.11.01 |
자바 : ~은 무엇을 의미합니까? (0) | 2020.11.01 |