日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

android 底部滑动效果怎么做,Android实现简单底部导航栏 Android仿微信滑动切换效果...

發(fā)布時(shí)間:2024/9/27 Android 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 底部滑动效果怎么做,Android实现简单底部导航栏 Android仿微信滑动切换效果... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

android仿微信滑動(dòng)切換最終實(shí)現(xiàn)效果:

大體思路:

1. 主要使用兩個(gè)自定義view配合實(shí)現(xiàn); 底部圖標(biāo)加文字為一個(gè)自定義view,底部導(dǎo)航欄為一個(gè)載體,根據(jù)需要來(lái)添加底部圖標(biāo);

2. 底部導(dǎo)航欄的設(shè)置方法類似于tablayout的關(guān)聯(lián),view需要?jiǎng)?chuàng)建關(guān)聯(lián)方法,用來(lái)關(guān)聯(lián)viewpager;

3. 通過(guò)關(guān)聯(lián)方法獲取viewpager實(shí)例后,根據(jù)viewpager頁(yè)面數(shù)創(chuàng)建底部導(dǎo)航欄的圖標(biāo)按鈕;

代碼實(shí)現(xiàn):

1. 新建第一個(gè)自定義view, 圖標(biāo) + 文字 的底部按鈕;

/**

* 自定義控件,該控件為底部導(dǎo)航欄中的圖標(biāo)

* created by mrzheng on 2017/8/2.

*/

public class tabview extends linearlayout {

botbean mbean;

private textview title;

private imageview iconimage;

/**

* 引用此控件,只能通過(guò)new 方法;接收一個(gè)tabview

* @param context

*/

public tabview(context context, botbean bean) {

super(context);

this.mbean = bean;

initview();

}

/**

* 初始化布局

*/

public void initview() {

setorientation(vertical);

setgravity(gravity.center);

//添加小圖標(biāo)

iconimage = new imageview(getcontext());

linearlayout.layoutparams layoutparams = new linearlayout.layoutparams(viewgroup.layoutparams.wrap_content

, viewgroup.layoutparams.wrap_content);

iconimage.setlayoutparams(layoutparams);

iconimage.setimageresource(mbean.getuncheckedid());

drawable drawable = getcontext().getresources().getdrawable(mbean.getuncheckedid());

drawable wrapdrawable = drawablecompat.wrap(drawable);

drawablecompat.settintlist(wrapdrawable, colorstatelist.valueof(color.black));

iconimage.setimagedrawable(wrapdrawable);

addview(iconimage);

//標(biāo)題

title = new textview(getcontext());

linearlayout.layoutparams titleparams = new layoutparams(layoutparams.wrap_content,

layoutparams.wrap_content);

title.setlayoutparams(titleparams);

title.settext(mbean.getcontent());

addview(title);

}

//判斷選擇狀態(tài),改變圖標(biāo)

//供外部調(diào)用

public void setselected(boolean isselected) {

if (mbean == null) {

return;

}

if (isselected) {

if (iconimage != null) {

//使用顏色過(guò)濾器,改變選中時(shí)的顏色

drawable drawable = getcontext().getresources().getdrawable(mbean.getuncheckedid());

drawable wrapdrawable = drawablecompat.wrap(drawable);

drawablecompat.settintlist(wrapdrawable, colorstatelist.valueof(color.green));

iconimage.setimagedrawable(wrapdrawable);

title.settextcolor(color.green);

}

} else {

if (title != null) {

// iconimage.setimageresource(mbean.getuncheckedid());

drawable drawable = getcontext().getresources().getdrawable(mbean.getuncheckedid());

drawable wrapdrawable = drawablecompat.wrap(drawable);

drawablecompat.settintlist(wrapdrawable, colorstatelist.valueof(color.black));

iconimage.setimagedrawable(wrapdrawable);

title.settextcolor(color.gray);

}

}

}

}

2. 創(chuàng)建第二個(gè)自定義view,該view為底部導(dǎo)航欄載體,根據(jù) 關(guān)聯(lián)的viewpager頁(yè)面 個(gè)數(shù)創(chuàng)建 底部導(dǎo)航欄圖標(biāo);

/**

* 該控件為底部導(dǎo)航欄圖標(biāo)載體

* created by mrzheng on 2017/8/2.

*/

