2012-10-14 10 views
8

ViewPagerを使用してリモートサーバから画像を取得しています。すべてうまくいっていますが、ピンチズームイン/アウト機能を実装する方法がわかりません。私のコードは、あなたのviewpagerはImageViewのを使用している場合、あなたはちょうどこのカスタムビューを使用して、現在のImageViewのを置き換えるtouchImageViewViewPagerを使用してピンチズームを実現

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

を使用することができます

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) { 
    } 
    } 
    } 
+1

イメージがある場合、継承する必要がある基本的な機能のようです。 Googleが画像ビューのオプションとしてこれを利用できるようにしていない理由を理解していない – JPM

答えて

6

を下回っています。 goodluck

+0

ありがとう、それはかなり役に立ちました:)結果を更新しようとします。 – iabhi

+5

ページャのアクションがtouchimageviewのアクションと戦っているように見えますが、ピンチズームをしようとするとページをめくることになりますが、これは主に動作しているようです。ページが回転し始めると、ピンチ・ズーム動作が終了します。本当に正常にズームするために複数の注意深い試行が必要です。 – directedition

+0

フルスクリーンのようにズームしていません。しかし、ズームコントロールは正常に動作します。フルスクリーンでズームする方法を教えてください。 –

関連する問題