转载请标明出处:http://blog.csdn.net/android_ls/article/details/9411389
声明:仿人人项目,所用所有图片资源都来源于其它Android移动应用,编写本应用的目的在于学习交流,如涉及侵权请告知,我会及时换掉用到的相关图片。

一、人人官方的消息中心截图如下:

二、消息中心视图的实现。

我个人觉得人人官方的消息中心看着怪怪的,不舒服。因此,实现时我稍作修改,具体实现如下:

1、定义类去继承FrameLayout,源码如下:

package com.everyone.android.ui.message;import android.util.AttributeSet;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.FrameLayout;import com.everyone.android.ui.EveryoneActivity;/*** 功能描述:消息中心视图* @author android_ls*/
public class MessageLayout extends FrameLayout implements OnClickListener {private EveryoneActivity mActivity;public MessageLayout(EveryoneActivity activity) {super(activity);mActivity = activity;setupViews();}public MessageLayout(EveryoneActivity activity, AttributeSet attrs) {super(activity, attrs);mActivity = activity;setupViews();}private void setupViews() {}@Overridepublic void onClick(View v) {}}

2、在setupViews()方法中, 为其设置布局文件代码如下:

 final LayoutInflater mLayoutInflater = LayoutInflater.from(getContext());LinearLayout rootView = (LinearLayout) mLayoutInflater.inflate(R.layout.message, null);addView(rootView);

3、message.xml配置如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:background="#FFFFFF"android:orientation="vertical" ><com.everyone.android.widget.TopMenuNavbarandroid:id="@+id/rl_top_menu_navbar"style="@style/top_navbar" /><RadioGroupandroid:id="@+id/rg_message"android:layout_width="fill_parent"android:layout_height="40dip"android:gravity="center_vertical"android:orientation="horizontal" ><RadioButtonandroid:id="@+id/rb_message"style="@style/message_radio_button"android:layout_width="fill_parent"android:layout_height="fill_parent"android:layout_weight="1"android:text="消息" /><RadioButtonandroid:id="@+id/rb_friend"style="@style/message_radio_button"android:layout_width="fill_parent"android:layout_height="fill_parent"android:layout_weight="1"android:text="好友申请" /><RadioButtonandroid:id="@+id/rb_birthday"style="@style/message_radio_button"android:layout_width="fill_parent"android:layout_height="fill_parent"android:layout_weight="1"android:text="生日提醒" /></RadioGroup><android.support.v4.view.ViewPagerandroid:id="@+id/vp_message"android:layout_width="fill_parent"android:layout_height="wrap_content"></android.support.v4.view.ViewPager></LinearLayout>

在styles.xml中添加的样式如下:

 <style name="message_radio_button"><item name="android:background">@drawable/v5_0_1_tabsbar_background</item><item name="android:button">@null</item><item name="android:checked">false</item><item name="android:gravity">center</item><item name="android:textColor">#000000</item><item name="android:textSize">14sp</item></style>

4、在setupViews()方法中,添加的处理代码如下:

// 对顶部的导航栏进行设置topMenuNavbar = (TopMenuNavbar) rootView.findViewById(R.id.rl_top_menu_navbar);topMenuNavbar.mLlRefresh.setOnClickListener(this);topMenuNavbar.tvTitle.setText("消息中心");topMenuNavbar.ivDownListIcon.setVisibility(View.GONE);topMenuNavbar.ivRefresh.setVisibility(View.GONE);// 初始化RadioGroup及相关组件rgMessageNavbar = (RadioGroup) rootView.findViewById(R.id.rg_message);rbMessage = (RadioButton) rootView.findViewById(R.id.rb_message);rbMessage.setChecked(true);rbFriend = (RadioButton) rootView.findViewById(R.id.rb_friend);rbBirthDay = (RadioButton) rootView.findViewById(R.id.rb_birthday);// 初始化ViewPager组件的子视图View messageView = mLayoutInflater.inflate(R.layout.message_message, null);View friendView = mLayoutInflater.inflate(R.layout.message_friend, null);View birthdayView = mLayoutInflater.inflate(R.layout.message_birthday, null);ArrayList<View> views = new ArrayList<View>();views.add(messageView);views.add(friendView);views.add(birthdayView);// 初始化ViewPager组件,并为其设置数据适配器mViewPager = (ViewPager) rootView.findViewById(R.id.vp_message);ViewPagerAdapter mPagerAdapter = new ViewPagerAdapter(views);mViewPager.setAdapter(mPagerAdapter);mViewPager.setCurrentItem(0);mViewPager.setOnPageChangeListener(new OnPageChangeListener() {public void onPageSelected(int arg0) {}public void onPageScrolled(int arg0, float arg1, int arg2) {}public void onPageScrollStateChanged(int arg0) {if (arg0 == ViewPager.SCROLL_STATE_IDLE) {switch (mViewPager.getCurrentItem()) {case 0:rbMessage.setChecked(true);break;case 1:rbFriend.setChecked(true);break;case 2:rbBirthDay.setChecked(true);break;}}}});rgMessageNavbar.setOnCheckedChangeListener(new OnCheckedChangeListener() {public void onCheckedChanged(RadioGroup group, int checkedId) {switch (checkedId) {case R.id.rb_message:mViewPager.setCurrentItem(0);break;case R.id.rb_friend:mViewPager.setCurrentItem(1);break;case R.id.rb_birthday:mViewPager.setCurrentItem(2);break;}}});

5、运行后的效果图如下:

默认选中消息,效果图如下:

当前选择“好友申请”,效果图如下:

三、完整源码

ViewPagerAdapter类的源码如下:

