【移動應(yīng)用開發(fā)技術(shù)】Android中怎么實現(xiàn)美團頂部的滑動菜單_第1頁
【移動應(yīng)用開發(fā)技術(shù)】Android中怎么實現(xiàn)美團頂部的滑動菜單_第2頁
【移動應(yīng)用開發(fā)技術(shù)】Android中怎么實現(xiàn)美團頂部的滑動菜單_第3頁
【移動應(yīng)用開發(fā)技術(shù)】Android中怎么實現(xiàn)美團頂部的滑動菜單_第4頁
【移動應(yīng)用開發(fā)技術(shù)】Android中怎么實現(xiàn)美團頂部的滑動菜單_第5頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

【移動應(yīng)用開發(fā)技術(shù)】Android中怎么實現(xiàn)美團頂部的滑動菜單

本篇文章為大家展示了Android中怎么實現(xiàn)美團頂部的滑動菜單,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。首先需要一個代表每個活動主題的JavaBeanpublic

class

Subject

{

//主題名

private

String

name;

//主題圖標資源ID

private

int

icon;

public

Subject(String

name,

int

icon)

{

=

name;

this.icon

=

icon;

}

public

String

getName()

{

return

name;

}

public

void

setName(String

name)

{

=

name;

}

public

int

getIcon()

{

return

icon;

}

public

void

setIcon(int

icon)

{

this.icon

=

icon;

}

}然后用一個List<Subject>來承載需要顯示的所有主題內(nèi)容,將這些數(shù)據(jù)傳給GridViewAdapter。因為ViewPager有幾個頁面就有幾個GridView,每個GridView對應(yīng)的是哪些數(shù)據(jù)都需要在其內(nèi)部根據(jù)頁面索引進行計算/**

*

Created

by

CZY

on

2017/6/23.

*/

public

class

GridViewAdapter

extends

BaseAdapter

{

private

List<Subject>

subjectList;

private

LayoutInflater

layoutInflater;

//當(dāng)前頁索引

private

int

currentIndex;

//占滿屏幕時每頁展示的主題個數(shù)

private

int

pageSize;

public

GridViewAdapter(Context

context,

List<Subject>

subjectList,

int

currentIndex,

int

pageSize)

{

this.layoutInflater

=

LayoutInflater.from(context);

this.subjectList

=

subjectList;

this.currentIndex

=

currentIndex;

this.pageSize

=

pageSize;

}

/**

*

如果剩余數(shù)據(jù)能夠完全占滿當(dāng)前頁,則返回

pageSize

*

如果不能,則返回剩余的數(shù)據(jù)個數(shù)

*/

@Override

public

int

getCount()

{

return

subjectList.size()

>

(currentIndex

+

1)

*

pageSize

?

pageSize

:

(subjectList.size()

-

currentIndex

*

pageSize);

}

/**

*

計算出正確的索引

*/

@Override

public

Object

getItem(int

position)

{

return

subjectList.get(position

+

currentIndex

*

pageSize);

}

@Override

public

long

getItemId(int

position)

{

return

position

+

currentIndex

*

pageSize;

}

@Override

public

View

getView(int

position,

View

convertView,

ViewGroup

parent)

{

ViewHolder

viewHolder;

if

(convertView

==

null)

{

convertView

=

layoutInflater.inflate(R.layout.item_grid_view,

parent,

false);

viewHolder

=

new

ViewHolder();

viewHolder.tv_subject

=

(TextView)

convertView.findViewById(R.id.tv_subject);

viewHolder.iv_subject

=

(ImageView)

convertView.findViewById(R.id.iv_subject);

convertView.setTag(viewHolder);

}

else

{

viewHolder

=

(ViewHolder)

convertView.getTag();

}

int

pos

=

position

+

currentIndex

*

pageSize;

viewHolder.tv_subject.setText(subjectList.get(pos).getName());

viewHolder.iv_subject.setImageResource(subjectList.get(pos).getIcon());

return

convertView;

}

private

class

ViewHolder

{

private

TextView

tv_subject;

private

ImageView

iv_subject;

}

}需要使用到的布局文件item_grid_view如下所示<?xml

version="1.0"

encoding="utf-8"?>

<RelativeLayout

xmlns:android="/apk/res/android"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:paddingBottom="10dp"

