爱奇艺

爱奇艺步骤
首先主页面只有一个activity,所以activity.xml定义为一个FrameLayout,让其他布局填充
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/fl_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
 
</FrameLayout>
首先考虑页面分为两部分
下面是界面考虑


定义一个LinearLayout
上面是一个自定义的ViewPager
下面是RadioGroup里面五个RadioButton
整体是这样
<?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" >
    <com.pan.view.NoScrollViewPager
        android:id="@+id/vp_content"
        android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
        />
<RadioGroup
            android:id="@+id/main_rg_choose"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/main_radiogroup_shape"
            android:orientation="horizontal" >


            <RadioButton
                android:id="@+id/main_rb_recom"
                style="@style/Bottom_Tab_Style"
                android:checked="true"
                android:drawableTop="@drawable/main_radiobuttonrecom_selector"
                android:text="推荐" />


            <RadioButton
                android:id="@+id/main_rb_find"
                style="@style/Bottom_Tab_Style"
                android:drawableTop="@drawable/main_radiobuttonfind_selector"
                android:text="服务" />


            <RadioButton 
                android:id="@+id/main_rb_vip"
                style="@style/Bottom_Tab_Style"
                android:drawableTop="@drawable/main_radiobuttonvip_selector"
                android:text="VIP会员" />


            <RadioButton
                 android:id="@+id/main_rb_my"
                style="@style/Bottom_Tab_Style"
                android:drawableTop="@drawable/main_radiobuttonmy_selector"
                android:text="我的" />


            <RadioButton
                 android:id="@+id/main_rb_friend"
                style="@style/Bottom_Tab_Style"
                android:drawableTop="@drawable/main_radiobuttonfriend_selector"
                android:text="泡泡" />
        </RadioGroup>
    
</LinearLayout>
上面自定义的viewPager主要是让其不能左右滑动
然后通过事务将这个布局替换activity.xml布局


/**
* 初始化fragment
* */
private void initFragment(){
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();//开始事务
transaction.replace(R.id.fl_main, new ContentFragment(),TAG_CONTENT);//将主界面activity换成contentFragment
transaction.commit();
//Fragment byTag = fm.findFragmentByTag(TAG_CONTENT);根据表几招fragment
}


然后是创建一个BaseFragment继承Fragment,获取activity,设置两个抽象方法用于初始化布局和初始化数据
package com.pan.fragment;


import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;


public abstract class BaseFragment extends Fragment {
public Activity mActivity;


//fragment创建
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
mActivity = getActivity();//获得当前fragment所依赖的activity
}
//初始化fragment布局
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View view = initView();
return view;
}
//fragment所依赖的activity的onCreate方法执行结束
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
//初始化数据
initDate();
}
//初始化布局,必须由子类实现
public abstract View initView();
//初始化数据,必须由子类实现
public abstract void initDate();
}
然后定义一个ContentFragment继承基类BaseFragment,用于初始化布局
定义一个BasePager.xml里面也用LinearLayout,用来填充界面的第二部分的标题和下边内容
<?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" >
    <include android:id="@+id/base_ic_1" android:visibility="visible" layout="@layout/title_bar"/>
    <include android:id="@+id/base_ic_2" android:visibility="visible" layout="@layout/title_bar1"/>
    <include android:id="@+id/base_ic_3" android:visibility="visible" layout="@layout/title_bar2"/>
    <include android:id="@+id/base_ic_4" android:visibility="visible" layout="@layout/title_bar3"/>
    <include android:id="@+id/base_ic_5" android:visibility="visible" layout="@layout/title_bar4"/>
<FrameLayout 
    android:id="@+id/fl_content"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:layout_marginTop="5dp"
    android:background="#E3DEDE"
    >
    
</FrameLayout>
</LinearLayout>
在代码中对这五个标题include进行初始化数据进行隐藏和显示,下面的用来填充内容
在代码中定义一个五个页面的基类BasePager
package com.pan.Base;


import android.app.Activity;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ListView;


import com.pan.iqiyi.R;
/**
 * 五个标签页的基类
 * */
public class BasePager {
public FrameLayout flContent;//要动态添加布局
public Activity mActivity;
public View mRootView;//当前布局文件对象
public View base_ic_1,base_ic_2,base_ic_3,base_ic_4,base_ic_5;
public View view;


public BasePager(Activity activity){
mActivity=activity;
mRootView = initView();
}
//初始化布局
public View initView(){
view = View.inflate(mActivity, R.layout.base_pager, null);
//初始化五标题
base_ic_1 = view.findViewById(R.id.base_ic_1);
base_ic_2 = view.findViewById(R.id.base_ic_2);
base_ic_3 = view.findViewById(R.id.base_ic_3);
base_ic_4 = view.findViewById(R.id.base_ic_4);
base_ic_5 = view.findViewById(R.id.base_ic_5);
//初始化BasePager.xml的FrameLayout
flContent = (FrameLayout) view.findViewById(R.id.fl_content);
return view;

}
//初始化数据
public void initData(){

}
}
然后让五个页面分别继承这个基类
如推荐页面
package com.pan.Base.impl;