package com.everyone.android.ui.message;import java.util.ArrayList;import android.os.Parcelable;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;/*** 功能描述:消息中心视图中ViewPager对象的数据适配器* @author android_ls*/
public class ViewPagerAdapter extends PagerAdapter {private ArrayList<View> mViews;public ViewPagerAdapter(ArrayList<View> list) {this.mViews = list;}@Overridepublic Object instantiateItem(View arg0, int arg1) {((ViewPager) arg0).addView(mViews.get(arg1));return mViews.get(arg1);}@Overridepublic void destroyItem(View arg0, int arg1, Object arg2) {((ViewPager) arg0).removeView(mViews.get(arg1));}@Overridepublic int getCount() {return mViews.size();}@Overridepublic boolean isViewFromObject(View arg0, Object arg1) {return arg0 == arg1;}@Overridepublic void finishUpdate(View arg0) {// TODO Auto-generated method stub}@Overridepublic void restoreState(Parcelable arg0, ClassLoader arg1) {// TODO Auto-generated method stub}@Overridepublic Parcelable saveState() {// TODO Auto-generated method stubreturn null;}@Overridepublic void startUpdate(View arg0) {// TODO Auto-generated method stub}}

消息中心视图(MessageLayout)源码如下:

package com.everyone.android.ui.message;import java.util.ArrayList;import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;import com.everyone.android.R;
import com.everyone.android.ui.EveryoneActivity;
import com.everyone.android.widget.TopMenuNavbar;/*** 功能描述:消息中心视图* @author android_ls*/
public class MessageLayout extends FrameLayout implements OnClickListener {private TopMenuNavbar topMenuNavbar;/*** 获取顶部左侧的menu组件* @return*/public LinearLayout getMenuView() {return topMenuNavbar.llShowMenu;}private ViewPager mViewPager;private RadioGroup rgMessageNavbar;private RadioButton rbMessage;private RadioButton rbFriend;private RadioButton rbBirthDay;private EveryoneActivity mActivity;public MessageLayout(EveryoneActivity activity) {super(activity);mActivity = activity;setupViews();}public MessageLayout(EveryoneActivity activity, AttributeSet attrs) {super(activity, attrs);mActivity = activity;setupViews();}private void setupViews() {final LayoutInflater mLayoutInflater = LayoutInflater.from(getContext());LinearLayout rootView = (LinearLayout) mLayoutInflater.inflate(R.layout.message, null);addView(rootView);// 对顶部的导航栏进行设置topMenuNavbar = (TopMenuNavbar) rootView.findViewById(R.id.rl_top_menu_navbar);topMenuNavbar.mLlRefresh.setOnClickListener(this);topMenuNavbar.tvTitle.setText("消息中心");topMenuNavbar.ivDownListIcon.setVisibility(View.GONE);topMenuNavbar.ivRefresh.setVisibility(View.GONE);// 初始化RadioGroup及相关组件rgMessageNavbar = (RadioGroup) rootView.findViewById(R.id.rg_message);rbMessage = (RadioButton) rootView.findViewById(R.id.rb_message);rbMessage.setChecked(true);rbFriend = (RadioButton) rootView.findViewById(R.id.rb_friend);rbBirthDay = (RadioButton) rootView.findViewById(R.id.rb_birthday);// 初始化ViewPager组件的子视图View messageView = mLayoutInflater.inflate(R.layout.message_message, null);View friendView = mLayoutInflater.inflate(R.layout.message_friend, null);View birthdayView = mLayoutInflater.inflate(R.layout.message_birthday, null);ArrayList<View> views = new ArrayList<View>();views.add(messageView);views.add(friendView);views.add(birthdayView);// 初始化ViewPager组件,并为其设置数据适配器mViewPager = (ViewPager) rootView.findViewById(R.id.vp_message);ViewPagerAdapter mPagerAdapter = new ViewPagerAdapter(views);mViewPager.setAdapter(mPagerAdapter);mViewPager.setCurrentItem(0);mViewPager.setOnPageChangeListener(new OnPageChangeListener() {public void onPageSelected(int arg0) {}public void onPageScrolled(int arg0, float arg1, int arg2) {}public void onPageScrollStateChanged(int arg0) {if (arg0 == ViewPager.SCROLL_STATE_IDLE) {switch (mViewPager.getCurrentItem()) {case 0:rbMessage.setChecked(true);break;case 1:rbFriend.setChecked(true);break;case 2:rbBirthDay.setChecked(true);break;}}}});rgMessageNavbar.setOnCheckedChangeListener(new OnCheckedChangeListener() {public void onCheckedChanged(RadioGroup group, int checkedId) {switch (checkedId) {case R.id.rb_message:mViewPager.setCurrentItem(0);break;case R.id.rb_friend:mViewPager.setCurrentItem(1);break;case R.id.rb_birthday:mViewPager.setCurrentItem(2);break;}}});}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.ll_refresh:// 顶部右侧编辑事件处理break;default:break;}}}

由于人人开放平台未提供有关消息的API,因此,这里我只实现其UI部分。

Android仿人人客户端(v5.7.1)——消息中心视图的实现相关推荐

  1. Android仿人人客户端(v5.7.1)——项目框架新做的调整描述(项目中基类java源码)...

    转载请标明出处:http://blog.csdn.net/android_ls/article/details/8909068 声明:没看过仿人人android客户端系列博文,前面的相关文章的朋友,请 ...

  2. Android仿人人客户端(v5.7.1)——对从服务器端(网络)获取的图片进行本地双缓存处理(编码实现)...

    转载请标明出处:http://blog.csdn.net/android_ls/article/details/8797740 这篇是基于上一篇Android仿人人客户端(v5.7.1)--对从服务器 ...

  3. Android仿人人客户端(v5.7.1)——通过HTTPS协议的POST方式获取用户的基本信息

    转载请标明出处:http://blog.csdn.net/android_ls/article/details/8770537 一.扩展之前的网络模块 基于Android仿人人客户端(v5.7.1)- ...

  4. Android仿人人客户端(v5.7.1)——采用RelativeLayout做父容器,实现左侧滑动菜单(二)...

    转载请标明出处:http://blog.csdn.net/android_ls/article/details/8758943 上一篇在Android仿人人客户端(v5.7.1)--应用主界面之滑动效 ...

