android中分页样式,Android TAb分页菜单实现总结

第三种方法:ActivityGroup+一些TextView布局.(在这里我们自定实现动态滚动效果)

分页Tab的实现方法和上面方法类是,都是运用ActivityGroup的性质,而上面是通过GridView生成,而我们这边是我们自定义View控件实现.

这里我主要说一下怎样实现ActionBar:

代码片段:

/***

* 自定义控件

*

* @author zhangjia

*

*         在这里我要说明一点 我们在创建RectF矩形的时候,

*

*         参照物原点是所在"父控件的左上角".

*

*/

publicclassActionBarextendsLinearLayoutimplementsOnClickListener {

privateImageView tv1;

privateImageView tv2;

privateImageView tv3;

privateImageView tv4;

privatePaint paint;// 画笔

privateRectF curRectF;// draw当前bar

privateRectF tarRectF;// draw被点击bar

privatefinalintspace_x =0;// 相当于pading.

privatefinalintspace_y =0;// 相当于pading

privatefinaldoublestep =32;// 速度step.

publicActionBar(Context context) {

super(context);

}

/***

* 构造方法

*

* @param context

* @param attrs

*/

publicActionBar(Context context, AttributeSet attrs) {

super(context, attrs);

setWillNotDraw(false);

LayoutInflater.from(context).inflate(R.layout.action_bar,this,true);

paint =newPaint();

paint.setAntiAlias(true);

tv1 = (ImageView) findViewById(R.id.tv1);

tv2 = (ImageView) findViewById(R.id.tv2);

tv3 = (ImageView) findViewById(R.id.tv3);

tv4 = (ImageView) findViewById(R.id.tv4);

tv1.setOnClickListener(this);

tv2.setOnClickListener(this);

tv3.setOnClickListener(this);

tv4.setOnClickListener(this);

curRectF =null;

tarRectF =null;

}

/***

* invalidate():调用这个方法会执行onDraw()方法,但是前提是:自己把invalidate()方法执行结束在进行执行.

*/

@Override

protectedvoidonDraw(Canvas canvas) {

super.onDraw(canvas);

canvas.drawColor(Color.BLACK);

paint.setColor(Color.RED);

// 如果当前curRectF=null,也就是第一次访问,则默认为draw第一个bar

if(curRectF ==null)

curRectF =newRectF(tv1.getLeft() + space_x, tv1.getTop()

+ space_y, tv1.getRight() - space_x, tv1.getBottom()

- space_y);

// 第一次方位tarRectF=null,默认为draw

if(tarRectF ==null)

tarRectF =newRectF(tv1.getLeft() + space_x, tv1.getTop()

+ space_y, tv1.getRight() - space_x, tv1.getBottom()

- space_y);

/***

* 作用:如果在这个范围内则,以这个为最终位置,(不明的白的话,你可以把这个注释运行下你就知道why了.)

*/

if(Math.abs(curRectF.left - tarRectF.left) 

curRectF.left = tarRectF.left;

curRectF.right = tarRectF.right;

}

/***

* 说明目标在当前的左侧,需要向左移动(每次矩形移动step,则进行invalidate(),从新进行移动...)

*/

if(curRectF.left > tarRectF.left) {

curRectF.left -= step;

curRectF.right -= step;

invalidate();// 继续刷新,从而实现滑动效果,每次step32.

}

/***

* 说明目标在当前的右侧,需要向右移动(每次矩形移动step,则进行invalidate(),从新进行移动...)

*/

elseif(curRectF.left 

curRectF.left += step;

curRectF.right += step;

invalidate();

}

// canvas.drawRect(curRectF, paint);

// 参数,矩形,弧度,画笔

canvas.drawRoundRect(curRectF,5,5, paint);

}

/****

* 这里要记录目标矩形的坐标

*/

@Override

publicvoidonClick(View v) {

tarRectF.left = v.getLeft() + space_x;

tarRectF.right = v.getRight() - space_x;

invalidate();// 刷新

System.out.println("tarRectF.top="+ tarRectF.top +",v.getTop()="

+ v.getTop() +", v.getBottom()"+ v.getBottom());

}

}

上面已经讲的很详细了,就不啰嗦了.

效果图:

e84ead5a5b54e753728d5582f6fb56f7.png

99ed77cbf0cca81b2ec6d8535aeb605e.png

大致就这么多了。

额外:还有一点就是有的会用到RadioButton这个控件,其实就是对其进行了一些调整,这里我简单说明一下应用:

可以取消button样式,用android:drawableTop显示图片,从而达到想要的效果.

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

android:layout_width="match_parent"

android:layout_height="match_parent">

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_gravity="bottom"

android:background="@drawable/maintab_toolbar_bg"

android:gravity="center"

android:orientation="horizontal">

android:id="@+id/button1"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_gravity="center"

android:layout_weight="1"

android:background="@drawable/home_btn_bg"

android:button="@null"

android:drawableTop="@drawable/icon_1_n"

android:gravity="center"

android:paddingTop="5dp"

android:text="首页"

android:textSize="12sp"/>

android:id="@+id/button2"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_weight="1"

android:background="@drawable/home_btn_bg"

android:button="@null"

android:drawableTop="@drawable/icon_2_n"

android:gravity="center"

android:paddingTop="5dp"

android:text="短信"

android:textSize="12sp"/>

android:id="@+id/button3"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_weight="1"

android:background="@drawable/home_btn_bg"

android:button="@null"

android:drawableTop="@drawable/icon_3_n"

android:gravity="center"

android:paddingTop="5dp"

android:text="联系人"

android:textSize="12sp"/>

android:id="@+id/button4"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_weight="1"

android:background="@drawable/home_btn_bg"

android:button="@null"

android:drawableTop="@drawable/icon_4_n"

android:gravity="center"

android:paddingTop="5dp"

android:text="搜索"

android:textSize="12sp"/>

这里我们还需要selector.xml

实现点击效果.

示例图:

f4fb696986d276ba8866260f6ec8da27.png

9681cc7aefb8783c37570a04a0a88a8a.png

就说这么多了,情况因人而异.

本篇文章相关代码下载

具体下载目录在 /2012年资料/8月/30日/Android TAb分页菜单实现总结0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值