2015-01-25 13 views
5

Używam biblioteki Picasso w moim bieżącym projekcie http://square.github.io/picasso/. Wszystko działa dobrze, ale po prostu nie mogę wymyślić, jak zaimplementować Pinch Zoom dla wszystkich obrazów ładowanych z adresu URL. Szczerze mówiąc nie wiem nawet, gdzie umieścić onClickListener. Moja aplikacja ma kilka fragmentów, a każdy z nich ma 2 Tabs najpierw Tab ma ListView a drugi tab ma kilka zdjęć wyświetlanych w GridView:Jak zaimplementować Pinch Zoom w bibliotece Picasso?

Bmw.java

public class Bmw2 extends Fragment { 

    @Override 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View rootView = inflater.inflate(com.zenyt.R.layout.bmw2, container, false); 

     GridView gv = (GridView) rootView.findViewById(R.id.grid_view); 
     gv.setAdapter(new com.zenyt.SampleGridViewAdapter(getActivity())); 
     gv.setOnScrollListener(new SampleScrollListener(getActivity())); 


     return rootView; 
    } 

SampleGridViewAdapter

public final class SampleGridViewAdapter extends BaseAdapter { 
    private final Context context; 
    private final List<String> urls = new ArrayList<String>(); 

    public SampleGridViewAdapter(Context context) { 
     this.context = context; 

     // Ensure we get a different ordering of images on each run. 
     Collections.addAll(urls, Data.URLS); 
     Collections.shuffle(urls); 

    } 

    @Override public View getView(int position, View convertView, ViewGroup parent) { 
     SquaredImageView view = (SquaredImageView) convertView; 
     if (view == null) { 
      view = new SquaredImageView(context); 
      view.setScaleType(CENTER_CROP); 
     } 

     // Get the image URL for the current position. 
     String url = getItem(position); 

     // Trigger the download of the URL asynchronously into the image view. 
     Picasso.with(context) // 
       .load(url) // 
       .placeholder(R.drawable.placeholder) // 
       .error(R.drawable.error) // 
       .fit() // 
       .tag(context) // 
       .into(view); 

     return view; 
    } 

    @Override public int getCount() { 
     return urls.size(); 
    } 

    @Override public String getItem(int position) { 
     return urls.get(position); 
    } 

    @Override public long getItemId(int position) { 
     return position; 
    } 
} 

Data.java

final class Data { 
    static final String BASE = "http://www.hdcarwallpapers.com/walls/"; 
    static final String BASE2 = "http://www3.cellsea.com//content/wallpaper/"; 
    static final String EXT = ".jpg"; 
    static final String[] URLS = { 
      BASE + "prior_design_audi_r8_gt850-wide" + EXT, 
      BASE + "2015_audi_rs6_avant_exclusive-wide" + EXT, 
      BASE + "2015_audi_tt_coupe_quattro-wide" + EXT, 
      BASE + "2015_audi_tt_coupe_quattro-wide" + EXT, 
      BASE + "2014_audi_prologue_concept_4-wide" + EXT, 
      BASE2 + "2010/WP4ce483c6efa9d" + EXT, 

    }; 

    private Data() { 
     // No instances. 
    } 
} 

Przepraszamy za mój angielski.

Odpowiedz

7

Biblioteka Picassa służy tylko do ładowania obrazów z sieci.

Musisz skierować swoją prośbę do innej biblioteki, takiej jak PhotoView lub do dowolnej innej, która obsługuje akcje na obrazach.

+0

Próbowałem od wielu godzin, aby zaimplementować PhotoView w moim projekcie, ale bez powodzenia. To nie jest takie proste, jak w przypadku Picassa (skopiuj słoik) i gotowe. Czy możesz mi trochę pomóc? – Alec

+0

EDYCJA. Znalazłem bibliotekę PhotoView 1.2.3 i dodałem ją do mojego projektu. Eksperymentuję z tym teraz, ciągle dostaję błąd, gdy szczypię obraz 'java.lang.ArrayIndexOutOfBoundsException: length = 1; index = 1' – Alec

+0

Wiem, że to stary post, ale możesz spróbować użyć https://github.com/davemorrissey/subsampling-scale-image-view – Avijeet

2
PhotoViewAttacher photoViewAttacher; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 


    ImageView imageView = (ImageView) findViewById(R.id.imageView); 

    Picasso.with(this) 
      .load("http://easyway-ev.xyz/images/1.png") 
      .into(imageView);//Regular 
    photoViewAttacher = new PhotoViewAttacher(imageView);} 

to jest moja odpowiedź, biorę Picasso i po użyłem PhotoView, także ten film jak synchronizacja PhotoView enter link description here Mam nadzieję pomóc!