1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > android自定义引导页 Android仿大众点评引导页(ViewPage)+主页面(Fragment)的实现

android自定义引导页 Android仿大众点评引导页(ViewPage)+主页面(Fragment)的实现

时间:2020-01-05 07:51:33

相关推荐

android自定义引导页 Android仿大众点评引导页(ViewPage)+主页面(Fragment)的实现

大家好,今天主要是实现仿大众点评引导页和主页面以及城市定位的实现,主要使用ViewPager+Fragment+SharedPreferences,实现了第一次打开程序出现引导页,再次打开跳过引导页,这也是一般应用常用的应用基本架构方式。下面首先来看最终实现效果如下图:

1.布局文件说明

1)欢迎页布局文件welcome.xml

2) 引导页布局文件welcome_guide.xml

3)首页布局文件main_home.xml

4)团购布局文件main_tuan.xml

5) 发现布局文件main_search.xml

6) 我的布局文件main_my.xml

布局文件内容较多,布局代码就不一一贴出来了,请看附件详细源码。

2.Activity说明

1)欢迎页Activity(WelcomeStartActivity)packagecom.sunny.dianping_client;

importjava.util.Timer;

importjava.util.TimerTask;

importcom.sunny.dianping_client.utils.SharedUtils;

importandroid.app.Activity;

importandroid.content.Intent;

importandroid.os.Bundle;

importandroid.os.Handler;

importandroid.os.Message;

publicclassWelcomeStartActivityextendsActivity{

@Override

protectedvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.welcome);

//使用Handler实现延时跳转

//newHandler(newHandler.Callback(){

//

//@Override

//publicbooleanhandleMessage(Messagemsg){

页面跳转

//startActivity(newIntent(getApplicationContext(),MainActivity.class));

//returnfalse;

//}

//}).sendEmptyMessageDelayed(0,3000);//表示任务延时三秒执行

//使用Java定时器实现延时跳转

Timertimer=newTimer();

timer.schedule(newTask(),3000);//定时器延时执行任务的方法

}

classTaskextendsTimerTask{

@Override

publicvoidrun(){

//实现页面的跳转

//不是第一次启动

if(SharedUtils.getWelcomeFlag(getBaseContext())){

startActivity(newIntent(getBaseContext(),MainActivity.class));

}else{

startActivity(newIntent(WelcomeStartActivity.this,WelcomeGuideActivity.class));

//保存访问记录

SharedUtils.putWelcomeFlag(getBaseContext(),true);

}

finish();

}

}

}

2) 引导页Activity(WelcomeGuideActivity)packagecom.sunny.dianping_client;

importjava.util.ArrayList;

importjava.util.List;

importcom.lidroid.xutils.ViewUtils;

importcom.lidroid.xutils.view.annotation.ViewInject;

importcom.lidroid.xutils.view.annotation.event.OnClick;

importandroid.app.Activity;

importandroid.content.Context;

importandroid.content.Intent;

importandroid.os.Bundle;

importandroid.support.v4.view.PagerAdapter;

importandroid.support.v4.view.ViewPager;

importandroid.support.v4.view.ViewPager.OnPageChangeListener;

importandroid.view.View;

importandroid.view.ViewGroup;

importandroid.widget.Button;

importandroid.widget.ImageView;

