仿愛奇藝UI界面(第一天)

仿愛奇藝UI界面

1、整體佈局

是一個Activity,再一個Activity界面中填充不同的Fragment。
主界面是一個LinearLayout佈局,在佈局中放一個FrameLayout用來做顯示填充頁面的佈局,之後再放一個LinearLayout佈局,
根據頁面顯示效果設置權重,在佈局中放一個RadioGroup,盛放RadioButton的容器,設置5個RadioButton用來監聽點擊的頁面。分別創建5個Fragment頁面,爲RadioGroup添加事件監聽,在點擊了按鈕的時候,填充不同的頁面。

佈局代碼如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.jinxudong.aiqiyiui.MainActivity$PlaceholderFragment" >

    <LinearLayout
        android:id="@+id/ll_flg"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="6"
        android:orientation="horizontal" >
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="horizontal" >

        <RadioGroup
            android:id="@+id/btn_rg"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@drawable/category_drag_bg"
            android:orientation="horizontal" >

            <RadioButton
                android:id="@+id/ib_home"
                style="@style/Bottom_Tab_Style"
                android:background="@null"
                android:drawableTop="@drawable/home_selector"
                android:text="@string/phone_navi_shipin" />

            <RadioButton
                android:id="@+id/ib_ib2"
                style="@style/Bottom_Tab_Style"
                android:background="@null"
                android:drawableTop="@drawable/ib2_selector"
                android:text="@string/phone_navi_find" />

            <RadioButton
                android:id="@+id/ib_ib3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@null"
                android:button="@null"
                android:drawablePadding="3dp"
                android:drawableTop="@drawable/ib3_selector"
                android:gravity="center"
                android:padding="5dp"
                android:text="@string/phone_navi_vip"
                android:textColor="@drawable/vip_text_selector" />

            <RadioButton
                android:id="@+id/ib_ib5"
                style="@style/Bottom_Tab_Style"
                android:background="@null"
                android:drawableTop="@drawable/rb5_selector"
                android:text="@string/me" />

            <RadioButton
                android:layout_gravity="center"
                android:id="@+id/ib_ib4"
                android:layout_width="80dp"
                android:layout_height="70dp"
                android:background="@drawable/ib4_selector"
                android:button="@null" />

        </RadioGroup>
    </LinearLayout>

</LinearLayout>

邏輯代碼如下:

package com.jinxudong.aiqiyiui;

import com.example.aiqiyiui.R;

import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.ImageButton;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {

    private RadioGroup btn_rg;
    private RadioButton btn_rb;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);// 設置不顯示title
        setContentView(R.layout.activity_main);
        // 初始化控件
        initView();

    }

    private void initView() {

        btn_rg = (RadioGroup) findViewById(R.id.btn_rg);
        btn_rb = (RadioButton) findViewById(R.id.ib_home);
        btn_rb.setChecked(true);
        FragmentManager fn = getFragmentManager();
        FragmentTransaction bt = fn.beginTransaction();
        bt.replace(R.id.ll_flg, new FirstActivity());
        bt.commit();
        btn_rg.setOnCheckedChangeListener(new OnCheckedChangeListener() {
            private FragmentManager fragmentManager;
            private FragmentTransaction transaction;

            @Override
            public void onCheckedChanged(RadioGroup grou, int checkedId) {
                fragmentManager = getFragmentManager();
                transaction = fragmentManager.beginTransaction();
                switch (checkedId) {
                case R.id.ib_home:
                    // showToast("點擊了第一個");
                    transaction.replace(R.id.ll_flg, new FirstActivity());

                    break;
                case R.id.ib_ib2:
                    // showToast("點擊了服務");
                    transaction.replace(R.id.ll_flg, new SecondActivity());
                    break;
                case R.id.ib_ib3:
                    // showToast("點擊了會員");
                    // ib_ib3.is
                    transaction.replace(R.id.ll_flg, new ThridActivity());
                    break;
                case R.id.ib_ib4:
                    // showToast("離線");
                    transaction.replace(R.id.ll_flg, new OffLine());
                    break;
                case R.id.ib_ib5:
                    // showToast("點擊了我");
                    transaction.replace(R.id.ll_flg, new ThridActivity());
                    break;
                }
                transaction.commit();
            }
        });
    }

    public void showToast(String msg) {
        Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onClick(View arg0) {

    }
}

2、頁面的填充

