www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]最近折騰了很久,經(jīng)過三番五次的推倒重來,總算是弄出了一個效果比較滿意的側(cè)滑demo。把主要的實(shí)現(xiàn)流程mark下來,方便日后翻閱,實(shí)現(xiàn)的效果圖(手動錄制的,不流暢): 從圖

最近折騰了很久,經(jīng)過三番五次的推倒重來,總算是弄出了一個效果比較滿意的側(cè)滑demo。把主要的實(shí)現(xiàn)流程mark下來,方便日后翻閱,實(shí)現(xiàn)的效果圖(手動錄制的,不流暢):

 

 

從圖上可以看到,demo上面有三個按鈕和一個包含3個Fragment頁面的ViewPager,另外左側(cè)滑能拉出一個左頁面。剛開始做的demo是直接用FragmentTabHost來實(shí)現(xiàn)的,并在這個基礎(chǔ)上繼承RelativeLayout寫了個布局,來實(shí)現(xiàn)頁面的側(cè)滑效果。那個demo的效果跟這個的主要差距就是三個tab之間只能通過點(diǎn)擊切換,沒有viewpager這樣的滑動切換效果。這個demo下面的三個按鈕其實(shí)是三個RadioButton,只是把它前面的圓點(diǎn)隱藏了(demo里面沒好好弄按鈕上的背景效果了)。之前嘗試過利用PagerTitleStrip來實(shí)現(xiàn)三個Tab的標(biāo)簽,但結(jié)果是它們會隨著ViewPager不停滾動,沒法固定下來。

demo主要的布局文件如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent" >

 

android:id="@+id/pager"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_above="@+id/titlelayout" >

 

 

android:id="@+id/titlelayout"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_alignParentBottom="true" >

 

android:id="@+id/tab_menu"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:background="@drawable/tab_bg_normal"

android:orientation="horizontal" >

 

android:id="@+id/title1"

style="@style/tab_style"

android:checked="true"

android:drawableTop="@drawable/tab_activity_selector"

android:text="活動" />

 

android:id="@+id/title2"

style="@style/tab_style"

android:drawableTop="@drawable/tab_friend"

android:text="工作" />

 

android:id="@+id/title3"

style="@style/tab_style"

android:drawableTop="@drawable/tab_friend"

android:text="圈子" />

 

 

 

要實(shí)現(xiàn)ViewPager+Fragment的滑動效果,必須繼承FragmentActivity,同時要給ViewPager設(shè)置Adapter。由于ViewPager上面要加載Fragment(需要繼承Fragment類),所以不是重載PagerAdapter,而是重寫FragmentPagerAdapter類:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

public class MyViewPagerAdapter extends FragmentPagerAdapter {

private ArrayList fragments;//需要添加到上面的Fragment

public MyViewPagerAdapter(FragmentManager fm) {

super(fm);

}

/**

* 自定義的構(gòu)造函數(shù)

* @param fm

* @param fragments ArrayList

*/

public MyViewPagerAdapter(FragmentManager fm,ArrayList fragments) {

super(fm);

this.fragments = fragments;

}

@Override

public Fragment getItem(int arg0) {

return fragments.get(arg0);//返回Fragment對象

}

@Override

public int getCount() {

return fragments.size();//返回Fragment的個數(shù)

}

}

寫好了adapter,在主函數(shù)的onCreate()函數(shù)里面初始化ViewPager,同時給它配置adapter和設(shè)置滑動事件監(jiān)聽(這需要實(shí)現(xiàn)OnPageChangeListener接口):

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

/**

* 初始化視圖

*/

private void initView() {

// TODO Auto-generated method stub[!--empirenews.page--]

pager=(ViewPager) findViewById(R.id.pager);//初始化控件

fragments=new ArrayList();//初始化數(shù)據(jù)

fragments.add(new ActivityFragment());

fragments.add(new JobFragment());

fragments.add(new FriendFragment());

}

/**

* 初始化ViewPager

*/

private void initViewPager() {

// TODO Auto-generated method stub

mAdapter=new MyViewPagerAdapter(getSupportFragmentManager(), fragments);

pager.setAdapter(mAdapter);

pager.setOnPageChangeListener(this);

pager.setCurrentItem(0);//設(shè)置成當(dāng)前第一個

}

/**

* OnPageChangeListener的接口函數(shù)

*/

@Override