publicclassWelcomeGuideActivityextendsActivity{

@ViewInject(R.id.btn_welcome_guide)

privateButtonmComeIn;

@ViewInject(R.id.id_welcome_pager)

privateViewPagermViewPager;

privateListlist;

@Override

protectedvoidonCreate(BundlesavedInstanceState){

//TODO自动生成的方法存根

super.onCreate(savedInstanceState);

setContentView(R.layout.welcome_guide);

ViewUtils.inject(this);

initViewPager();

}

@OnClick(R.id.btn_welcome_guide)

publicvoidclick(Viewview){

//实现页面的跳转

startActivity(newIntent(getBaseContext(),MainActivity.class));

finish();

}

//初始化ViewPager

publicvoidinitViewPager(){

list=newArrayList();

ImageViewiv=newImageView(this);

iv.setImageResource(R.drawable.guide_01);

list.add(iv);

ImageViewiv1=newImageView(this);

iv1.setImageResource(R.drawable.guide_02);

list.add(iv1);

ImageViewiv2=newImageView(this);

iv2.setImageResource(R.drawable.guide_03);

list.add(iv2);

mViewPager.setAdapter(newMyPagerAdapter());

//监听ViewPager滑动效果

mViewPager.setOnPageChangeListener(newOnPageChangeListener(){

//页卡被选中的效果

@Override

publicvoidonPageSelected(intarg0){

if(arg0==2){

mComeIn.setVisibility(View.VISIBLE);

}else{

mComeIn.setVisibility(View.GONE);

}

}

@Override

publicvoidonPageScrolled(intarg0,floatarg1,intarg2){

}

@Override

publicvoidonPageScrollStateChanged(intarg0){

}

});

}

//定义ViewPager的适配器

classMyPagerAdapterextendsPagerAdapter{

//计算需要多少Items显示

@Override

publicintgetCount(){

returnlist.size();

}

@Override

publicbooleanisViewFromObject(Viewarg0,Objectarg1){

returnarg0==arg1;

}

//初始化Item实例的方法

@Override

publicObjectinstantiateItem(ViewGroupcontainer,intposition){

container.addView(list.get(position));

returnlist.get(position);

}

//Item销毁的方法

@Override

publicvoiddestroyItem(ViewGroupcontainer,intposition,Objectobject){

/**

*销毁Item的方法不使用系统定义销毁Item的方法,而是使用我们自己定义的形式,将一个View对象从ViewPager中移除

*/

//super.destroyItem(container,position,object);

container.removeView(list.get(position));

}

}

}

3) 主页面Activity(MainActivity)packagecom.sunny.dianping_client;

importcom.lidroid.xutils.ViewUtils;

importcom.lidroid.xutils.view.annotation.ViewInject;

importcom.lidroid.xutils.view.annotation.event.OnClick;

importcom.sunny.dianping_client.fragment.FragmentHome;

importcom.sunny.dianping_client.fragment.FragmentMy;

importcom.sunny.dianping_client.fragment.FragmentSearch;

importcom.sunny.dianping_client.fragment.FragmentTuan;

importandroid.os.Bundle;

importandroid.app.Activity;

importandroid.support.v4.app.Fragment;

importandroid.support.v4.app.FragmentActivity;

importandroid.support.v4.app.FragmentManager;

importandroid.support.v4.app.FragmentTransaction;

importandroid.view.Menu;

importandroid.view.View;

importandroid.view.View.OnClickListener;

importandroid.view.Window;

importandroid.widget.Button;

importandroid.widget.RadioButton;

importandroid.widget.RadioGroup;

importandroid.widget.RadioGroup.OnCheckedChangeListener;

importandroid.widget.Toast;

publicclassMainActivityextendsFragmentActivityimplementsOnCheckedChangeListener{

@ViewInject(R.id.main_bottom_tabs)

privateRadioGroupmGroup;

@ViewInject(R.id.main_home)

privateRadioButtonmain_home;

privateFragmentManagerfragmentManager;

@Override

protectedvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_NO_TITLE);

setContentView(R.layout.activity_main);

ViewUtils.inject(this);

//初始化FragmentManager

fragmentManager=getSupportFragmentManager();

//设置默认选中

main_home.setChecked(true);

mGroup.setOnCheckedChangeListener(this);

changeFragment(newFragmentHome(),false);

}

@Override

publicvoidonCheckedChanged(RadioGroupgroup,intcheckedId){

//选中不同的Fragment

switch(checkedId){

caseR.id.main_home://首页

changeFragment(newFragmentHome(),true);

break;

caseR.id.main_tuan://团购

changeFragment(newFragmentTuan(),true);

break;

caseR.id.main_search://发现

changeFragment(newFragmentSearch(),true);

break;

caseR.id.main_my://我的

changeFragment(newFragmentMy(),true);

break;

default:

break;

}

}

