Hello everyone, today is mainly to achieve the imitation of the general public Review of the Guide page and the homepage and the implementation of the city positioning, mainly using Viewpager+fragment+sharedpreferences, the first open the program appears the boot page, open the Skip Guide page again, This is also commonly used in general application of the basic architectural approach. Let's look at the final implementation results such as:
650) this.width=650; "src=" Http://s3.51cto.com/wyfs02/M00/6E/69/wKioL1V72CbxovjVAAHh5OLjy3g970.gif "title=" 8.gif " alt= "Wkiol1v72cbxovjvaahh5oljy3g970.gif"/>
1. layout file description
1) Welcome page layout File Welcome.xml
2) boot page layout file Welcome_guide.xml
3) Home layout file Main_home.xml
4) Group Purchase layout file Main_tuan.xml
5) Find layout file Main_search.xml
6) My layout file Main_my.xml
Layout file content, layout code is not affixed out, please see the details of the annex source.
2.Activity description
1) Welcome page activity (welcomestartactivity)
Package com.sunny.dianping_client;import java.util.timer;import java.util.timertask;import com.sunny.dianping_client.utils.SharedUtils;import android.app.Activity;import android.content.intent;import android.os.bundle;import android.os.handler;import android.os.message;public class welcomestartactivity extends activity {@ Overrideprotected void oncreate (bundle savedinstancestate) {super.oncreate ( Savedinstancestate); Setcontentview (r.layout.welcome);//use Handler to implement delay jump//new handler (new Handler.callback () {////@Override//public boolean handlemessage (message msg) {//// Page Jump//startactivity (new intent (Getapplicationcontext (), mainactivity.class));//return false;//}//}). sendemptymessagedelayed (0, 3000);//indicates task delay of three seconds//use Java Timer to implement delay jump timer timer = New timer (); Timer.schedule (New task (), 3000);//timer delay the way to perform the task}class task extends timertask{@Overridepublic void run () {// implement page Jump//Not first start if ( Sharedutils.getwelcomeflag (Getbasecontext ())) {startactivity (New intent (GetBaseContext (), Mainactivity.class));} Else { startactivity (New intent (welcomestartactivity.this, Welcomeguideactivity.class)); //Save Access record Sharedutils.putwelcomeflag (Getbasecontext (), true);} Finish ();}}}
2) boot page activity (welcomeguideactivity)
package com.sunny.dianping_client;import java.util.arraylist;import java.util.list;import com.lidroid.xutils.viewutils;import com.lidroid.xutils.view.annotation.viewinject;import com.lidroid.xutils.view.annotation.event.onclick;import android.app.activity;import android.content.context;import android.content.intent;import android.os.bundle;import android.support.v4.view.pageradapter;import android.support.v4.view.viewpager;import android.support.v4.view.viewpager.onpagechangelistener;import android.view.view;import android.view.viewgroup;import android.widget.button;import android.widget.imageview;public class welcomeguideactivity extends activity {@ViewInject (r.id.btn_welcome_guide) Private Button mComeIn; @ViewInject (R.id.id_welcome_pager) private viewpager mviewpager;private List<View> list; @Overrideprotected void oncreate (bundle savedinstancestate) {// TODO Auto-generated method stub super.oncreate (savedinstancestate); Setcontentview ( R.layout.welcome_guide); Viewutils.inject (this); Initviewpager ();} @OnClick (r.id.btn_welcome_guide) Public void click (View view) { // Implement the page Jump startactivity (new intent (Getbasecontext (), Mainactivity.class)); finish ();} //Initialize Viewpager public void initviewpager () { list = new ArrayList<View> (&NBSP;&NBSP;&NBSP;&NBSP;IMAGEVIEW&NBSP;IV); = new imageview (this); iv.setimageresource (r.drawable.guide_01); list.add (iv); imageview iv1 = new imageview (This) ; iv1.setimageresource (r.drawable.guide_02); list.add (IV1); &nBsp;imageview iv2 = new imageview (this); iv2.setimageresource ( R.DRAWABLE.GUIDE_03); list.add (IV2); mviewpager.setadapter (new mypageradapter ()) //monitor Viewpager slide effect Mviewpager.setonpagechangelistener (New onpagechangelistener () {//page card is selected effect @overridepublic void onpageselected (int arg0) {if (arg0==2) {mcomein.setvisibility (view.visible);} Else {mcomein.setvisibility (View.gone);}} @Overridepublic void onpagescrolled (INT&NBSP;ARG0,&NBSP;FLOAT&NBSP;ARG1,&NBSP;INT&NBSP;ARG2) {} @Overridepublic void onpagescrollstatechanged (int arg0) {}); } //defining adapters for Viewpager class MyPagerAdapter extends pageradapter{ //calculation requires how many items display @overridepublic int getcount () {return list.Size ();} @Overridepublic boolean isviewfromobject (VIEW&NBSP;ARG0,&NBSP;OBJECT&NBSP;ARG1) {return ARG0==ARG1;} Method @overridepublic object instantiateitem to initialize the item instance (viewgroup container, int Position) {container.addview (List.get (position)); Return list.get (position);} Item Destruction Method @overridepublic void destroyitem (viewgroup container, int position, Object object) {/** * The method of destroying item does not use the system definition to destroy the item, but instead uses our own definition to remove a View object from the Viewpager *///super.destroyitem (Container, position, object); Container.removeview (List.get (position));} }}
3) Main Page activity (mainactivity)
package com.sunny.dianping_client;import com.lidroid.xutils.viewutils;import com.lidroid.xutils.view.annotation.viewinject;import com.lidroid.xutils.view.annotation.event.onclick; Import com.sunny.dianping_client.fragment.fragmenthome;import com.sunny.dianping_ client.fragment.fragmentmy;import com.sunny.dianping_client.fragment.fragmentsearch;import Com.sunny.dianping_client.fragment.fragmenttuan;import android.os.bundle;import android.app.activity ;import android.support.v4.app.fragment;import android.support.v4.app.fragmentactivity;import android.support.v4.app.fragmentmanager;import android.support.v4.app.fragmenttransaction;import android.view.menu;import android.view.view;import android.view.view.onclicklistener;import android.view.window;import android.widget.button;import android.widget.radiobutton;import Android.widget.radiogroup;import android.widget.radiogroup.oncheckedchangelistener;import android.widget.toast;public class mainactivity extends fragmentactivity implements oncheckedchangelistener{@ViewInject (r.id.main_bottom_tabs) private radiogroup mgroup; @ViewInject (r.id.main_home) private radiobutton main_home;private fragmentmanager fragmentmanager; @Overrideprotected void oncreate (bundle savedinstancestate ) {super.oncreate (savedinstancestate); Requestwindowfeature (Window.feature_no_title); SetContentView ( R.layout.activity_main); Viewutils.inject (this);//Initialize Fragmentmanagerfragmentmanager = getsupportfragmentmanager ();// Set Default Check main_home.setchecked (true); Mgroup.setoncheckedchangelistener (this); Changefragment (New fragmenthome ( ), false);} @Overridepublic void oncheckedchanged (Radiogroup group, int checkedid) {// Select a different fragmentswitch (checkedid) {case r.id.main_home://home changefragment (New FragmentHome () , true); break;case r.id.main_tuan://Group Buy Changefragment (New fragmenttuan (), true); break;case r.id.main_search://found Changefragment (New fragmentsearch (), true); break;case r.id.main_my:/ /My Changefragment (New fragmentmy (), true); break;default:break;}} Switch between different fragmentpublic void changefragment (Fragment fragment,boolean isinit) {// Open things fragmenttransaction begintransaction = fragmentmanager.begintransaction (); Begintransaction.replace (r.id.main_content, fragment);if (!isinit) { //plus the code fragment there will be no ghosting effect begintransaction.addtobackstack (null);} Begintransaction.commit ();}}
3. Implementation of main interface fragment
1) Home fragment (Fragmenthome)
package com.sunny.dianping_client.fragment;import java.util.list;import com.lidroid.xutils.viewutils;import com.lidroid.xutils.view.annotation.viewinject;import Com.sunny.dianping_client. R;import com.sunny.dianping_client.utils.sharedutils;import android.support.v4.app.fragment;import android.content.context;import android.content.intent;import android.location.address;import android.location.Geocoder;import android.location.Location;import android.location.locationlistener;import android.location.locationmanager;import android.provider.settings;import android.os.bundle;import android.os.handler;import android.os.message;import android.util.log;import android.view.layoutinflater;import Android.view.view;import android.view.viewgroup;import android.widget.textview;public class fragmenthome extends fragment implements locationlistener{@ViewInjecT (r.id.main_top_city) private textview mtopcity;private string cityname;private locationmanager locationmanager; @Overridepublic view oncreateview (Layoutinflater inflater, viewgroup container,bundle savedinstancestate) {View view = Inflater.inflate (R.layout.main_home, container, false); Viewutils.inject (This, view);//Get Data and display Mtopcity.settext (Sharedutils.getcityname (Getactivity ())); return view;} @Overridepublic void onstart () {super.onstart ();// Check if the GPS is turned on Checkgpsisopen ();} Check if GPS is turned on private void checkgpsisopen () {// get current Locationmanager object locationmanager = (Locationmanager) getactivity () Getsystemservice (context.location_service); Boolean isopen = locationmanager.isproviderenabled (Locationmanager.gps_provider);if (!isOpen) {Intent intent = new intent (); Intent.setaction (Settings.action_location_source_settings); Intent.setflags (Intent.flag_activity_new_task); Startactivityforresult (intent, 0);} Start positioning startlocation ();} Using GPS positioning Method Private void startlocation () {locationmanager.requestlocationupdates ( Locationmanager.gps_provider, 2000, 10, this);} Receive and Process message Private handler handler = new handler (New handler.callback () {@ Overridepublic boolean handlemessage (message msg) {if (msg.what==1) { Mtopcity.settext (CityName);} Return false;}); /Get the latitude and longitude of the corresponding location and locate the city Private void updatewithnewlocation (location location) {double lat = 0.0,lng = 0.0;if (Location!=null) {lat = location.getlatitude (); LNG = location.getlongitude (); LOG.I ("TAG", "longitude is" +lat+ "latitude is" +lng ");} else {cityname = "Unable to obtain city information";} Get address by Latitude list<address> list = null; Geocoder geocoder = new geocoder (Getactivity ()); Try {list = geocoder.getfromlocation (lat, lng, 2);} catch (exception e) {// todo: handle exceptione.printstacktrace ();} if (List!=null&&list.size () >0) {for (int i = 0; i < list.size (); i++) {address address = list.get (i);cityname = Address.getlocality ();//Get the city}}//send an empty message handler.sendemptymessage (1);} Location information Change Execution method @overridepublic void onlocationchanged (location location) {// Update the current location information updatewithnewlocation;} Status information Change @overridepublic void onstatuschanged (string provider, int status, bundle extras) {} @Overridepublic void onproviderenabled (String provider) {}@ Overridepublic void onproviderdisabled (String provider) {} @Overridepublic void OnDestroy () {super.ondestroy ();//Save the City Sharedutils.putcityname (Getactivity (), cItyname);//Stop positioning stoplocation ();} Stop positioning private void stoplocation () {locationmanager.removeupdates (this);}}
2) Group purchase page fragment (Fragmenttuan)
Package Com.sunny.dianping_client.fragment;import com.sunny.dianping_client. R;import Android.support.v4.app.fragment;import Android.os.bundle;import Android.view.layoutinflater;import Android.view.view;import Android.view.viewgroup;public class Fragmenttuan extends Fragment {@Overridepublic view Oncreateview (Layoutinflater inflater, ViewGroup container,bundle savedinstancestate) {return inflater.inflate ( R.layout.main_tuan, container, false);}}
3) discovery page fragment (Fragmentsearch)
Package Com.sunny.dianping_client.fragment;import com.sunny.dianping_client. R;import Android.support.v4.app.fragment;import Android.os.bundle;import Android.view.layoutinflater;import Android.view.view;import Android.view.viewgroup;public class Fragmentsearch extends Fragment {@Overridepublic view Oncreateview (Layoutinflater inflater, ViewGroup container,bundle savedinstancestate) {return inflater.inflate ( R.layout.main_search, container, false);}}
4) my page fragment (fragmentmy)
Package Com.sunny.dianping_client.fragment;import com.sunny.dianping_client. R;import Android.os.bundle;import Android.support.v4.app.fragment;import Android.view.layoutinflater;import Android.view.view;import Android.view.viewgroup;public class Fragmentmy extends Fragment {@Overridepublic view Oncreateview (Layoutinflater inflater, ViewGroup container,bundle savedinstancestate) {return inflater.inflate ( R.layout.main_my, container, false);}}
4. Using sharedpreferences to implement tag write and read
Package com.sunny.dianping_client.utils;import android. r.bool;import android.content.context;import android.content.sharedpreferences.editor;import android.widget.edittext;/** * Write read * @author sunnyhack */public class implementation Tag SharedUtils {private static final String FILE_NAME = "Dianping"; private static final string mode_name = "Welcome";// Gets the flag tag value public Static boolean getwelcomeflag (Context context) {return context.getsharedpreferences ( File_name, context. mode_private). Getboolean (Mode_name, false);} Write flag flag value Public static void putwelcomeflag (context context, boolean IsFirst) {editor editor = context.getsharedpreferences (File_name,context. mode_append). Edit (); Editor.putboolean (Mode_name, isfirst); Editor.commit ();} writes a string type of data public static&nBsp;void putcityname (Context context, string cityname) {editor editor = context.getsharedpreferences (file_name,context.mode_append). Edit (); Editor.putstring ("CityName", CityName); Editor.commit ();} Gets the value of String type Public static string getcityname (context context) {return Context.getsharedpreferences (file_name, context.mode_private). getString ("CityName", "select City");}}
5. Color change of the main interface button picture and text (mainly using selectors implementation)
1) Font Color Picker Main_color_selector.xml
2) Home Image Color Selector main_home_selector.xml
2) Buy Photo color selector Main_tuan_selector.xml
2) found picture color Picker main_search_selector.xml
2) My picture color picker main_my_selector.xml
The above is the Guide page and the implementation of the main interface, recorded for everyone to share, Exchange learning ~ ~
Source: http://download.csdn.net/detail/fysl1314/8802707
This article is from the "Sunnygeek Technology blog" blog, please be sure to keep this source http://sunnygeek.blog.51cto.com/9485654/1661571
Android Imitation Volkswagen reviews the implementation of the Guide page (viewpage) + main Page (Fragment)