public void onPageSelected(int arg0) {

title.get(arg0).setChecked(true);//保持頁面跟按鈕的聯(lián)動

//下面這個條件語句里面的是針對側(cè)滑效果的

if(arg0==0){

// 如果當(dāng)前是第一頁,那么設(shè)置觸摸屏幕的模式為全屏模式

sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);//設(shè)置成全屏響應(yīng)

}else {

// 如果不是第一頁,設(shè)置觸摸屏幕的模式為邊緣60px的地方

sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);

}

}

以上基本配置好了ViewPager組件,運(yùn)行起來3個Fragment頁面可以自由滑動了,但是下面的三個button還沒有設(shè)置監(jiān)聽,所以viewpager切換的時候不會跟著切換,點(diǎn)擊也不會有響應(yīng)。接下來要做的就是在onCreate()里面初始化RadioButton,并給它設(shè)置OnClickListener監(jiān)聽點(diǎn)擊事件:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

/**

* 初始化幾個用來顯示title的RadioButton

*/

private void initTitle() {

title.add((RadioButton) findViewById(R.id.title1));//三個title標(biāo)簽

title.add((RadioButton) findViewById(R.id.title2));

title.add((RadioButton) findViewById(R.id.title3));

title.get(0).setOnClickListener(new MyOnClickListener(0));//設(shè)置響應(yīng)

title.get(1).setOnClickListener(new MyOnClickListener(1));

title.get(2).setOnClickListener(new MyOnClickListener(2));

}

/**

* 重寫OnClickListener的響應(yīng)函數(shù),主要目的就是實(shí)現(xiàn)點(diǎn)擊title時,pager會跟著響應(yīng)切換

* @author llb

*/

private class MyOnClickListener implements OnClickListener{

private int index;

public MyOnClickListener(int index){

this.index=index;

}

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

pager.setCurrentItem(index);//把viewpager的視圖切過去,實(shí)現(xiàn)title跟pager的聯(lián)動

title.get(index).setChecked(true);//設(shè)置被選中,否則布局里面的背景不會切換

}

}

最后就是實(shí)現(xiàn)側(cè)滑出左邊頁面的效果,這里使用了開源組件SlidingMenu,具體的使用方法可百度or查看源代碼。SlidingMenu組件重寫了Activity、FragmentActivity、RelativeLayout等,要實(shí)現(xiàn)側(cè)滑效果,可以把主函數(shù)繼承的FragmentActivity改成SlidingFragmentActivity,也可以去在xml布局文件里面直接設(shè)置。這個demo里面采用的是繼承SlidingFragmentActivity類,主要的初始化代碼如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

/**

* 初始化開源組件SlidingMenu

*/

private void initSlidingMenu() {

// 實(shí)例化滑動菜單對象

SlidingMenu sm = getSlidingMenu();

setContentView(R.layout.activity_main);//設(shè)置當(dāng)前的視圖

setBehindContentView(R.layout.left);//設(shè)置左頁視圖

sm.setMode(SlidingMenu.LEFT);

// 設(shè)置滑動陰影的寬度

// sm.setShadowWidthRes(R.dimen.shadow_width);

// 設(shè)置滑動陰影的圖像資源

// sm.setShadowDrawable(R.drawable.shadow);

// 設(shè)置滑動菜單視圖的寬度

// sm.setBehindOffsetRes(R.dimen.slidingmenu_offset);

// 設(shè)置漸入漸出效果的值

sm.setFadeDegree(0.35f);

// 設(shè)置觸摸屏幕的模式

sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);

// sm.setTouchModeBehind(SlidingMenu.TOUCHMODE_FULLSCREEN);//設(shè)置左頁的響應(yīng)范圍

sm.setTouchmodeMarginThreshold(60);//這個設(shè)置的是隔屏幕邊緣多遠(yuǎn)開始響應(yīng)

// sm.setBehindOffset(50);//設(shè)置左頁距離屏幕右邊緣的距離,右頁會補(bǔ)上

WindowManager wManager=(WindowManager) getSystemService(Context.WINDOW_SERVICE);

screenWidth=wManager.getDefaultDisplay().getWidth();//獲取屏幕的寬度

sm.setBehindWidth((int) (screenWidth*0.8));//設(shè)置左頁的寬度

}

最后附上其中一個Fragment的示例代碼:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18[!--empirenews.page--]

19

20

public class ActivityFragment extends Fragment{

private View view;//緩存頁面

@Override

public void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

}

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

if(view==null){

view=inflater.inflate(R.layout.activity_fragment,container, false);

}

