android - Out of memory Exception using Picasso -
i need show images in view pager. show image in image view use picasso library. resize image using screen size.
in activity in oncreate got view pager:
mpager=(viewpager)findviewbyid(r.id.pager); mpageradapter = new screenslidepageradapter(); mpager.setadapter(mpageradapter);
then device size:
display display = getwindowmanager().getdefaultdisplay(); point size = new point(); display.getsize(size); screenwidth = size.x; screenheight = size.y; and here page adapter:
private class screenslidepageradapter extends pageradapter { photoviewattacher attacher; @override public void destroyitem(view collection, int position, object o) { view view = (view) o; ((viewpager) collection).removeview(view); view = null; } @override public void finishupdate(view arg0) { // todo auto-generated method stub } @override public int getcount() { return constants.imageurls.size(); } @override public object instantiateitem(view context, int position) { layoutinflater ltinflater = getlayoutinflater(); view view = ltinflater.inflate(r.layout.page_fragment, null, false); final imageview imageview = (imageview)view.findviewbyid(r.id.image); attacher = new photoviewattacher(imageview); attacher.setzoomable(true); picasso.with(mainactivity.this).setindicatorsenabled(true); picasso.with(mainactivity.this) .load(constants.imageurls.get(position)) .resize(screenwidth, screenheight).centerinside() .into(imageview, new com.squareup.picasso.callback() { @override public void onsuccess() { if (attacher != null) { attacher.update(); } else { attacher = new photoviewattacher(imageview); } } @override public void onerror() { // todo auto-generated method stub int = 0; } }); ((viewpager) context).addview(view); return view; } @override public boolean isviewfromobject(view view, object object) { return view == ((view) object); } @override public void restorestate(parcelable arg0, classloader arg1) { // todo auto-generated method stub } @override public parcelable savestate() { // todo auto-generated method stub return null; } @override public void startupdate(view arg0) { // todo auto-generated method stub } } the problem when scroll 3 times first image last images not showing anymore , have out of memory in logs. please me!!!
i found problem. because every time created new view.
so next:
list= createlistofimages(); mpager=(viewpager)findviewbyid(r.id.pager); mpageradapter = new screenslidepageradapter(list); mpager.setadapter(mpageradapter); and adapter:
private class screenslidepageradapter extends pageradapter { list<view> pages; public screenslidepageradapter(list<view> pages){ this.pages=pages; } @override public void destroyitem(viewgroup container, int position, object object) { container.removeview(pages.get(position)); } @override public int getcount() { return constants.imageurls.size(); } @override public object instantiateitem(viewgroup container, int position) { log.i(tag,"show image "+position); view v = pages.get(position); container.addview(v); return v; } @override public boolean isviewfromobject(view view, object object) { return view == ((view) object); } @override public void restorestate(parcelable arg0, classloader arg1) { // todo auto-generated method stub } @override public parcelable savestate() { // todo auto-generated method stub return null; } } and of cource image next :
@override protected void ondestroy() { super.ondestroy(); (int i=0;i<constants.imageurls.size();i++){ imageview imageview = (imageview)list.get(i).findviewbyid(r.id.image); imageview.setimagedrawable(null); } }
Comments
Post a Comment