2012-10-14 7 views
8

ViewPager를 사용하여 원격 서버에서 이미지를 검색하고 있습니다. 모든 것이 잘 작동하지만 문제는 핀치 확대/축소 기능을 구현하는 방법을 모른다는 것입니다. 당신의 viewpager는 다음 ViewPager를 사용하여 핀치 확대/축소

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

그냥이 사용자 지정보기에 현재 이미지 뷰를 대체 touchImageView

를 사용할 수있는 이미지 뷰를 사용하는 경우 내 코드

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

전체 화면처럼 확대되지 않습니다. 그러나 줌 컨트롤이 잘 작동합니다. 전체 화면으로 확대하는 방법을 도와 줄 수 있습니까? –

관련 문제