ViewGroup parent = (ViewGroup) view.getParent();

if(parent!=null){

parent.removeView(view);//先移除

}

return view;

}

}

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

微電子產(chǎn)品的可靠性是評價其質(zhì)量的關(guān)鍵指標(biāo)。在微電子組裝過程中,由于元器件的微小化和集成度的提高,對組裝精度的要求也越來越高。因此,確保組裝過程中的可靠性,對于提升產(chǎn)品的整體質(zhì)量和客戶滿意度至關(guān)重要。

關(guān)鍵字: 微組裝 組件

上海 2025年6月11日 /美通社/ -- 6月11日,國電投新能源科技有限公司(以下簡稱"國電投新能源")攜銅柵線異質(zhì)結(jié)(C-HJT)光伏組件亮相2025年SNEC國際太陽能光伏展。隨著&quo...

關(guān)鍵字: 光伏產(chǎn)業(yè) 新能源 組件 光伏組件

常州 2025年5月21日 /美通社/ -- 在近期的光伏行業(yè)會議上,天合光能支架事業(yè)部聯(lián)席總裁王芝斌發(fā)表題為《電力市場化交易環(huán)境下電站設(shè)備選型》的主題演講。演講中王芝斌不僅深入探討了在136號文新形勢下跟蹤支架在提升...

關(guān)鍵字: 光伏 組件 電力市場 選型

青島 2025年4月30日 /美通社/ -- 4月25日,在山東省市場監(jiān)督管理局的指導(dǎo)下,國際獨(dú)立第三方檢測、檢驗(yàn)和認(rèn)證機(jī)構(gòu)德國萊茵TÜV大中華區(qū)(簡稱"...

關(guān)鍵字: 新能源 研討會 組件 太陽能光伏

在當(dāng)今這個信息化、智能化的時代,無線通信技術(shù)已經(jīng)滲透到我們生活的方方面面。從智能家居、工業(yè)自動化到遠(yuǎn)程監(jiān)控、醫(yī)療健康,無線射頻模塊作為無線通信的核心組件,其性能與穩(wěn)定性直接關(guān)系到整個系統(tǒng)的運(yùn)行效果。本文將為大家推薦幾款高...

關(guān)鍵字: 無線通信 組件 芯片

嘉興2025年3月24日 /美通社/ -- 2010年3月24日,15年前的今天,昱能科技在浙江嘉興正式成立,自此踏上逐光之旅。15年的光陰,昱能科技以MLPE微型逆變器為核心的設(shè)備供應(yīng)商起步,到成為分布式光儲充全場景解...

關(guān)鍵字: BSP 組件 微型逆變器 新能源

北京2025年2月11日 /美通社/ -- 1月14日,由國際獎項協(xié)會IAA評選的「2024年度紐約數(shù)字獎」評選結(jié)果正式公布,眾合云科旗下101HR榮獲紐約數(shù)字獎應(yīng)用軟件組銀獎,同批獲獎的還有宜家美國、通用汽車、美國自然...

關(guān)鍵字: 應(yīng)用軟件 SAAS 數(shù)字化 組件

亞馬遜云科技最新發(fā)布了一套靈活的數(shù)據(jù)中心組件,以支持新一代生成式AI創(chuàng)新,不僅提供12%的額外算力,還提高了可用性和運(yùn)行效率。 北京2024年12月11日 /美通社/ -- 亞馬遜云科技在2024 re:Invent全...

關(guān)鍵字: 亞馬遜 數(shù)據(jù)中心 組件 AI

開關(guān)電源作為現(xiàn)代電子設(shè)備中的核心組件,其性能直接影響到設(shè)備的穩(wěn)定性、效率和可靠性。而開關(guān)電源芯片作為開關(guān)電源的大腦,其功能定義直接關(guān)系到電源的整體性能和適應(yīng)性。然而,在實(shí)際應(yīng)用中,開關(guān)電源芯片功能定義常常面臨一系列挑戰(zhàn)和...

關(guān)鍵字: 開關(guān)電源 芯片 組件

助力生成式AI應(yīng)用穩(wěn)定扎根 深圳2024年11月4日 /美通社/ -- 全球AI解決方案與工業(yè)級內(nèi)存領(lǐng)導(dǎo)品牌宜鼎國際(Innodisk)領(lǐng)先推出DDR5 6400內(nèi)存模塊,...

關(guān)鍵字: DDR 內(nèi)存 組件 KD
關(guān)閉