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