编辑2:示例代码已被推送到 TouchImageView 的主分支。这里有一个链接到示例活动 https://github.com/MikeOrtiz/TouchImageView/blob/master/src/com/ortiz/touch/ViewPagerExampleActivity.java and a 链接到扩展 ViewPager https://github.com/MikeOrtiz/TouchImageView/blob/master/src/com/ortiz/touch/ExtendedViewPager.java.
编辑:添加了将示例链接调整为 TouchImageView 的代码。注意:您将需要最新的代码,该代码当前位于 dev 分支中。将来,这将包含在 v1.2.0 中。如果 TouchImageView 覆盖 canScrollHorizontally,您就知道您拥有最新的代码。
Step 1:扩展ViewPager并重写canScroll来调用canScrollHorizontallyFroyo。
public class ExtendedViewPager extends ViewPager {
public ExtendedViewPager(Context context) {
super(context);
}
public ExtendedViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) {
if (v instanceof TouchImageView) {
return ((TouchImageView) v).canScrollHorizontallyFroyo(-dx);
} else {
return super.canScroll(v, checkV, dx, x, y);
}
}
}
Step 2:修改TouchImageView,添加canScrollHorizontallyFroyo:
public boolean canScrollHorizontallyFroyo(int direction) {
return canScrollHorizontally(direction);
}
Step 3:您的活动
public class TouchImageViewActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ExtendedViewPager mViewPager = (ExtendedViewPager) findViewById(R.id.view_pager);
setContentView(mViewPager);
mViewPager.setAdapter(new TouchImageAdapter());
}
static class TouchImageAdapter extends PagerAdapter {
private static int[] images = { R.drawable.img1, R.drawable.img2, R.drawable.img3 };
@Override
public int getCount() {
return images.length;
}
@Override
public View instantiateItem(ViewGroup container, int position) {
TouchImageView img = new TouchImageView(container.getContext());
img.setImageResource(images[position]);
container.addView(img, LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
return img;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
}
}
Step 4:主文件
<com.example.touch.ExtendedViewPager
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
TouchImageView实际上是我的项目。我目前有a fix https://github.com/MikeOrtiz/TouchImageView/commit/0fb9272ec73ee3f93c144d825feee1a741099a21 in the 开发分支 https://github.com/MikeOrtiz/TouchImageView/tree/dev用于与 ViewPagers 集成,它将在即将发布的版本中推送到 master。不幸的是,此修复仅适用于 API 14 及更高版本,因为 honeycomb 及更早版本不调用canScrollHorizontally
。如果您需要支持较旧的 API,那么您将需要在 ViewPager 中实现解决方法。这是一个例子。 https://stackoverflow.com/questions/7774642/scroll-webview-horizontally-inside-a-viewpager