public class bottomview extends linearlayout {

private viewpager vp;

bottompagechangelistener mbottompagechangelistener;

public bottomview(context context) {

super(context);

}

public bottomview(context context, @nullable attributeset attrs) {

super(context, attrs);

}

public bottomview(context context, @nullable attributeset attrs, int defstyleattr) {

super(context, attrs, defstyleattr);

}

/**

* 同tablayout用法相似,需要與viewpager進(jìn)行綁定

*/

public void setviewpager(viewpager viewpager, arraylist botbeen,bottompagechangelistener bottompagechangelistener) {

if (viewpager == null) {

return;

}

vp = viewpager;

mbottompagechangelistener = bottompagechangelistener;

inittabview(botbeen);

//設(shè)置viewpager的點(diǎn)擊事件

vp.addonpagechangelistener(new viewpager.simpleonpagechangelistener(){

@override

public void onpageselected(int position) {

for (int i = 0; i < getchildcount(); i++) {

getchildat(i).setselected((position == i ? true : false));

}

if (mbottompagechangelistener != null) {

mbottompagechangelistener.onpagechangelistener(position);

}

}

});

}

/**

* 初始化底部導(dǎo)航欄,viewpager有多少頁(yè),就創(chuàng)建多少個(gè)圖標(biāo)

*/

public void inittabview(arraylist botbeen) {

setgravity(horizontal);

for (int i = 0; i < botbeen.size(); i++) {

botbean bean = botbeen.get(i);

tabview tabview = new tabview(getcontext(), bean);

linearlayout.layoutparams params = new linearlayout.layoutparams(viewgroup.layoutparams.wrap_content

, viewgroup.layoutparams.wrap_content);

params.weight = 1;

params.gravity = gravity.center;

tabview.setlayoutparams(params);

//為每個(gè)view設(shè)置點(diǎn)擊事件,點(diǎn)擊跳轉(zhuǎn)過(guò)去

final int finali = i;

tabview.setonclicklistener(new onclicklistener() {

@override

public void onclick(view view) {

vp.setcurrentitem(finali);

}

});

//設(shè)置一開始選中狀態(tài)

if (i == 0) {

tabview.setselected(true);

//由于初始化時(shí),onpageselected()選中方法并沒(méi)有的到執(zhí)行,所以主動(dòng)去調(diào)用回調(diào)方法

if (mbottompagechangelistener != null) {

mbottompagechangelistener.onpagechangelistener(i);

}

}

addview(tabview);

}

}

/**

* 提供接口回調(diào)方法,每次滑動(dòng)都通知外界

*/

public interface bottompagechangelistener{

void onpagechangelistener(int position);

}

}

3. 添加 圖標(biāo)自定義類, 該類封裝著底部導(dǎo)航欄中每一個(gè)選項(xiàng)的的圖標(biāo)和文字,將該類型對(duì)象添加到集合中,用于給底部導(dǎo)航欄設(shè)置圖標(biāo);

/**

* 底部導(dǎo)航欄的封裝類,該類對(duì)象用于在底部導(dǎo)航欄添加對(duì)應(yīng)圖標(biāo)和文字

* created by mrzheng on 2017/8/2.

*/

public class botbean {

string content;//圖標(biāo)名字

int uncheckedid;//未選中時(shí)的圖標(biāo)

public botbean(string content, int uncheckedid) {

this.content = content;

this.uncheckedid = uncheckedid;

}

public string getcontent() {

return content;

}

public void setcontent(string content) {

this.content = content;

}

public int getuncheckedid() {

return uncheckedid;

}

public void setuncheckedid(int uncheckedid) {

this.uncheckedid = uncheckedid;

}

}

自定義view實(shí)現(xiàn)完成,在fragment或activity中使用該view:

1. 在布局文件中添加:

android:id="@+id/bottom"

android:layout_width="match_parent"

android:layout_height="60dp">

2. 在活動(dòng)或碎片中添加:

public class mainactivity extends appcompatactivity {

arraylist mfragments;

arraylist mitemicon;//存放底部圖標(biāo)和文字

private textview tv;

@override

protected void oncreate(bundle savedinstancestate) {

super.oncreate(savedinstancestate);

setcontentview(r.layout.activity_main);

mfragments = new arraylist<>();

mitemicon = new arraylist<>();

mfragments.add(new textfragment());

mfragments.add(new textfragment());

mfragments.add(new textfragment());

mfragments.add(new textfragment());

mitemicon.add(new botbean("首頁(yè)", r.mipmap.ic_home2));

mitemicon.add(new botbean("通訊錄", r.mipmap.ic_study2));

mitemicon.add(new botbean("發(fā)現(xiàn)", r.mipmap.ic_found2));

mitemicon.add(new botbean("我的", r.mipmap.ic_me2));

viewpager vp = (viewpager) findviewbyid(r.id.vp);

vp.setadapter(new fadapter(getsupportfragmentmanager()));

tv = (textview) findviewbyid(r.id.tv);

bottomview bottom = (bottomview) findviewbyid(r.id.bottom);

bottom.setviewpager(vp, mitemicon, new bottomview.bottompagechangelistener() {

@override

public void onpagechangelistener(int position) {

//滑動(dòng)后的回調(diào)

tv.settext(mitemicon.get(position).getcontent());

}

});

}

/**

* 適配器

*/

class fadapter extends fragmentpageradapter {

public fadapter(fragmentmanager fm) {

super(fm);

}

@override

public fragment getitem(int position) {

return mfragments.get(position);

}

@override

public int getcount() {

return mfragments.size();

}

}

}

總結(jié):該代碼耦合度較高,有些代碼可能不太合理;歡迎大牛們給出合理建議;

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持萬(wàn)仟網(wǎng)。

總結(jié)

以上是生活随笔為你收集整理的android 底部滑动效果怎么做,Android实现简单底部导航栏 Android仿微信滑动切换效果...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。