2012-10-26 2 views
4

Dave Smith의 PagerContainer를 구현하여 ViewPager에 여러 페이지를 표시하려고합니다. 클릭 수 리스너를 구현하여 페이지 번호를 표시했지만 왼쪽 페이지를 클릭하면 "항목 2를 클릭했습니다"라는 메시지가 표시됩니다 (항목 0은 정확할 것입니다). 중간 및 오른쪽 페이지를 클릭하면 올바른 메시지가 각각 "항목 1"및 "항목 2"로 표시됩니다. 또한 문제를 설명하기 위해 이미지를 첨부했습니다. 이 문제를 어떻게 해결할 수 있습니까? 미리 감사드립니다.ViewPager에 여러 페이지가 표시됩니다. 잘못된 위치

enter image description here

이 코드는 아래와 같습니다 : CommonsWare의 연결 문제를 해결 터치 처리 및 하드웨어 가속에 여러 가지 문제가 있습니다

@Override 
    public Object instantiateItem(ViewGroup container, final int position) { 
     TextView view = new TextView(PagerActivity.this); 
     view.setText("Item "+position); 
     view.setGravity(Gravity.CENTER); 
     view.setBackgroundColor(Color.argb(255, position * 50, position * 10, position * 50)); 


     view.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 

       Toast.makeText(PagerActivity.this, "clicked on Item " + String.valueOf(position), 1000).show(); 

      } 
     }); 

     container.addView(view); 
     return view; 
    } 

pager.setOffscreenPageLimit(adapter.getCount()); 

    pager.setPageMargin(15); 

    pager.setClipChildren(false); 
+0

가 Toast.makeText와 토스트를 교체하십시오 (PagerActivity.this "항목에 클릭"+ ((텍스트 뷰)보기) .getText(), 1000) .show() ; – Lemberg

+0

@Lemberg, 불행히도 도움이되지 못했습니다. – burakk

+2

해결 방법을 찾았습니까? – koti

답변

1

.

<dimen name="viewpager_margin">-64dp</dimen> 

중복 페이지를 보상하기 위해, 각 페이지의 내용 뷰가 반대 여유가 :

ViewPager.setPageMargin(
    getResources().getDimensionPixelOffset(R.dimen.viewpager_margin)); 

내가 다음 dimens.xml 내에서이 차원을 지정 : 오히려 해결책은 ViewPager에 대한 부정적인 여백을 지정하는 것입니다 : dimens.xml에서 다시

android:layout_marginLeft="@dimen/viewpager_margin_fix" 
android:layout_marginRight="@dimen/viewpager_margin_fix" 

:

<dimen name="viewpager_margin_fix">32dp</dimen> 

합니다 (viewpager_margin_fix 차원이 절대 viewpager_margin 차원의 절반을 유의하십시오.)

우리는이 in the Dutch newspaper app De Telegraaf Krant 구현 :

Phone example in De Telegraaf KrantTablet example

3

힐로의에서

변경이 PagerContainer.java 파일. 난이 도움이 될 것입니다 생각 :

@Override 
public boolean onTouchEvent(MotionEvent ev) { 
    // We capture any touches not already handled by the ViewPager 
    // to implement scrolling from a touch outside the pager bounds. 
    switch (ev.getAction()) { 
    case MotionEvent.ACTION_DOWN: 
     mInitialTouch.x = (int) ev.getX(); 
     mInitialTouch.y = (int) ev.getY(); 
    default: 
     if (mInitialTouch.x < mCenter.x) { 
      ev.offsetLocation(-(mCenter.x - mInitialTouch.x), mCenter.y - mInitialTouch.y); 
     } else { 
      ev.offsetLocation(mCenter.x - mInitialTouch.x, mCenter.y - mInitialTouch.y); 
     } 
     break; 
    } 

    return mPager.dispatchTouchEvent(ev); 
} 
+1

이 작업 ... 감사합니다 –

+0

가로 방향으로 3 페이지 이상 보이면 어떻게됩니까? – Blackbelt

+0

** mCenter ** 및 ** mInitialTouch **는 무엇입니까? –

관련 문제