【问题标题】:implementing pinch Zoom using ViewPager使用 ViewPager 实现捏缩放
【发布时间】:2012-10-04 12:29:04
【问题描述】:

我正在使用 ViewPager 从远程服务器检索图像。一切运行良好,但问题是我不知道如何实现捏放大/缩小功能。我的代码在下面

public class ImagePagerActivity extends BaseActivity {

    private ViewPager pager;

    private DisplayImageOptions options;

    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.ac_image_pager);
    Bundle bundle = getIntent().getExtras();
    String[] imageUrls = bundle.getStringArray(Extra.IMAGES);
    int pagerPosition = bundle.getInt(Extra.IMAGE_POSITION, 0);

    options = new DisplayImageOptions.Builder()
                .showImageForEmptyUri(R.drawable.image_for_empty_url)
                .cacheOnDisc()
                .imageScaleType(ImageScaleType.IN_SAMPLE_INT)
                .build();

    pager = (ViewPager) findViewById(R.id.pager);
    pager.setAdapter(new ImagePagerAdapter(imageUrls));
    pager.setCurrentItem(pagerPosition);

    }

    protected void onStop() {
    imageLoader.stop();
    super.onStop();
    }

    private class ImagePagerAdapter extends PagerAdapter {

    private String[] images;
    private LayoutInflater inflater;

    ImagePagerAdapter(String[] images) {
    this.images = images;
    inflater = getLayoutInflater();
    }

    public void destroyItem(View container, int position, Object object) {
    ((ViewPager) container).removeView((View) object);
    }

    public void finishUpdate(View container) {
    }

    public int getCount() {
    return images.length;
    }

    public Object instantiateItem(View view, int position) {
                final View imageLayout = inflater.inflate(R.layout.item_pager_image, null);
                final ImageView imageView = (ImageView) imageLayout.findViewById(R.id.image);
                final ProgressBar spinner = (ProgressBar) imageLayout.findViewById(R.id.loading);

    imageLoader.displayImage(images[position], imageView, options, new ImageLoadingListener() {

    public void onLoadingStarted() {
    spinner.setVisibility(View.VISIBLE);
    }


    public void onLoadingFailed(FailReason failReason) {
    String message = null;
    switch (failReason) {
    case IO_ERROR:
    message = "Input/Output error";
    break;
    case OUT_OF_MEMORY:
    message = "Out Of Memory error";
    break;
    case UNKNOWN:
    message = "Unknown error";
    break;
    }
    Toast.makeText(ImagePagerActivity.this, message, Toast.LENGTH_SHORT).show();

    spinner.setVisibility(View.GONE);
                              imageView.setImageResource(android.R.drawable.ic_delete);
                    }


    public void onLoadingComplete(Bitmap loadedImage) {
    spinner.setVisibility(View.GONE);
    Animation anim = AnimationUtils.loadAnimation(ImagePagerActivity.this, R.anim.fade_in);
    imageView.setAnimation(anim);
    anim.start();
    }

    public void onLoadingCancelled() {
    // Do nothing
    }
    });

    ((ViewPager) view).addView(imageLayout, 0);
    return imageLayout;
    }

    public boolean isViewFromObject(View view, Object object) {
    return view.equals(object);
    }

    public void restoreState(Parcelable state, ClassLoader loader) {
    }
    public Parcelable saveState() {
    return null;
    }

    public void startUpdate(View container) {
    }
    }
    }

【问题讨论】:

  • 这似乎是一个基本功能,如果有图像就应该继承。不明白为什么谷歌没有在图像视图中提供此选项

标签: android zooming android-viewpager pinchzoom


【解决方案1】:

如果您的 viewpager 使用的是 imageView,那么您可以使用 touchImageView

https://github.com/MikeOrtiz/TouchImageView/blob/master/src/com/example/touch/TouchImageView.java

只需用这个自定义视图替换您当前的图像视图。祝你好运

【讨论】:

  • 谢谢,这很有帮助 :) 会尝试更新你的结果。
  • 这似乎大部分都有效,尽管寻呼机的动作似乎与 touchimageview 的动作发生冲突,并且尝试捏合缩放也会开始翻页。一旦页面开始翻页,捏缩放动作就结束了。需要多次仔细尝试才能真正成功缩放。
  • 它不像全屏那样缩放。但是缩放控件工作正常。你能帮我如何全屏缩放吗?
  • 上述链接失效了,谁能更新一下链接
猜你喜欢
  • 2021-09-04
  • 2015-07-22
  • 2018-03-05
  • 1970-01-01
  • 2013-08-03
  • 1970-01-01
  • 2014-01-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多