Android自定义页面指示器

来源:互联网 发布:php地区三级联动 编辑:程序博客网 时间:2024/04/30 15:02

        前段时间项目中需求中加入了一个分页加载的功能,其中自己写了一个自定义的页面指示器,在一个FrameLayout里边放了一个ViewPagerLinearLayoutViewPager负责加载展示多个页面,LinearLayout区域负责展示自定义的指示点。

// ViewFlipper的指示点

@ViewInject(id = R.id.pointLayout)

LinearLayout pointGroup;

//初始化指示点的个数

//count 是页面的个数,有几个页面就初始化几个指示点

private void iniBannerPoint(int count) {

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

View view = new View(this);

 

//设置指示点的宽度和高度为15dp,15dp

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(15, 15);

//设置指示点之间的间距为15dp

params.leftMargin = 15;

view.setLayoutParams(params);

//使用自定义的drawablepoint_select_background,代码下面给)绘制view的背景

     view.setBackgroundResource(R.drawable.point_select_background);

//初始化为未选中状态

view.setEnabled(false);

pointGroup.addView(view);

}

//默认初始化指示点开始指示在第一个页面

pointGroup.getChildAt(0).setEnabled(true);

}

自定义的drawableselector选择器)point_select_background.xml

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

<selector xmlns:android="http://schemas.android.com/apk/res/android" >

    <item android:drawable="@drawable/point_unable_background"  android:state_enabled="false"/>

    <item android:drawable="@drawable/point_enable_background"  android:state_enabled="true"/>

</selector>

自定义的drawableshapepoint_unable_background.xml(未选中点的指示点样式)

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

<shape xmlns:android="http://schemas.android.com/apk/res/android" 

    android:shape="oval">

    <solid android:color="#ffffffff"/>

<corners android:radius="5dp"/>

</shape>

 

自定义的drawableshapepoint_enable_background.xml(选中点的指示点样式)

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

<shape xmlns:android="http://schemas.android.com/apk/res/android" 

    android:shape="oval">

<solid android:color="#fffe9a00"/>

<corners android:radius="5dp"/>    

</shape>

与手势滑动翻页联动:activity需要实现OnPageChangeListener接口,为ViewPager添加翻页监听器vp.setOnPageChangeListener(this);在activity中显现OnPageChangeListener接口中的三个抽象方法

//用于记录上次的页面页数

private int preposition = 0;

@Override

public void onPageScrollStateChanged(int arg0) {

}

@Override

public void onPageScrolled(int arg0, float arg1, int arg2) {

}

@Override

//在页面选中之后,触发该方法,重绘指示点

public void onPageSelected(int position) {

int id = position % count;

View view0 = pointGroup.getChildAt(preposition % count);

//将上一个页面的指示点设置为未选中

view0.setEnabled(false);

View view1 = pointGroup.getChildAt(position % count);

//将新页面的指示点设置为选中状态

view1.setEnabled(true);

//将新页面的页数赋值给preposition

preposition = position;

}

这个页面指示器比较简单,不需要引入外部繁冗的指示点框架,运行效率比较高,需要的筒子们可以试试,但是它也存在一个缺点,点击指示点无法跳转到相应的页面。

 

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 裤衩给孩子买的有点肥怎么办 到交警队立案后医疗费没了怎么办 交警扣车车里的贵重东西没了怎么办 睾丸内囊肿割了又长怎么办 我把别人的卵子踢碎了怎么办 两岁宝宝不小心被猫抓出血怎么办 两岁宝宝小蛋蛋肿了怎么办 吃大胺片过敏蛋皮又痛又痒怎么办 刚出生二十天宝宝蛋蛋有疝气怎么办 宝宝八个月蛋蛋一个没掉下来怎么办 引产23天同房内射肚子疼怎么办l 房东禁止养宠物如果养了怎么办 圆通快递退回但没有签收记录怎么办 信用卡没有收到又退回去了怎么办 新疆不给邮寄快递被退回运费怎么办 淘宝上已付款还在想留言怎么办 b超显示肾结石但x光看不到怎么办 洗脚让洗脚妹摸射精了怎么办 在新疆塔城干活不给工资怎么办 挨打了屁股肿的又大又硬怎么办 李贞将军有关电影小腿肌腱疼怎么办 朋友老婆老是背地里说我坏话怎么办 当你听到别人在背后说你时怎么办 分手了和前任是同事需要见面怎么办 和附近的人聊天他约你见面怎么办 微信约妹子发完红包拉黑了怎么办 户口本被前妻扣着不能结婚怎么办 部队当兵户口没注销退伍回去怎么办 没打疫苗的狗狗咬了我的嘴巴怎么办 新车被撞了还没上牌怎么办? 签了合同上两天班想辞职怎么办 刚到公司上班两天想辞职怎么办 签入职合同一天后就不想干了怎么办 入职材料交了第二天就想离职怎么办 宝宝40周多了还不想出来怎么办 工厂上班不到三个月不给辞工怎么办 单位辞职后不上班了保险怎么办 药流6个小时没流下来怎么办 小孩有口臭怎么办这几天不想吃饭 七个月宝宝口臭不想吃饭怎么办啊 老公工作累想要辞职不上班怎么办