【移動應(yīng)用開發(fā)技術(shù)】Android仿大眾點評引導(dǎo)頁(ViewPage)+主頁面(Fragment)的實現(xiàn)_第1頁
【移動應(yīng)用開發(fā)技術(shù)】Android仿大眾點評引導(dǎo)頁(ViewPage)+主頁面(Fragment)的實現(xiàn)_第2頁
【移動應(yīng)用開發(fā)技術(shù)】Android仿大眾點評引導(dǎo)頁(ViewPage)+主頁面(Fragment)的實現(xiàn)_第3頁
【移動應(yīng)用開發(fā)技術(shù)】Android仿大眾點評引導(dǎo)頁(ViewPage)+主頁面(Fragment)的實現(xiàn)_第4頁
【移動應(yīng)用開發(fā)技術(shù)】Android仿大眾點評引導(dǎo)頁(ViewPage)+主頁面(Fragment)的實現(xiàn)_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

付費下載

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論