版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
【移動應(yīng)用開發(fā)技術(shù)】Android仿大眾點評引導(dǎo)頁(ViewPage)+主頁面(Fragment)的實現(xiàn)
大家好,今天主要是實現(xiàn)仿大眾點評引導(dǎo)頁和主頁面以及城市定位的實現(xiàn),主要使用ViewPager+Fragment+SharedPreferences,實現(xiàn)了第一次打開程序出現(xiàn)引導(dǎo)頁,再次打開跳過引導(dǎo)頁,這也是一般應(yīng)用常用的應(yīng)用基本架構(gòu)方式。下面首先來看最終實現(xiàn)效果如下圖:1.布局文件說明1)歡迎頁布局文件welcome.xml2)引導(dǎo)頁布局文件welcome_guide.xml3)首頁布局文件main_home.xml4)團購布局文件main_tuan.xml5)發(fā)現(xiàn)布局文件main_search.xml6)我的布局文件main_my.xml布局文件內(nèi)容較多,布局代碼就不一一貼出來了,請看附件詳細源碼。2.Activity說明1)歡迎頁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
{
@Override
protected
void
onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.welcome);
//使用Handler實現(xiàn)延時跳轉(zhuǎn)
// new
Handler(new
Handler.Callback()
{
//
// @Override
// public
boolean
handleMessage(Message
msg)
{
// //
頁面跳轉(zhuǎn)
// startActivity(new
Intent(getApplicationContext(),
MainActivity.class));
// return
false;
// }
// }).sendEmptyMessageDelayed(0,
3000);//表示任務(wù)延時三秒執(zhí)行
//使用Java定時器實現(xiàn)延時跳轉(zhuǎn)
Timer
timer
=
new
Timer();
timer.schedule(new
Task(),
3000);//定時器延時執(zhí)行任務(wù)的方法
}
class
Task
extends
TimerTask{
@Override
public
void
run()
{
//
實現(xiàn)頁面的跳轉(zhuǎn)
//不是第一次啟動
if
(SharedUtils.getWelcomeFlag(getBaseContext()))
{
startActivity(new
Intent(getBaseContext(),MainActivity.class));
}else
{
startActivity(new
Intent(WelcomeStartActivity.this,
WelcomeGuideActivity.class));
//保存訪問記錄
SharedUtils.putWelcomeFlag(getBaseContext(),
true);
}
finish();
}
}
}2)引導(dǎo)頁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;
@Override
protected
void
onCreate(Bundle
savedInstanceState)
{
//
TODO
自動生成的方法存根
super.onCreate(savedInstanceState);
setContentView(R.layout.welcome_guide);
ViewUtils.inject(this);
initViewPager();
}
@OnClick(R.id.btn_welcome_guide)
public
void
click(View
view){
//
實現(xiàn)頁面的跳轉(zhuǎn)
startActivity(new
Intent(getBaseContext(),
MainActivity.class));
finish();
}
//初始化ViewPager
public
void
initViewPager(){
list
=
new
ArrayList<View>();
ImageView
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);
ImageView
iv2
=
new
ImageView(this);
iv2.setImageResource(R.drawable.guide_03);
list.add(iv2);
mViewPager.setAdapter(new
MyPagerAdapter());
//監(jiān)聽ViewPager滑動效果
mViewPager.setOnPageChangeListener(new
OnPageChangeListener()
{
//頁卡被選中的效果
@Override
public
void
onPageSelected(int
arg0)
{
if
(arg0==2)
{
mComeIn.setVisibility(View.VISIBLE);
}else
{
mComeIn.setVisibility(View.GONE);
}
}
@Override
public
void
onPageScrolled(int
arg0,
float
arg1,
int
arg2)
{
}
@Override
public
void
onPageScrollStateChanged(int
arg0)
{
}
});
}
//定義ViewPager的適配器
class
MyPagerAdapter
extends
PagerAdapter{
//計算需要多少Items顯示
@Override
public
int
getCount()
{
return
list.size();
}
@Override
public
boolean
isViewFromObject(View
arg0,
Object
arg1)
{
return
arg0==arg1;
}
//初始化Item實例的方法
@Override
public
Object
instantiateItem(ViewGroup
container,
int
position)
{
container.addView(list.get(position));
return
list.get(position);
}
//Item銷毀的方法
@Override
public
void
destroyItem(ViewGroup
container,
int
position,
Object
object)
{
/**
*
銷毀Item的方法不使用系統(tǒng)定義銷毀Item的方法,而是使用我們自己定義的形式,將一個View對象從ViewPager中移除
*/
//super.destroyItem(container,
position,
object);
container.removeView(list.get(position));
}
}
}3)主頁面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;
@Override
protected
void
onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
ViewUtils.inject(this);
//初始化FragmentManager
fragmentManager
=
getSupportFragmentManager();
//設(shè)置默認選中
main_home.setChecked(true);
mGroup.setOnCheckedChangeListener(this);
changeFragment(new
FragmentHome(),
false);
}
@Override
public
void
onCheckedChanged(RadioGroup
group,
int
checkedId)
{
//
選中不同的Fragment
switch
(checkedId)
{
case
R.id.main_home://首頁
changeFragment(new
FragmentHome(),
true);
break;
case
R.id.main_tuan://團購
changeFragment(new
FragmentTuan(),
true);
break;
case
R.id.main_search://發(fā)現(xiàn)
changeFragment(new
FragmentSearch(),
true);
break;
case
R.id.main_my://我的
changeFragment(new
FragmentMy(),
true);
break;
default:
break;
}
}
//切換不同的Fragment
public
void
changeFragment(Fragment
fragment,boolean
isInit){
//開啟事物
FragmentTransaction
beginTransaction
=
fragmentManager.beginTransaction();
beginTransaction.replace(R.id.main_content,
fragment);
if
(!isInit)
{
//加上該段代碼Fragment就不會出現(xiàn)重影的效果
beginTransaction.addToBackStack(null);
}
beginTmit();
}
}3.主界面Fragment的實現(xiàn)1)首頁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
vider.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;
@Override
public
View
onCreateView(LayoutInflater
inflater,
ViewGroup
container,
Bundle
savedInstanceState)
{
View
view
=
inflater.inflate(R.layout.main_home,
container,
false);
ViewUtils.inject(this,
view);
//獲取數(shù)據(jù)并顯示
mTopcity.setText(SharedUtils.getCityName(getActivity()));
return
view;
}
@Override
public
void
onStart()
{
super.onStart();
//
檢查GPS是否打開
checkGPSisOpen();
}
//檢查Gps是否打開
private
void
checkGPSisOpen()
{
//
獲取當(dāng)前LocationManager對象
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);
}
//開始定位
startLocation();
}
//使用GPS定位的方法
private
void
startLocation()
{
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
2000,
10,
this);
}
//接收并處理消息
private
Handler
handler
=
new
Handler(new
Handler.Callback()
{
@Override
public
boolean
handleMessage(Message
msg)
{
if
(msg.what==1)
{
mTopcity.setText(cityName);
}
return
false;
}
});
//獲取對應(yīng)位置的經(jīng)緯度并且定位城市
private
void
updateWithNewLocation(Location
location)
{
double
lat
=
0.0,lng
=
0.0;
if
(location!=null)
{
lat
=
location.getLatitude();
lng
=
location.getLongitude();
Log.i("TAG",
"經(jīng)度是"+lat+"緯度是"+lng);
}else
{
cityName
=
"無法獲取城市信息";
}
//通過經(jīng)緯度獲取地址
List<Address>
list
=
null;
Geocoder
geocoder
=
new
Geocoder(getActivity());
try
{
list
=
geocoder.getFromLocation(lat,
lng,
2);
}
catch
(Exception
e)
{
//
TODO:
handle
exception
e.printStackTrace();
}
if
(list!=null&&list.size()>0)
{
for
(int
i
=
0;
i
<
list.size();
i++)
{
Address
address
=
list.get(i);
cityName
=
address.getLocality();//獲取城市
}
}
//發(fā)送空消息
handler.sendEmptyMessage(1);
}
//位置信息更改執(zhí)行方法
@Override
public
void
onLocationChanged(Location
location)
{
//
更新當(dāng)前的位置信息
updateWithNewLocation(location);
}
//狀態(tài)信息改變
@Override
public
void
onStatusChanged(String
provider,
int
status,
Bundle
extras)
{
}
@Override
public
void
onProviderEnabled(String
provider)
{
}
@Override
public
void
onProviderDisabled(String
provider)
{
}
@Override
public
void
onDestroy()
{
super.onDestroy();
//保存城市
SharedUtils.putCityName(getActivity(),
cityName);
//停止定位
stopLocation();
}
//停止定位
private
void
stopLocation(){
locationManager.removeUpdates(this);
}
}2)團購頁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
{
@Override
public
View
onCreateView(LayoutInflater
inflater,
ViewGroup
container,
Bundle
savedInstanceState)
{
return
inflater.inflate(R.layout.main_tuan,
container,
false);
}
}3)發(fā)現(xiàn)頁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
{
@Override
public
View
onCreateView(LayoutInflater
inflater,
ViewGroup
container,
Bundle
savedInstanceState)
{
return
inflater.inflate(R.layout.main_search,
container,
false);
}
}4)我的頁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
{
@Override
public
View
onCreateView(LayoutInflater
inflater,
ViewGroup
container,
Bundle
savedInstanceState)
{
return
inflater.inflate(R.layout.main_my,
container,
false);
}
}4.使用SharedPreferences實現(xiàn)標記的寫入與讀取package
com.sunny.dianping_client.utils;
import
android.R.bool;
import
an
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 境外培訓(xùn)行業(yè)管理制度
- 燃氣作業(yè)人員培訓(xùn)制度
- 森林管護員培訓(xùn)制度
- 人才培訓(xùn)績效管理制度
- 培訓(xùn)學(xué)校辦公室制度
- 南昌企業(yè)培訓(xùn)制度
- 健康人員培訓(xùn)管理制度
- 培訓(xùn)機構(gòu)全日制管理制度
- 培訓(xùn)行業(yè)收入管理制度
- 微笑服務(wù)培訓(xùn)制度
- 電大??啤豆残姓W(xué)》簡答論述題題庫及答案
- 2025成人高考全國統(tǒng)一考試專升本英語試題及答案
- 代辦煙花爆竹經(jīng)營許可證協(xié)議合同
- 國企員工總額管理辦法
- 企業(yè)級AI大模型平臺落地框架
- TD/T 1036-2013土地復(fù)墾質(zhì)量控制標準
- 蘇教版六年級數(shù)學(xué)上冊全冊知識點歸納(全梳理)
- 車位包銷合同協(xié)議模板
- 病歷書寫規(guī)范版2025
- 泄漏管理培訓(xùn)課件
評論
0/150
提交評論