//切换不同的Fragment

publicvoidchangeFragment(Fragmentfragment,booleanisInit){

//开启事物

FragmentTransactionbeginTransaction=fragmentManager.beginTransaction();

beginTransaction.replace(R.id.main_content,fragment);

if(!isInit){

//加上该段代码Fragment就不会出现重影的效果

beginTransaction.addToBackStack(null);

}

mit();

}

}

3.主界面Fragment的实现

1)首页Fragment(FragmentHome)packagecom.sunny.dianping_client.fragment;

importjava.util.List;

importcom.lidroid.xutils.ViewUtils;

importcom.lidroid.xutils.view.annotation.ViewInject;

importcom.sunny.dianping_client.R;

importcom.sunny.dianping_client.utils.SharedUtils;

importandroid.support.v4.app.Fragment;

importandroid.content.Context;

importandroid.content.Intent;

importandroid.location.Address;

importandroid.location.Geocoder;

importandroid.location.Location;

importandroid.location.LocationListener;

importandroid.location.LocationManager;

importandroid.provider.Settings;

importandroid.os.Bundle;

importandroid.os.Handler;

importandroid.os.Message;

importandroid.util.Log;

importandroid.view.LayoutInflater;

importandroid.view.View;

importandroid.view.ViewGroup;

importandroid.widget.TextView;

publicclassFragmentHomeextendsFragmentimplementsLocationListener{

@ViewInject(R.id.main_top_city)

privateTextViewmTopcity;

privateStringcityName;

privateLocationManagerlocationManager;

@Override

publicViewonCreateView(LayoutInflaterinflater,ViewGroupcontainer,

BundlesavedInstanceState){

Viewview=inflater.inflate(R.layout.main_home,container,false);

ViewUtils.inject(this,view);

//获取数据并显示

mTopcity.setText(SharedUtils.getCityName(getActivity()));

returnview;

}

@Override

publicvoidonStart(){

super.onStart();

//检查GPS是否打开

checkGPSisOpen();

}

//检查Gps是否打开

privatevoidcheckGPSisOpen(){

//获取当前LocationManager对象

locationManager=(LocationManager)getActivity().getSystemService(Context.LOCATION_SERVICE);

booleanisOpen=locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);

if(!isOpen){

Intentintent=newIntent();

intent.setAction(Settings.ACTION_LOCATION_SOURCE_SETTINGS);

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

startActivityForResult(intent,0);

}

//开始定位

startLocation();

}

//使用GPS定位的方法

privatevoidstartLocation(){

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,2000,10,this);

}

//接收并处理消息

privateHandlerhandler=newHandler(newHandler.Callback(){

@Override

publicbooleanhandleMessage(Messagemsg){

if(msg.what==1){

mTopcity.setText(cityName);

}

returnfalse;

}

});

//获取对应位置的经纬度并且定位城市

privatevoidupdateWithNewLocation(Locationlocation){

doublelat=0.0,lng=0.0;

if(location!=null){

lat=location.getLatitude();

lng=location.getLongitude();

Log.i("TAG","经度是"+lat+"纬度是"+lng);

}else{

cityName="无法获取城市信息";

}

//通过经纬度获取地址

List

list=null;

Geocodergeocoder=newGeocoder(getActivity());

try{

list=geocoder.getFromLocation(lat,lng,2);

}catch(Exceptione){

//TODO:handleexception

e.printStackTrace();

}

if(list!=null&&list.size()>0){

for(inti=0;i

Addressaddress=list.get(i);

cityName=address.getLocality();//获取城市

}

}

//发送空消息

handler.sendEmptyMessage(1);

}

//位置信息更改执行方法

@Override

publicvoidonLocationChanged(Locationlocation){

//更新当前的位置信息

updateWithNewLocation(location);

}

//状态信息改变

@Override

publicvoidonStatusChanged(Stringprovider,intstatus,Bundleextras){

}

@Override

publicvoidonProviderEnabled(Stringprovider){

}

@Override

publicvoidonProviderDisabled(Stringprovider){

}

@Override

publicvoidonDestroy(){

super.onDestroy();

//保存城市

SharedUtils.putCityName(getActivity(),cityName);

//停止定位

stopLocation();

}

//停止定位

privatevoidstopLocation(){

locationManager.removeUpdates(this);

}

}

2)团购页Fragment(FragmentTuan)packagecom.sunny.dianping_client.fragment;

importcom.sunny.dianping_client.R;

importandroid.support.v4.app.Fragment;

importandroid.os.Bundle;

importandroid.view.LayoutInflater;

importandroid.view.View;

importandroid.view.ViewGroup;

publicclassFragmentTuanextendsFragment{

@Override

publicViewonCreateView(LayoutInflaterinflater,ViewGroupcontainer,

BundlesavedInstanceState){

returninflater.inflate(R.layout.main_tuan,container,false);

}

}

3)发现页Fragment(FragmentSearch)packagecom.sunny.dianping_client.fragment;

importcom.sunny.dianping_client.R;

importandroid.support.v4.app.Fragment;

importandroid.os.Bundle;

importandroid.view.LayoutInflater;

importandroid.view.View;

importandroid.view.ViewGroup;

publicclassFragmentSearchextendsFragment{

@Override

publicViewonCreateView(LayoutInflaterinflater,ViewGroupcontainer,

BundlesavedInstanceState){

returninflater.inflate(R.layout.main_search,container,false);

}

}

4)我的页Fragment(FragmentMy)packagecom.sunny.dianping_client.fragment;

importcom.sunny.dianping_client.R;

importandroid.os.Bundle;

importandroid.support.v4.app.Fragment;

importandroid.view.LayoutInflater;

importandroid.view.View;

importandroid.view.ViewGroup;

publicclassFragmentMyextendsFragment{

@Override

publicViewonCreateView(LayoutInflaterinflater,ViewGroupcontainer,

BundlesavedInstanceState){

returninflater.inflate(R.layout.main_my,container,false);

}

}

4.使用SharedPreferences实现标记的写入与读取packagecom.sunny.dianping_client.utils;

importandroid.R.bool;

importandroid.content.Context;

importandroid.content.SharedPreferences.Editor;

importandroid.widget.EditText;

/**

*实现标记的写入读取

*@authorsunnyhack

*/

publicclassSharedUtils{

privatestaticfinalStringFILE_NAME="dianping";

privatestaticfinalStringMODE_NAME="welcome";

//获取flag标记值

publicstaticbooleangetWelcomeFlag(Contextcontext){

returncontext.getSharedPreferences(FILE_NAME,context.MODE_PRIVATE)

.getBoolean(MODE_NAME,false);

}

//写入flag标记值

publicstaticvoidputWelcomeFlag(Contextcontext,booleanisFirst){

Editoreditor=context.getSharedPreferences(FILE_NAME,

context.MODE_APPEND).edit();

editor.putBoolean(MODE_NAME,isFirst);

mit();

}

//写入一个String类型的数据

publicstaticvoidputCityName(Contextcontext,StringcityName){

Editoreditor=context.getSharedPreferences(FILE_NAME,

Context.MODE_APPEND).edit();

editor.putString("cityName",cityName);

mit();

}

//获取String类型的值

publicstaticStringgetCityName(Contextcontext){

returncontext.getSharedPreferences(FILE_NAME,Context.MODE_PRIVATE)

.getString("cityName","选择城市");

}

}

5.主界面按钮图片和文字的变色(主要使用选择器实现)

1)字体颜色选择器main_color_selector.xml

2)首页图片变色选择器main_home_selector.xml

2)团购图片变色选择器main_tuan_selector.xml

2)发现图片变色选择器main_search_selector.xml

2)我的图片变色选择器main_my_selector.xml

以上就是引导页和主界面的实现,记录下来给大家分享,一起交流学习~~

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。