自定義頁碼顯示控制項PageNumberView

2021-07-31 02:49:26 字數 2983 閱讀 2375

上述效果使用了viewpager+自製的pagenumberview實現的。下面來介紹一下具體實現:

首先是布局

<?xml version="1.0" encoding="utf-8"?>

布局採用了radiobutton來顯示頁碼,最多顯示5頁。(button與radiobutton都採用了自定義樣式。)

再來看一下pagenumberview**

public class pagenumberview extends relativelayout

public pagenumberview(context context, attributeset attrs)

/*** 載入自定義布局的地方

* @param context

*/private void initlayout(context context)

/*** 初始化各控制項的地方

* @param v

*/private void initpagenumview(view v) else if (msecond.ischecked())else if (mthird.ischecked())else if(mfourth.ischecked())else if(mfifth.ischecked())

}});

mfirstpage.setonclicklistener(new onclicklistener()

});mnextpage.setonclicklistener(new onclicklistener() else if (msecond.ischecked())else if (mthird.ischecked())else if(mfourth.ischecked())else if(mfifth.ischecked())

}});

mlastpage.setonclicklistener(new onclicklistener()

});}

private void initradiogruop()

}else

break;

case r.id.rbsecond:

mcurrentpagenum = integer.parseint(msecond.gettext().tostring());

updatepadiobuttontext(mcurrentpagenum);

mviewpager.setcurrentitem(mcurrentpagenum-1,false);

break;

case r.id.rbthird:

if (ishandcheck)

break;

case r.id.rbfourth:

mcurrentpagenum = integer.parseint(mfourth.gettext().tostring());

updatepadiobuttontext(mcurrentpagenum);

mviewpager.setcurrentitem(mcurrentpagenum-1,false);

break;

case r.id.rbfifth:

mcurrentpagenum = integer.parseint(mfifth.gettext().tostring());

updatepadiobuttontext(mcurrentpagenum);

mviewpager.setcurrentitem(mcurrentpagenum-1,false);

break;

default:

break;}}

}}});}

/*** 給外界提供繫結viewpager的方法

*/public void setviewpager(viewpager viewpager)

/*** 給外界提供設定頁碼總數的方法

* @param totalpages

*/public void setmtotalpages(int totalpages)

/*** 根據總頁數更新頁碼顯示狀況

*/private void updatepagenum()else

}/**

* 控制顯示頁碼的radiobutton顯示個數

*/private void setpagenubradiobutton(int pagenum)else if (pagenum == 2)else if (pagenum == 3)else if (pagenum == 4)else if (pagenum == 5)

}/**

* radiobutton的text設定

* @param first

*/private void setradiobuttontext(int first)

/*** 更新radiobutton的text設定

*/private void updatepadiobuttontext(int currentpagenum)else if (currentpagenum == mtotalpages)else if (currentpagenum+1 == mtotalpages)else if (currentpagenum == 1)else if (currentpagenum == 2)else }}

使用時與viewpager一起使用

noslideviewpager是禁止滑動的viewpager。使用原生的viewpager亦可,不過這裡沒有新增viewpager滑動時頁碼切換的邏輯。

使用時通過setviewpager(viewpager),與setmtotalpages(totallpages) 讓pagenumberview繫結相應的viewpager並獲取viewpager頁數即可。

ps:上述的展示布局是執行在橫屏的平板上的。

自定義控制項 VIewPager顯示多個Item

一直以來想搞明白這個不完全的viewpager是怎麼做到的,有幸看到這片篇文章 有二種實現方法 1.設定的屬性 1.clipchildren屬性 2.setpagemargin 3.更新item外界面 2.重寫getpagewidth public class multiplepageradapte...

使用自定義控制項顯示數字

有時候,出於美觀需要,我們需求將數字顯示為下圖右側效果,實現比較簡單.主要 做筆記如下 在專案中新建類mydigitalex,繼承自control public class mydigital control建立依賴屬性,用於接受數字字串.並重寫onrender方法 using system usi...

自定義控制項 VIewPager顯示多個Item

一直以來想搞明白這個不完全的viewpager是怎麼做到的,有幸看到這片篇文章 有二種實現方法 1.設定的屬性 1.clipchildren屬性 2.setpagemargin 3.更新item外界面 2.重寫getpagewidth public class multiplepageradapte...