标签:android blog http color java os 使用 io strong
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/25708045
一哥们去新疆前给了我个任务,就是整这东西,哥们回来了,赶紧做了个,哈哈,可惜没给我带切糕。
新版微信的效果,一眼看上去准备用ViewpagerIndicator来实现,但是需要在Indicator的后面添加消息通知(BadgeView),可惜没有办法自定义Indicator,最后还是自己写了个实现。
主结构:ViewPager和FragmentPagerAdapter
效果图:
1、主布局文件
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="#eee"
- android:orientation="vertical" >
-
- <include layout="@layout/top1"/>
- <include layout="@layout/top2"/>
-
- <android.support.v4.view.ViewPager
- android:id="@+id/id_viewpager"
- android:layout_width="fill_parent"
- android:layout_height="0dp"
- android:layout_weight="1" >
- </android.support.v4.view.ViewPager>
-
-
- </LinearLayout>
2、top2.xml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical" >
-
- <LinearLayout
- android:id="@+id/lllayout"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal" >
-
- <LinearLayout
- android:id="@+id/id_tab_liaotian_ly"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:background="@drawable/guide_round"
- android:gravity="center"
- android:orientation="horizontal"
- android:padding="10dip" >
-
- <TextView
- android:id="@+id/id_liaotian"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:gravity="center"
- android:text="聊天"
- android:textColor="@color/green"
- android:textSize="15dip" />
- </LinearLayout>
-
- <LinearLayout
- android:id="@+id/id_tab_faxian_ly"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:background="@drawable/guide_round"
- android:clickable="true"
- android:gravity="center"
- android:orientation="horizontal"
- android:padding="10dip"
- android:saveEnabled="false" >
-
- <TextView
- android:id="@+id/id_faxian"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:gravity="center"
- android:text="发现"
- android:textColor="@color/black"
- android:textSize="15dip" />
- </LinearLayout>
-
- <LinearLayout
- android:id="@+id/id_tab_tongxunlu_ly"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:background="@drawable/guide_round"
- android:focusable="false"
- android:gravity="center"
- android:orientation="horizontal"
- android:padding="10dip" >
-
- <TextView
- android:id="@+id/id_tongxunlu"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:gravity="center"
- android:text="通讯录"
- android:textColor="@color/black"
- android:textSize="15dip" />
- </LinearLayout>
- </LinearLayout>
-
- <ImageView
- android:id="@+id/id_tab_line"
- android:layout_width="200dp"
- android:layout_height="wrap_content"
- android:background="@drawable/vpi__tab_selected_pressed_holo" >
- </ImageView>
-
- </LinearLayout>
这个布局也很简单,在布局中加入了一个ImageView,这个会在程序中动态计算宽度,作为Tab的引导线。
3、主程序
主要就是为ViewPager设置FragmentPagerAdapter,然后添加切换的监听,生成BadgeView,这里没有使用BadgeView.setTargetView(targetView),因为我希望通知显示在文本的后面,setTargetView可能只能设置显示位置为目标控件的内部位置。
再次就是TabLine的跟随手指的效果,首先会根据Tab页的数量为TabLine设置宽度,然后在onPageScrolled中根据position,positionOffset,currentIndex,判断用户当前手指滑动的方向,然后根据positionOffset这个百分比乘以TabLine的宽度,动态设置TabLine的leftMargin实现跟随手指移动的效果。
4、每个Fragment的代码
- package com.example.mainframework04;
-
- import android.os.Bundle;
- import android.support.v4.app.Fragment;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
-
- public class MainTab01 extends Fragment
- {
-
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
- {
- return inflater.inflate(R.layout.main_tab_01, container, false);
-
- }
-
- }
3个标签页基本一致,不重复贴了。
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/ly_main_weixin"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:background="#fcfcfc"
- android:orientation="vertical" >
-
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="0dp"
- android:layout_weight="1"
- android:gravity="center"
- android:text="this is first tab !"
- android:textColor="#000000"
- android:textSize="30sp"
- />
-
- </LinearLayout>
Fragment的布局文件,同样三个基本一致。
好了,结束,看起来挺复杂,实现起来还可以。代码写得比较仓促,有啥不足地方请指出来。最后求留言,求赞~
源码点击下载
包含BadgeView的完整代码点击下载
高仿微信5.2.1主界面架构 包含消息通知
标签:android blog http color java os 使用 io strong
原文地址:http://www.cnblogs.com/dongweiq/p/3934325.html