我想在Imageview上实现Pinch Zoom,在View Pager中使用类似于Default Android Gallery的方法。我在GitHub上找到了多个源,但是缩放和滑动仅适用于第一张图片。
我尝试过的是:
1.)TouchImageView
2.)PhotoView
3.)Android Touch Gallery
以上所有链接都适用于单个 ImageView 。但是,当涉及View分页器中的图像时,它们会有一些故障,并且仅适用于View分页器中的第一张图像。当我们在 View 寻呼机中滚动到第三张第四张图像时,如果缩放图像,则拖动功能将无法正常工作。
如果有人知道有什么好的图书馆可以这样做,请给我提供他们的链接。
最佳答案
编辑2:示例代码已被推送到TouchImageView的master分支。这是link to the example activity和link to the ExtendedViewPager。
编辑:添加了使示例链接适应TouchImageView的代码。注意:您将需要最新的代码,该代码当前位于dev分支中。将来,它将包含在v1.2.0中。您知道,如果TouchImageView覆盖canScrollHorizontally,则您拥有最新的代码。
步骤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);
}
}
}
步骤2:通过添加canScrollHorizontallyFroyo来修改TouchImageView:
public boolean canScrollHorizontallyFroyo(int direction) {
return canScrollHorizontally(direction);
}
步骤3:您的 Activity
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;
}
}
}
步骤4: main.xml
<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中有dev branch以便与ViewPagers集成,在即将发布的版本中将把它推送给master。不幸的是,此修复仅适用于API 14及更高版本,因为honeycomb和更早版本未调用
canScrollHorizontally
。如果需要支持较旧的API,则需要在ViewPager中实现解决方法。 Here is an example.