ViewPager 이중 끼 워 넣 은 미끄럼 문제 해결
4145 단어 기술.
해결 방법 1:부모 ViewPager 컨트롤 로 사용자 정의
public class ParentViewPager extends ViewPager{
private int childVPHeight=0;
public ParentViewPager(Context context) {
super(context);
// TODO Auto-generated constructor stub
init(context);
}
public ParentViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
init(context);
}
private void init(Context context) {
// TODO Auto-generated method stub
//
WindowManager windowManager = (WindowManager) context.getSystemService(context.WINDOW_SERVICE);
int disWidth = windowManager.getDefaultDisplay().getWidth();
// dp px
childVPHeight=(int) (context.getResources().getDisplayMetrics().density * disWidth + 0.5f);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent arg0) {
// TODO Auto-generated method stub
// ViewPager ViewPager
// false, ViewPager
if(getCurrentItem()==1 && arg0.getY()
이 방법 은 간단 하지만 나타 날 수 있 습 니 다.하위 ViewPager 가 ScrollView 일 때 하위 ViewPager 는 보이 지 않 는 곳 까지 미 끄 러 졌 지만 설정 한 높이 에서 부모 ViewPager 가 좌우 로 미 끄 러 지지 않도록 설정 합 니 다.onTouch 의 동작 은 부모 Viewpager 를 통 해 하위 컨트롤 로 전 달 됩 니 다.
**해결 방법 2:사용자 정의 Viewpager 를 하위 컨트롤 로**
public class ChildViewPager extends ViewPager{
/** **/
PointF downP = new PointF();
/** **/
PointF curP = new PointF();
OnSingleTouchListener onSingleTouchListener;
public ChildViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public ChildViewPager(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
@Override
public boolean onInterceptTouchEvent(MotionEvent arg0) {
// TODO Auto-generated method stub
// , true,
// onTouch , onTouchEvent
return true;
}
@Override
public boolean onTouchEvent(MotionEvent arg0) {
// TODO Auto-generated method stub
// onTouch
curP.x = arg0.getX();
curP.y = arg0.getY();
if(arg0.getAction() == MotionEvent.ACTION_DOWN){
//
// downP = curP , curP ,downP
downP.x = arg0.getX();
downP.y = arg0.getY();
// ViewPager ,
getParent().requestDisallowInterceptTouchEvent(true);
}
if(arg0.getAction() == MotionEvent.ACTION_MOVE){
// ViewPager ,
getParent().requestDisallowInterceptTouchEvent(true);
}
if(arg0.getAction() == MotionEvent.ACTION_UP){
// up
// , , , onclick
if(downP.x==curP.x && downP.y==curP.y){
onSingleTouch();
return true;
}
}
return super.onTouchEvent(arg0);
}
/**
*
*/
public void onSingleTouch() {
if (onSingleTouchListener!= null) {
onSingleTouchListener.onSingleTouch();
}
}
/**
*
* @author wanpg
*
*/
public interface OnSingleTouchListener {
public void onSingleTouch();
}
public void setOnSingleTouchListener(OnSingleTouchListener onSingleTouchListener) {
this.onSingleTouchListener = onSingleTouchListener;
}
}
왜 스스로 onSingleTouch 를 정의 합 니까?
ViewPager 의 onTouch Event 에서 저 는 onDown 을 조 작 했 기 때문에 조작 을 한 후에 touch 사건 을 onClick 과 그 내부 컨트롤 에 계속 전달 할 수 없 었 기 때문에 스스로 판단 하여 singleTouch 를 통 해 클릭 을 실현 하 는 사건 을 만 들 었 습 니 다.
방법 2.이중 ViewPager 내장 후 하위 ViewPager 의 터치 슬라이딩 문 제 를 완벽 하 게 해결 할 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
vim + sed 로 셸 스 크 립 트 파일 정리 하기/etc/sysconfig/network008 009 # Check that networking is up.010 [ ${NETWORKING} = "no" ] && exit 0011 012 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.