我正在尝试使用Dave Smith的PagerContainer在我的ViewPager中显示多个页面。我已经实现了一个点击监听器来显示页码,但是当我点击左侧页面时,会显示“点击第2项”消息(第0项是正确的)。如果单击中间和右侧页面,将分别显示正确的消息“项目1”和“项目2”。我还附上了一张图片来描述这个问题。我怎样才能解决这个问题?提前谢谢。
下面给出了代码段:
@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 :(得分: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 :(得分:1)
CommonsWare的链接解决方法中存在触摸处理和硬件加速的各种问题。一个相当的解决方案是为ViewPager指定负余量:
ViewPager.setPageMargin(
getResources().getDimensionPixelOffset(R.dimen.viewpager_margin));
然后我在dimens.xml
中指定了这个维度:
<dimen name="viewpager_margin">-64dp</dimen>
为了弥补重叠页面,每个页面的内容视图都有相反的边距:
android:layout_marginLeft="@dimen/viewpager_margin_fix"
android:layout_marginRight="@dimen/viewpager_margin_fix"
再次在dimens.xml
:
<dimen name="viewpager_margin_fix">32dp</dimen>
(请注意,viewpager_margin_fix
维度是绝对viewpager_margin
维度的一半。)
我们实施了此in the Dutch newspaper app De Telegraaf Krant: