android - ListView animation with images and text that runs on Froyo -
i'd implement listview animation imageview on left , text on right , i'm using adapter gives listview animations, , they're awesome, i'd know how can modify class, particularly, adapter show listview imageview on left. here's class:
public class post extends sherlockactivity implements pulltorefreshattacher.onrefreshlistener, onitemlongclicklistener, onitemclicklistener { private pulltorefreshattacher mpulltorefreshattacher; private listview listview; private displaymetrics metrics; actionmode mmode; animation animation; intent i; @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); metrics = new displaymetrics(); getwindowmanager().getdefaultdisplay().getmetrics(metrics); sessioncheck(); } private void sessioncheck() { // todo auto-generated method stub session session = session.getactivesession(); if (session != null && session.isopened()) { // user's data listview = new listview(this); listview.setfadingedgelength(0); arraylist<string> strings = new arraylist<string>(); (int = 0; < 100; i++) { strings.add("that's list number " + (i + 1)); } mainadapter madapter = new mainadapter(this, strings, metrics); listview.setadapter(madapter); listview.setonitemlongclicklistener(this); listview.setonitemclicklistener(this); setcontentview(listview); pulltorefresh(); } else { toast.maketext(getapplicationcontext(), "please log in first", toast.length_long).show(); = new intent(getapplicationcontext(), startbase.class); startactivity(i); } } private void pulltorefresh() { // todo auto-generated method stub pulltorefreshattacher.options ptroptions = new pulltorefreshattacher.options(); ptroptions.refreshscrolldistance = 0.6f; ptroptions.headerlayout = r.layout.customised_header; ptroptions.headertransformer = new customisedheadertransformer(); mpulltorefreshattacher = pulltorefreshattacher.get(this, ptroptions); pulltorefreshattacher.viewdelegate handler = new abslistviewdelegate(); mpulltorefreshattacher.addrefreshableview(listview, handler, this); } @override public void onrefreshstarted(view view) { new asynctask<void, void, void>() { @override protected void doinbackground(void... params) { try { thread.sleep(3000); } catch (interruptedexception e) { e.printstacktrace(); } return null; } @override protected void onpostexecute(void result) { super.onpostexecute(result); // notify pulltorefreshattacher refresh has finished mpulltorefreshattacher.setrefreshcomplete(); } }.execute(); } static class customisedheadertransformer extends pulltorefreshattacher.headertransformer { private view mheaderview; private textview mmaintextview; private textview mprogresstextview; @override public void onviewcreated(activity activity, view headerview) { mheaderview = headerview; mmaintextview = (textview) headerview.findviewbyid(r.id.ptr_text); mprogresstextview = (textview) headerview .findviewbyid(r.id.ptr_text_secondary); } @override public void onreset() { mmaintextview.setvisibility(view.visible); mmaintextview.settext(r.string.pull_to_refresh_pull_label); mprogresstextview.setvisibility(view.gone); mprogresstextview.settext(""); } @override public void onpulled(float percentagepulled) { mprogresstextview.setvisibility(view.visible); mprogresstextview .settext(math.round(100f * percentagepulled) + "%"); } @override public void onrefreshstarted() { mmaintextview.settext(r.string.pull_to_refresh_refreshing_label); mprogresstextview.setvisibility(view.gone); } @override public void onreleasetorefresh() { mmaintextview.settext(r.string.pull_to_refresh_release_label); } @override public void onrefreshminimized() { // in header transformer, ignore call } @override public boolean showheaderview() { final boolean changevis = mheaderview.getvisibility() != view.visible; if (changevis) { mheaderview.setvisibility(view.visible); } return changevis; } @override public boolean hideheaderview() { final boolean changevis = mheaderview.getvisibility() != view.gone; if (changevis) { mheaderview.setvisibility(view.gone); } return changevis; } } @override public boolean oncreateoptionsmenu(menu menu) { menuinflater inflater = getsupportmenuinflater(); inflater.inflate(r.menu.main, menu); submenu submenu1 = menu.addsubmenu("categories"); submenu1.add(0, 1, menu.none, "one"); submenu1.add(0, 2, menu.none, "two"); submenu1.add(0, 3, menu.none, "three"); submenu1.add(0, 4, menu.none, "four"); submenu1.add(0, 5, menu.none, "five"); submenu1.add(0, 6, menu.none, "six"); menuitem submenu1item = submenu1.getitem(); submenu1item.seticon(android.r.drawable.ic_dialog_info); submenu1item.setshowasaction(menuitem.show_as_action_always | menuitem.show_as_action_with_text); return super.oncreateoptionsmenu(menu); } @override public boolean onoptionsitemselected(menuitem item) { switch (item.getitemid()) { case 1: toast.maketext(getapplicationcontext(), "that's selected", toast.length_long).show(); break; case 2: toast.maketext(getapplicationcontext(), "that's selected", toast.length_long).show(); break; case 3: toast.maketext(getapplicationcontext(), "that's selected", toast.length_long).show(); break; case 4: toast.maketext(getapplicationcontext(), "that's selected", toast.length_long).show(); break; case 5: toast.maketext(getapplicationcontext(), "that's selected", toast.length_long).show(); break; case 6: toast.maketext(getapplicationcontext(), "that's selected", toast.length_long).show(); break; case r.id.action_account: = new intent(getapplicationcontext(), account.class); startactivity(i); break; case r.id.action_logout: toast.maketext(getapplicationcontext(), "working on this...", toast.length_long).show(); break; } return super.onoptionsitemselected(item); } public class mainadapter extends arrayadapter<string> { private context context; private layoutinflater minflater; private arraylist<string> strings; private displaymetrics metrics_; private class holder { public textview textview; } public mainadapter(context context, arraylist<string> strings, displaymetrics metrics) { super(context, 0, strings); this.context = context; this.minflater = (layoutinflater) this.context .getsystemservice(context.layout_inflater_service); this.strings = strings; this.metrics_ = metrics; } @override public view getview(final int position, view convertview, viewgroup parent) { final string str = this.strings.get(position); final holder holder; if (convertview == null) { convertview = minflater.inflate( android.r.layout.simple_list_item_1, null); convertview.setbackgroundcolor(0xff202020); holder = new holder(); holder.textview = (textview) convertview .findviewbyid(android.r.id.text1); holder.textview.settextcolor(0xffffffff); holder.textview.setbackgroundresource(r.drawable.list_selector); convertview.settag(holder); } else { holder = (holder) convertview.gettag(); } holder.textview.settext(str); animation = animation = animationutils.loadanimation(context, r.anim.push_left_in); animation.setduration(200); convertview.startanimation(animation); animation = null; return convertview; } } private final class anactionmodeofepicproportions implements actionmode.callback { @override public boolean oncreateactionmode(actionmode mode, menu menu) { menu.add("one").seticon(android.r.drawable.ic_dialog_info) .setshowasaction(menuitem.show_as_action_if_room); menu.add("two").seticon(android.r.drawable.ic_dialog_info) .setshowasaction(menuitem.show_as_action_if_room); menu.add("three").seticon(android.r.drawable.ic_dialog_info) .setshowasaction(menuitem.show_as_action_if_room); menu.add("four").seticon(android.r.drawable.ic_dialog_info) .setshowasaction(menuitem.show_as_action_if_room); menu.add("five").seticon(android.r.drawable.ic_dialog_info) .setshowasaction(menuitem.show_as_action_if_room); menu.add("six").seticon(android.r.drawable.ic_dialog_info) .setshowasaction(menuitem.show_as_action_if_room); return true; } @override public boolean onprepareactionmode(actionmode mode, menu menu) { return false; } @override public boolean onactionitemclicked(actionmode mode, menuitem item) { toast.maketext(getapplicationcontext(), "got click: " + item, toast.length_short).show(); mode.finish(); return true; } @override public void ondestroyactionmode(actionmode mode) { } } @override public boolean onitemlongclick(adapterview<?> arg0, view arg1, int arg2, long arg3) { // todo auto-generated method stub mmode = startactionmode(new anactionmodeofepicproportions()); return false; } @override public void onitemclick(adapterview<?> arg0, view arg1, int arg2, long arg3) { // todo auto-generated method stub toast.maketext(getapplicationcontext(), "list item selected", toast.length_long).show(); } } i've copy pasted :-) adapter you're looking mainadapter...way down there. please me out.
you should modify part:
if (convertview == null) { convertview = minflater.inflate(android.r.layout.simple_list_item_1, null); convertview.setbackgroundcolor(0xff202020); holder = new holder(); holder.textview = (textview) convertview.findviewbyid(android.r.id.text1); holder.textview.settextcolor(0xffffffff); holder.textview.setbackgroundresource(r.drawable.list_selector); convertview.settag(holder); } else { holder = (holder) convertview.gettag(); } so, android.r.layout.simple_list_item_1 layout used list items. contains 1 textview. add imageview should use custom list item layout, example one:
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical" android:minheight="?android:attr/listpreferreditemheight"> <imageview android:id="@+id/pic" android:layout_width="48dp" android:layout_height="48dp" android:src="@drawable/your_custom_image" android:scaletype="centercrop"/> <textview android:id="@+id/text" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:layout_marginleft="8dp"/> </linearlayout> put in xml file res\layout directory , name custom_list_item.xml. replace android.r.layout.simple_list_item_1 r.layout.custom_list_item , android.r.id.text1 r.id.text in code.
thats all! animation stays same.
if want change image each list item should:
- add
imageview imageviewfieldholderclass add
holder.imageview = (imageview) convertview.findviewbyid(r.id.pic);after
holder.textview.setbackgroundresource(r.drawable.list_selector);add
holder.imageview.setimage(r.drawable.my_drawable);after
holder.textview.settext(str);
change r.drawable.my_drawable custom drawable if needed.
Comments
Post a Comment