2012-10-14 36 views
8

Tôi đang sử dụng ViewPager để truy xuất hình ảnh từ máy chủ từ xa. Mọi thứ đều hoạt động tốt, nhưng vấn đề là tôi không biết cách thực hiện chức năng phóng to/thu nhỏ pinch vào nó. Mã của tôi là dướithực hiện phóng to thu nhỏ bằng cách sử dụng 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) { 
    } 
    } 
    } 
+1

Điều này có vẻ giống như một chức năng cơ bản cần được kế thừa nếu có hình ảnh. Không hiểu tại sao Google không làm cho tính năng này sẵn có dưới dạng tùy chọn ở chế độ xem hình ảnh – JPM

Trả lời

6

nếu ViewPager bạn đang sử dụng một IMAGExem sau đó bạn có thể sử dụng touchImageView

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

chỉ cần thay thế ImageView hiện tại của bạn với giao diện tùy chỉnh này. goodluck

+0

Cảm ơn, điều đó khá hữu ích :) Sẽ thử và cập nhật kết quả cho bạn. – iabhi

+5

Điều này dường như chủ yếu là làm việc, mặc dù hành động của máy nhắn tin dường như đang chống lại hành động của touchimageview và cố gắng thu nhỏ cũng sẽ bắt đầu lật trang. Và sau khi trang bắt đầu chuyển, hành động thu nhỏ chụm sẽ kết thúc. Yêu cầu nhiều nỗ lực cẩn thận để thu phóng thành công thực sự. – directedition

+0

Nó không phóng to như toàn màn hình. Nhưng các điều khiển thu phóng hoạt động tốt. Bạn có thể giúp tôi làm thế nào để phóng to nó với toàn màn hình? –

Các vấn đề liên quan