首页 > 代码库 > 手机影音2--软件架构分析

手机影音2--软件架构分析

技术分享

1.标题栏

<?xml version="1.0" encoding="utf-8"?>
<com.atguigu.mobileplayer2.view.TitleBar xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="55dp"
    android:background="#ff3097fd"
    android:gravity="center_vertical"
    android:orientation="horizontal">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="8dp"
        android:src="http://www.mamicode.com/@drawable/ic_topbanner_logo" />

    <TextView
        android:id="@+id/tv_search"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="8dp"
        android:layout_weight="1"
        android:background="@drawable/tv_search_bg_selector"
        android:clickable="true"
        android:drawableLeft="@drawable/tv_search_drawable_selector"
        android:drawablePadding="3dp"
        android:text="全网搜索"
        android:textColor="@drawable/tv_search_textcolor_selector"
        android:textSize="14sp" />

    <RelativeLayout
        android:id="@+id/rl_game"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp">

        <TextView
            android:id="@+id/tv_game"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:drawableLeft="@drawable/ic_topbanner_game" />
        <ImageView
            android:layout_width="6dp"
            android:layout_height="6dp"
            android:layout_alignRight="@id/tv_game"
            android:background="@drawable/dot" />

    </RelativeLayout>

    <ImageView
        android:id="@+id/iv_record"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="8dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="http://www.mamicode.com/@drawable/ic_topbanner_record" />

</com.atguigu.mobileplayer2.view.TitleBar>

  

2.自定义标题栏

public class TitleBar extends LinearLayout implements View.OnClickListener {

    private View tv_search;
    private View rl_game;
    private View iv_record;
    private Context context;
    /**
     * 在代码中实例化该类的时候使用这个方法
     * @param context
     */
    public TitleBar(Context context) {
        this(context,null);
    }

    /**
     * 当在布局文件使用该类的时候,Android系统通过这个构造方法实例化该类
     * @param context
     * @param attrs
     */
    public TitleBar(Context context, AttributeSet attrs) {
        this(context, attrs,0);

    }

    /**
     * 当需要设置样式的时候,可以使用该方法
     * @param context
     * @param attrs
     * @param defStyleAttr
     */
    public TitleBar(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        this.context = context;
    }

    /**
     * 当布局文件加载完成的时候回调这个方法
     */
    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
        //得到孩子的实例
        tv_search = getChildAt(1);
        rl_game = getChildAt(2);
        iv_record = getChildAt(3);

        //设置点击事件
        tv_search.setOnClickListener(this);
        rl_game.setOnClickListener(this);
        iv_record.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.tv_search://搜索
//                Toast.makeText(context, "搜索", Toast.LENGTH_SHORT).show();
                Intent intent = new Intent(context,SearchActivity.class);
                context.startActivity(intent);
                break;
            case R.id.rl_game://游戏
                Toast.makeText(context, "游戏", Toast.LENGTH_SHORT).show();
                break;
            case R.id.iv_record://播放历史
                Toast.makeText(context, "播放历史", Toast.LENGTH_SHORT).show();
                break;
        }
    }
}

 

3.屏蔽各个页面重复初始化数据

1.在BasePager中添加标识字段

public abstract class BasePager {

    /**
      * 判断是否初始化过数据
    */
    public boolean isInit;

    ....

}

2.在主页面中屏蔽

/**
 * 得到具体的某个孩子的实例视图
 * @return
 */
private BasePager getBasePager() {
    BasePager basePager = basePagers.get(position);
    if(basePager != null&&!basePager.isInit){
        basePager.initData();
        basePager.isInit = true;
    }
    return basePager;
}

  

 

手机影音2--软件架构分析