import android.app.Activity;
import android.graphics.Color;
import android.view.Gravity;
import android.view.View;
import android.widget.TextView;


import com.pan.Base.BasePager;
/**
 * 推荐
 * */
public class RecomPager extends BasePager {


public RecomPager(Activity activity) {
super(activity);
// TODO Auto-generated constructor stub
}
@Override
public void initData() {
System.out.println("推荐页面初始化了");
//要给帧布局填充对象
TextView view=new TextView(mActivity);
view.setText("推荐");
view.setTextColor(Color.RED);
view.setTextSize(22);
view.setGravity(Gravity.CENTER);
flContent.addView(view);
base_ic_1.setVisibility(View.VISIBLE);
base_ic_2.setVisibility(View.GONE);
base_ic_3.setVisibility(View.GONE);
base_ic_4.setVisibility(View.GONE);
base_ic_5.setVisibility(View.GONE);
}
}
将推荐页面标题进行初始化数据让其显示,给下边内容暂时先设置一个textView让其有效果,后便会填入真正的内容
其他四个同理




初始化五个布局写一个ContentFragment类继承BaseFragment
将内容放到一个BasePager集合中
初始化布局fragment_content找到对应的viewpager和RadioGroup将其五个内容页面放到BasePager集合,然后给下面的五个标签添加监听事件
对内容进行判定是否有切换动画然后给ViewPage设置监听事件
package com.pan.fragment;


import java.util.ArrayList;


import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;


import com.pan.Base.BasePager;
import com.pan.Base.impl.FindPager;
import com.pan.Base.impl.FriendPager;
import com.pan.Base.impl.MyPager;
import com.pan.Base.impl.RecomPager;
import com.pan.Base.impl.VipPager;
import com.pan.iqiyi.R;
import com.pan.view.NoScrollViewPager;
/**
 * 主页面的fragment
 * */
public class ContentFragment extends BaseFragment {


private NoScrollViewPager mViewPager;
private RadioGroup main_rg_choose;
private ArrayList<BasePager> mPagers;
@Override
public View initView() {
View view = View.inflate(mActivity, R.layout.fragment_content, null);
mViewPager = (NoScrollViewPager) view.findViewById(R.id.vp_content);
main_rg_choose=(RadioGroup) view.findViewById(R.id.main_rg_choose);
return view;
}


@Override
public void initDate() {
mPagers=new ArrayList<BasePager>();
//添加五个标签页
mPagers.add(new RecomPager(mActivity));
mPagers.add(new FindPager(mActivity));
mPagers.add(new VipPager(mActivity));
mPagers.add(new MyPager(mActivity));
mPagers.add(new FriendPager(mActivity));
mViewPager.setAdapter(new ContentAdapter());
//给低栏标签添加监听切换事件
main_rg_choose.setOnCheckedChangeListener(new OnCheckedChangeListener() {

@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch (checkedId) {
case R.id.main_rb_recom:
mViewPager.setCurrentItem(0,false);//表示是否有切换动画

break;
case R.id.main_rb_find:
mViewPager.setCurrentItem(1,false);//表示是否有切换动画
break;
case R.id.main_rb_vip:
mViewPager.setCurrentItem(2,false);//表示是否有切换动画
break;
case R.id.main_rb_my:
mViewPager.setCurrentItem(3,false);//表示是否有切换动画
break;
case R.id.main_rb_friend:
mViewPager.setCurrentItem(4,false);//表示是否有切换动画
break;


default:
break;
}

}
});

mViewPager.setOnPageChangeListener(new OnPageChangeListener() {

@Override
public void onPageSelected(int position) {
BasePager pager = mPagers.get(position);
pager.initData();//初始化数据

}

@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
// TODO Auto-generated method stub

}

@Override
public void onPageScrollStateChanged(int state) {
// TODO Auto-generated method stub

}
});
//手动加载第一页数据
mPagers.get(0).initData();
}
class ContentAdapter extends PagerAdapter{


@Override
public int getCount() {
// TODO Auto-generated method stub
return mPagers.size();
}


@Override
public boolean isViewFromObject(View view, Object object) {
// TODO Auto-generated method stub
return view==object;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
BasePager pager = mPagers.get(position);
//pager.initData();
View view=pager.mRootView;//获得当前页面对象的布局
container.addView(view);
return view;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View)object);
}
}
}




大概就是这,然后就是设置listview将数据传进去,还在完善中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值