獲得FragmentManager對象FragmentManager fragmentManager= getFragmentManager();,通過FragmentManager對象開啓事FragmentTransaction transaction = fragmentManager.beginTransaction();點擊不同的按鈕填充不同的頁面,transaction.replace(R.id.ll_flg, new FirstActivity());
replace(int containerViewId, Fragment fragment);有兩個參數,第一個是填充的佈局,之前在activity_Main中留下來的用來填充其他頁面的佈局文件,一般用FrameLayout。

3、視頻界面

3.1整體佈局的搭建

視頻頁面是第一個Fragment頁面,是一個繼承了Fragment的java類,重寫onCreateView方法,在onCreateView方法中,通過inflater.inflate(R.layout.first_xml, null);填充頁面,並用一個View對象接收,並return這個對象。這樣就完成了頁面的填充。
inflate(int resource, ViewGroup root)方法中有兩個參數,第一個是爲頁面寫的佈局文件,可以通過R.layout.佈局文件名找到佈局,第二個一般設爲null。
然後可以通過得到的View對象找到佈局中的各個組件
如需要找到的ViewPager,可以寫成pager = (ViewPager) view.findViewById(R.id.viewpager);
然後對這個Viewpager進行操作。
在視頻界面中,最上層我是放了一個相對佈局,再放一些ImageButton。接下來是一個搜索功能的搜索欄,因爲後面幾個頁面都需要搜索頁面,所以我將它提取出來,放到了一個xml中,然後在其他頁面去引用這個xml文件,引用方法爲
<include
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    layout="@layout/search_layout" />
接下來是一個導航欄,可以滑動,所以我用的一個HorizontalScrollView,可以實現滑動的效果,爲了讓頁面看起開美觀,android:scrollbars="none" 去掉了滑動時顯示的線。在HorizontalScrollView中放了一個ViewGroup,然後放了很多RadioButton,這個的實現原理和主頁切換不同fragment頁面相似,只是這裏需要切換的是不同的ViewPager。
pager.setCurrentItem(0);方法用來切換不同的Viewpager界面

3.2填充數據。

Viewpager顯示也需要填充不同的數據達到我們需要的效果,爲ViewPager填充數據時需要設置適配器pager.setAdapter(new PagerAdapter({}));這裏需要實現幾個方法。