android:paddingTop="10dp">

<ImageView

android:id="@+id/iv_subject"

android:layout_width="40dp"

android:layout_height="40dp"

android:layout_centerHorizontal="true"

/>

<TextView

android:id="@+id/tv_subject"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_below="@id/iv_subject"

android:layout_centerHorizontal="true"

android:layout_marginTop="3dp"

android:textSize="12sp"

/>

</RelativeLayout>使用到了ViewPager,自然也需要一個ViewPagerAdapter/**

*

Created

by

CZY

on

2017/6/23.

*/

public

class

ViewPagerAdapter

extends

PagerAdapter

{

private

List<View>

viewList;

public

ViewPagerAdapter(List<View>

viewList)

{

this.viewList

=

viewList;

}

@Override

public

void

destroyItem(ViewGroup

container,

int

position,

Object

object)

{

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

}

@Override

public

Object

instantiateItem(ViewGroup

container,

int

position)

{

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

return

(viewList.get(position));

}

@Override

public

int

getCount()

{

return

viewList

==

null

?

0

:

viewList.size();

}

@Override

public

boolean

isViewFromObject(View

view,

Object

object)

{

return

view

==

object;

}

}在MainActivity中進行數(shù)據(jù)填充public

class

MainActivity

extends

AppCompatActivity

{

private

String[]

titles

=

{"美食",

"電影",

"酒店住宿",

"休閑娛樂",

"甜品飲品",

"水上樂園",

"汽車服務(wù)",

"美發(fā)",

"麗人",

"景點",

"足療按摩",

"運動健身",

"健身",

"超市",

"買菜",

"今日新單",

"外賣",

"自助餐",

"KTV",

"機票/火車票",

"周邊游",

"小吃快餐",

"面膜",

"美甲美睫",

"火鍋",

"生日蛋糕",

"母嬰親子",

"生活服務(wù)",

"婚紗攝影",

"學(xué)習(xí)培訓(xùn)",

"家裝",

"結(jié)婚"};

private

List<Subject>

subjectList;

private

LinearLayout

ll_dot;

//每頁展示的主題個數(shù)

private

final

int

pageSize

=

10;

//當(dāng)前頁索引

private

int

currentIndex;

@Override

protected

void

onCreate(Bundle

savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

ViewPager

viewPager

=

(ViewPager)

findViewById(R.id.viewPager);

ll_dot

=

(LinearLayout)

findViewById(R.id.ll_dot);

subjectList

=

new

ArrayList<>();

for

(String

title

:

titles)

{

subjectList.add(new

Subject(title,

R.drawable.icon));

}

//需要的頁面數(shù)

int

pageCount

=

(int)

Math.ceil(subjectList.size()

*

1.0

/

pageSize);

List<View>

viewList

=

new

ArrayList<>();

for

(int

i

=

0;

i

<

pageCount;

i++)

{

GridView

gridView

=

(GridView)

getLayoutInflater().inflate(R.layout.layout_grid_view,

viewPager,

false);

gridView.setAdapter(new

GridViewAdapter(this,

subjectList,

i,

pageSize));

viewList.add(gridView);

gridView.setOnItemClickListener(new

AdapterView.OnItemClickListener()

{

@Override

public

void

onItemClick(AdapterView<?>

parent,

View

view,

int

position,

long

id)

{

int

pos

=

position

+

currentIndex

*

pageSize;

Toast.makeText(MainActivity.this,

subjectList.get(pos).getName(),

Toast.LENGTH_SHORT).show();

}

});

}

viewPager.setAdapter(new

ViewPagerAdapter(viewList));

for

(int

i

=

0;

i

<

pageCount;

i++)

{

ll_dot.addView(getLayoutInflater().inflate(R.layout.view_dot,

null));

}

//使第一個小圓點呈選中狀態(tài)

ll_dot.getChildAt(0).findViewById(R.id.v_dot).setBackgroundResource(R.drawable.dot_selected);

viewPager.addOnPageChangeListener(new

ViewPager.OnPageChangeListener()

{

public

void

onPageSelected(int

position)

{

ll_dot.getChildAt(currentIndex).findViewById(R.id.v_dot).setBackgroundResource(R.drawable.dot_normal);

ll_dot.getChildAt(

溫馨提示

  • 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

提交評論