  5. Android仿人人客户端(v5.7.1)——网络模块处理的架构

    转载请标明出处:http://blog.csdn.net/android_ls/article/details/8732427 声明:仿人人项目,所用所有图片资源都来源于官方人人android客户端, ...

  6. Android仿人人客户端(v5.7.1)——采用RelativeLayout做父容器,实现左侧滑动菜单(二)

    转载请标明出处:http://blog.csdn.net/android_ls/article/details/8758943 上一篇在Android仿人人客户端(v5.7.1)--应用主界面之滑动效 ...

  7. Android仿人人客户端(v5.7.1)——点击左侧菜单栏中的Item切换视图

    转载请标明出处:http://blog.csdn.net/android_ls/article/details/8765193 在前面几讲中,左侧菜单(左侧面板).满足滑动或点击子View的方式,打开 ...

  8. Android仿人人客户端(v5.7.1)——应用主界面之左侧面板UI实现

    转载请标明出处:http://blog.csdn.net/android_ls/article/details/8749188 声明:仿人人项目,所用所有图片资源都来源于其它Android移动应用,编 ...

  9. [置顶] Android仿人人客户端(v5.7.1)——应用主界面之左侧面板UI实现

    转载请标明出处:http://blog.csdn.net/android_ls/article/details/8749188  声明:仿人人项目,所用所有图片资源都来源于其它Android移动应用, ...

  10. Android仿人人客户端(v5.7.1)——新鲜事之下拉列表(过滤项列表)

    转载请标明出处:http://blog.csdn.net/android_ls/article/details/8884335 声明:仿人人项目,所用所有图片资源都来源于其它Android移动应用,编 ...

最新文章

  1. 【BZOJ4720】【NOIP2016】换教室
  2. 网站栏目页要如何进行优化呢?
  3. 深度揭秘:大数据时代企业卖技术还是卖数据?
  4. ACL20 best paper荣誉提名 | DO NOT STOP Pre-training!
  5. go html template 数据怎么加减乘除_Go 视图模板篇(五):模板布局和继承
  6. 家长工作比较忙,没有什么时间来带孩子,交给家里老人会养成一些坏习惯吗?
  7. Redis 缓存过期(maxmemory) 配置/算法 详解
  8. JS字符串截取(获取指定字符后面的所有字符内容)
  9. 中国计算机类研究生学校排名,2018考研:计算机专业全球院校排名公布,上海交通大学竟排第一?...
  10. android 人脸识别边框_Android相机预览,指定区域显示预览框,在区域内出现人脸进行人脸识别,并抓拍人脸照片存在本地...
  11. H5案例分析和场景应用
  12. PSD缩略图的设置方法
  13. 【图形学实验】Loop Subdivision与Modified Butterfly Subdivision
  14. 使用Maven构建Eova项目
  15. zxing扫描二维码和识别图片二维码及其优化策略
  16. 爬取王者荣耀皮肤图片
  17. 电脑硬盘右击计算机就卡死,电脑右键就卡死是什么原因?
  18. Linux26期 6月21日
  19. 咸鱼软件应用—Arnold2019安装
  20. 美团后台开发实习生面试经验

热门文章

  1. python绘制彩色地震剖面断层解释_地震剖面上的断层分析及相关意义
  2. Android简易天气App
  3. 2040: [蓝桥杯2022初赛] 砍竹子(优先队列)
  4. Spring Cloud CAP 简述
  5. xp系统打开sql服务器不可用,xp系统安装sql2000个人版无反应
  6. android 验证手机、邮箱格式
  7. java smtp.126.com_java开发_STMP邮箱客户端_发送邮件
  8. 阿里中台搞了3年,搞凉了?网传:副总裁玄难“背锅”,辞职创业!
  9. 计算机win7设置用户密码,Win7怎么设置密码 win7设置开机密码教程
  10. Mac下查看公网以及内网IP地址