instantiateItem方法是在加載某一個ViewPager的時候調用的。
destroyItem方法是在銷燬某一頁面的時候調用,ViewPager默認會加載當前頁面和前後各一個頁面的內容,其他的都會被銷燬。
isViewFromObject:直接寫return arg0 == arg1;就Ok了。
getCount():可以寫存放頁面的集合的長度。
爲ViewPager設置事件
pager.setOnPageChangeListener(new OnPageChangeListener()
爲了使頁面的滑動能和導航欄的條目對應,需要在ViewPager的監聽中設置HorizontalScrollView每次滑動多少距離
int swith = tabpager.getWidth();
tabpager.smoothScrollBy(rb.getRight() - (swith + offset), 0);
offset += rb.getRight() - (swith + offset);

佈局代碼如下

package com.jinxudong.aiqiyiui;

import java.util.ArrayList;

import com.example.aiqiyiui.R;

import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView.FindListener;
import android.widget.HorizontalScrollView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.TextView;

public class FirstActivity extends Fragment {
    ViewPager pager = null;
    HorizontalScrollView tabpager = null;
    ArrayList<View> viewContainer = new ArrayList<View>();
    ArrayList<View> viewTV = new ArrayList<View>();
    ArrayList<View> viewTab = new ArrayList<View>();
    ImageView ivTv;
    private Activity activity;
    private RadioGroup ll_hs;
    private int offset = 0;
    private ViewPager tv_viewPager;
    private int[] imageId;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        activity = getActivity();
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.first_xml, null);
        pager = (ViewPager) view.findViewById(R.id.viewpager);
        tabpager = (HorizontalScrollView) view.findViewById(R.id.tabpager);

        ll_hs = (RadioGroup) view.findViewById(R.id.ll_hs);
        View v1 = LayoutInflater.from(activity).inflate(R.layout.pager, null);
        View v2 = LayoutInflater.from(activity).inflate(R.layout.pager1, null);
        View v3 = LayoutInflater.from(activity).inflate(R.layout.pager3, null);
        View v4 = LayoutInflater.from(activity).inflate(R.layout.pager3, null);
        View v5 = LayoutInflater.from(activity).inflate(R.layout.pager3, null);
        View v6 = LayoutInflater.from(activity).inflate(R.layout.pager3, null);
        View v7 = LayoutInflater.from(activity).inflate(R.layout.pager3, null);
        View v8 = LayoutInflater.from(activity).inflate(R.layout.pager3, null);
        View v9 = LayoutInflater.from(activity).inflate(R.layout.pager3, null);
        View v0 = LayoutInflater.from(activity).inflate(R.layout.pager3, null);
        View v11 = LayoutInflater.from(activity).inflate(R.layout.pager3, null);
        View v12 = LayoutInflater.from(activity).inflate(R.layout.pager3, null);
        View v13 = LayoutInflater.from(activity).inflate(R.layout.pager3, null);
        viewContainer.add(v1);
        viewContainer.add(v2);
        viewContainer.add(v3);
        viewContainer.add(v4);
        viewContainer.add(v5);
        viewContainer.add(v6);
        viewContainer.add(v7);
        viewContainer.add(v8);
        viewContainer.add(v9);
        viewContainer.add(v0);
        viewContainer.add(v11);
        viewContainer.add(v12);
        viewContainer.add(v13);
        String[] strTab = { "推薦", "上學啦", "訂閱", "電視劇", "電影", "綜藝", "動漫", "資訊",
                "娛樂", "搞笑", "少兒", "原創", "愛頻道" };

        for (int i = 0; i < strTab.length; i++) {
            RadioButton childAt = (RadioButton) ll_hs.getChildAt(i);
            childAt.setText(strTab[i]);
        }
        ((RadioButton) ll_hs.getChildAt(0)).setChecked(true);
        ll_hs.setOnCheckedChangeListener(new OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup arg0, int arg1) {
                switch (arg1) {
                case R.id.rb_1:
                    pager.setCurrentItem(0);
                    break;
                case R.id.rb_2:
                    pager.setCurrentItem(1);
                    break;
                case R.id.rb_3:
                    pager.setCurrentItem(2);
                    break;
                case R.id.rb_4:
                    pager.setCurrentItem(3);
                    break;
                case R.id.rb_5:
                    pager.setCurrentItem(4);
                    break;
                case R.id.rb_6:
                    pager.setCurrentItem(5);
                    break;
                case R.id.rb_7:
                    pager.setCurrentItem(6);
                    break;
                case R.id.rb_8:
                    pager.setCurrentItem(7);
                    break;
                case R.id.rb_9:
                    pager.setCurrentItem(8);
                    break;
                case R.id.rb_10:
                    pager.setCurrentItem(9);
                    break;
                case R.id.rb_11:
                    pager.setCurrentItem(10);
                    break;
                case R.id.rb_12:
                    pager.setCurrentItem(11);
                    break;
                case R.id.rb_13:
                    pager.setCurrentItem(12);
                    break;
                }
            }
        });

        pager.setAdapter(new PagerAdapter() {
            @Override
            public Object instantiateItem(ViewGroup container, int position) {
                ((ViewPager) container).addView(viewContainer.get(position));
                return viewContainer.get(position);
            }

            @Override
            public void destroyItem(ViewGroup container, int position,
                    Object object) {
                ((ViewPager) container).removeView(viewContainer.get(position));
            }

            @Override
            public boolean isViewFromObject(View arg0, Object arg1) {
                return arg0 == arg1;
            }

            @Override
            public int getCount() {
                return viewContainer.size();
            }
        });
        pager.setOnPageChangeListener(new OnPageChangeListener() {

            @Override
            public void onPageSelected(int arg0) {
                ((RadioButton) ll_hs.getChildAt(arg0)).setChecked(true);
                // 設置HorizontalScrollView滑動樣式
                if (arg0 >= 1 && arg0 <= 10) {
                    RadioButton rb = (RadioButton) ll_hs.getChildAt(arg0);
                    int swith = tabpager.getWidth();
                    tabpager.smoothScrollBy(rb.getRight() - (swith + offset), 0);
                    offset += rb.getRight() - (swith + offset);
                }
            }

            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {

            }

            @Override
            public void onPageScrollStateChanged(int arg0) {

            }
        });
        new InflatFirst(v1, activity);
        return view;
    }
    @Override
    public void onDestroy() {
        super.onDestroy();
        InflatFirst.isRunning = false;
    }
}

運行效果圖:
運行效果圖

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章