一.首先搭建这个项目框架的时候需要关联两个库文件,分别是menu_library和xutillibrary。
二.现在把项目架构中需要建立的包展示如下:
三.把搭建的项目架构展示如下:
四.现在开始写具体实现这个效果的逻辑:
1.首先先把项目搭建的三个布局写出来:
a. activity_main.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/layout_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
</FrameLayout>
b.frag_home.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="match_parent"
android:orientation="vertical" >
<android.support.v4.view.ViewPager
android:id="@+id/layout_content"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
<RadioGroup
android:id="@+id/main_radio"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_gravity="bottom"
android:background="@drawable/bottom_tab_bg"
android:gravity="center"
android:orientation="horizontal"
android:paddingTop="2dp">
<RadioButton
android:id="@+id/rb_function"
style="@style/main_tab_bottom"
android:drawableTop="@drawable/icon_function"
android:text="@string/tab_function"/>
<RadioButton
android:id="@+id/rb_news_center"
style="@style/main_tab_bottom"
android:drawableTop="@drawable/icon_newscenter"
android:text="@string/tab_news_center" />
<RadioButton
android:id="@+id/rb_smart_service"
style="@style/main_tab_bottom"
android:drawableTop="@drawable/icon_smartservice"
android:text="@string/tab_smart_service" />
<RadioButton
android:id="@+id/rb_gov_affairs"
style="@style/main_tab_bottom"
android:drawableTop="@drawable/icon_govaffairs"
android:text="@string/tab_gov_affairs" />
<RadioButton
android:id="@+id/rb_setting"
style="@style/main_tab_bottom"
android:drawableTop="@drawable/icon_setting"
android:text="@string/tab_setting" />
</RadioGroup>
</LinearLayout>
c.menu_frame
<?xml version="1.0" encoding="utf-8"?>
<!-- 侧拉栏Menu布局 -->
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/menu"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
2.其次开始写逻辑:
a. BasePager.java
// BasePager的目的就是把ViewPager5张显示page的公共部分抽取出来,初始化视图和初始化数据
package com.saiermeng.jiagou.base;
import android.content.Context;
import android.view.View;
public abstract class BasePager {
public Context context;
public View view;
//private Object view;
public BasePager(Context context){
this.context=context;
view =initView();
}
/*private Object initView() {
// TODO Auto-generated method stub
return null;*/
public abstract View initView();
public abstract void initData();
public View getRootView(){
return view;
}
}
b. BaseFragment.java
//BaseFragment的目的就是把HomeFragment,MenuFragment的公共部分抽取出来,拿到上下文,初始化视图,初始化数据
package com.saiermeng.jiagou.base;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public abstract class BaseFragment extends Fragment {
public Context context;
private View view;
//private Object view;
//private FragmentActivity context;
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
//拿到上下文
context=getActivity();
super.onCreate(savedInstanceState);
}
//初始化视图
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view=initView();
return view;
// super.onCreateView(savedInstanceState);
}
//初始化数据
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
initData();
super.onActivityCreated(savedInstanceState);
}
/*private void initData() {
// TODO Auto-generated method stub
}*/
/*private View initView() {
// TODO Auto-generated method stub
return null;
}*/
public abstract View initView();
public abstract void initData();
//抽象方法的作用是,你在此类里不必实现它,只是一个虚方法,所有的实现可以到继承此类的子类里面去做.
//你也可以理解为,抽象方法就是用来被重载的方法.你可以在子类里对它进行重载,也可以不进行重载.
}
c.HomeFragment.java
// HomeFragment的目的就是:1.点击哪个RadioButton,页面上显示对应的图片信息 2.把首页,新闻中心...添加到list集合中,通过Adapter显示出来
package com.saiermeng.jiagou.Fragment;
import java.util.ArrayList;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import com.lidroid.xutils.ViewUtils;
import com.lidroid.xutils.view.annotation.ViewInject;
import com.saiermeng.jiagou.R;
import com.saiermeng.jiagou.base.BaseFragment;
import com.saiermeng.jiagou.base.BasePager;
import com.saiermeng.jiagou.pager.NewCenterPager;
import com.saiermeng.jiagou.pager.FunctionPager;
import com.saiermeng.jiagou.pager.GovAffairsPager;
import com.saiermeng.jiagou.pager.SettingPager;
import com.saiermeng.jiagou.pager.SmartServicePager;
public class HomeFragment extends BaseFragment {
private ArrayList<BasePager> list=new ArrayList<BasePager>();
private View view;
@ViewInject(R.id.layout_content)
private ViewPager layout_content;
@ViewInject(R.id.main_radio)
private RadioGroup main_radio;
@Override
public View initView() {
// TODO Auto-generated method stub
//加载布局
view=View.inflate(context, R.layout.frag_home, null);
//绑定view操作通过注解去拿到控件的id
ViewUtils.inject(this, view);
main_radio.setOnCheckedChangeListener(new OnCheckedChangeListener(){
@Override
public void onCheckedChanged(RadioGroup arg0, int arg1) {
// TODO Auto-generated method stub
switch(arg1){
case R.id.rb_function:
layout_content.setCurrentItem(0);
break;
case R.id.rb_news_center:
layout_content.setCurrentItem(1);
break;
case R.id.rb_smart_service:
layout_content.setCurrentItem(2);
break;
case R.id.rb_gov_affairs:
layout_content.setCurrentItem(3);
break;
case R.id.rb_setting:
layout_content.setCurrentItem(4);
break;
default:
break;
}
}
});
//你滑动的时候viewpager换页的操作
layout_content.setOnPageChangeListener(new OnPageChangeListener(){
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
@Override
public void onPageSelected(int arg0) {
// TODO Auto-generated method stub
//
list.get(arg0).initData();
}
});
//默认的选中他(首页)
main_radio.check(R.id.rb_function);
return view;
}
@Override
public void initData() {
// TODO Auto-generated method stub
//初始化一下,保证这个list集合中的元素为空
list.clear();
list.add(new FunctionPager(context));
list.add(new NewCenterPager(context));
list.add(new SmartServicePager(context));
list.add(new GovAffairsPager(context));
list.add(new SettingPager(context));
layout_content.setAdapter(new MyAdapter());
}
public class MyAdapter extends PagerAdapter {
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
// TODO Auto-generated method stub
return arg0==arg1;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
// TODO Auto-generated method stub
container.removeView((View)object);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
// TODO Auto-generated method stub
container.addView(list.get(position).getRootView());
return list.get(position).getRootView();
}
}
}
d.MenuFragment.java
/* MenuFragment 的目的就是加载侧拉栏里面的信息,因为它和HomeFragment一样,需要initView和initData,所以把它们的共同的部分抽取成BaseFragment让
MenuFragment和HomeFragment继承*/
package com.saiermeng.jiagou.Fragment;
import android.view.View;
import android.widget.TextView;
import com.saiermeng.jiagou.base.BaseFragment;
public class MenuFragment extends BaseFragment {
@Override
public View initView() {
// TODO Auto-generated method stub
TextView textView = new TextView(context);
textView.setText("侧拉栏");
return textView;
}
@Override
public void initData() {
// TODO Auto-generated method stub
}
}
e.FunctionPager.java
package com.saiermeng.jiagou.pager;
import android.content.Context;
import android.view.View;
import android.widget.TextView;
import com.saiermeng.jiagou.base.BasePager;
public class FunctionPager extends BasePager {
public FunctionPager(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
@Override
public View initView() {
// TODO Auto-generated method stub
TextView textView = new TextView(context);
textView.setText("首页");
return textView;
}
@Override
public void initData() {
// TODO Auto-generated method stub
}
}
f.GovAffairsPager.java
package com.saiermeng.jiagou.pager;
import android.content.Context;
import android.view.View;
import android.widget.TextView;
import com.saiermeng.jiagou.base.BasePager;
public class GovAffairsPager extends BasePager {
public GovAffairsPager(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
@Override
public View initView() {
// TODO Auto-generated method stub
TextView textView = new TextView(context);
textView.setText("政务中心");
return textView;
}
@Override
public void initData() {
// TODO Auto-generated method stub
}
}
g. NewCenterPager.java
package com.saiermeng.jiagou.pager;
import android.content.Context;
import android.view.View;
import android.widget.TextView;
import com.saiermeng.jiagou.base.BasePager;
public class NewCenterPager extends BasePager {
public NewCenterPager(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
@Override
public View initView() {
// TODO Auto-generated method stub
TextView textView = new TextView(context);
textView.setText("新闻中心");
return textView;
}
@Override
public void initData() {
// TODO Auto-generated method stub
}
}
h.SettingPager .java
package com.saiermeng.jiagou.pager;
import android.content.Context;
import android.view.View;
import android.widget.TextView;
import com.saiermeng.jiagou.base.BasePager;
public class SettingPager extends BasePager {
public SettingPager(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
@Override
public View initView() {
// TODO Auto-generated method stub
TextView textView = new TextView(context);
textView.setText("设置中心");
return textView;
}
@Override
public void initData() {
// TODO Auto-generated method stub
}
}
i.SmartServicePager .java
package com.saiermeng.jiagou.pager;
import android.content.Context;
import android.view.View;
import android.widget.TextView;
import com.saiermeng.jiagou.base.BasePager;
public class SmartServicePager extends BasePager {
public SmartServicePager(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
@Override
public View initView() {
// TODO Auto-generated method stub
TextView textView = new TextView(context);
textView.setText("智慧服务");
return textView;
}
@Override
public void initData() {
// TODO Auto-generated method stub
}
}
j. MainActivity.java
package com.saiermeng.jiagou;
import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
import com.jeremyfeinstein.slidingmenu.lib.app.SlidingFragmentActivity;
import com.saiermeng.jiagou.Fragment.HomeFragment;
import com.saiermeng.jiagou.Fragment.MenuFragment;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.Window;
public class MainActivity extends SlidingFragmentActivity {
private SlidingMenu slidingMenu;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
//加载布局
setContentView(R.layout.activity_main);
//加载布局
setBehindContentView(R.layout.menu_frame);
//拿到SlidingMenu这个对象
slidingMenu=getSlidingMenu();
//设置的侧滑为左侧滑
slidingMenu.setMode(SlidingMenu.LEFT);
//设置左边侧滑的宽度
slidingMenu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
//侧滑分界线的阴影部分
slidingMenu.setShadowDrawable(R.drawable.shadow);
//侧滑分界线阴影部分的宽度
slidingMenu.setShadowWidthRes(R.dimen.shadow_width);
//整个屏幕可以拖拽
slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
//拿到MenuFragment的对象
MenuFragment menuFragment = new MenuFragment();
//替换左侧帧布局操作
getSupportFragmentManager().beginTransaction().replace(R.id.menu, menuFragment, "Menu").commit();
//替换内容页的帧布局操作
//拿到HomeFragment的对象
HomeFragment homeFragment = new HomeFragment();
getSupportFragmentManager().beginTransaction().replace(R.id.layout_container, homeFragment, "Home").commit();
}
}