2012-10-14 10 views
8

Używam ViewPagera do pobierania obrazów ze zdalnego serwera. Wszystko działa dobrze, ale problemem jest to, że nie wiem jak zaimplementować szczyptę funkcji powiększania/pomniejszania. Moje kodu jest poniżejImplementacja szczypania Powiększanie przy użyciu 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

To wydaje się podstawową funkcją, która powinna zostać odziedziczona, jeśli istnieje obraz. Nie rozumiem, dlaczego Google nie udostępnił tej opcji jako opcji w widoku obrazu. – JPM

Odpowiedz

6

jeśli viewpager używa ImageView następnie można użyć touchImageView

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

prostu zastąpić bieżący ImageView z tego widoku niestandardowego. goodluck

+0

Dzięki, to było całkiem pomocne :) Postaram się zaktualizować Twój wynik. – iabhi

+5

Wydaje się, że to głównie działa, chociaż akcja pager'a wydaje się walczyć z działaniami touchimageview, a próba uszczypnięcia-powiększenia również zacznie przewracać stronę. A gdy strona zacznie się obracać, akcja przybliżania i przycinania się kończy. Wymagające wielu starannych prób naprawdę skutecznego powiększenia. – directedition

+0

Nie jest powiększany jak pełny ekran. Ale sterowanie powiększeniem działa dobrze. Czy możesz mi pomóc, jak powiększyć go na pełnym ekranie? –

Powiązane problemy