实现主体界面:

               


222.png (64.46 KB, 下载次数: 0)

下载附件  保存到相冊

前天 21:02 上传

比較常见的一种布局。以下几个button。点击后。切换到对应的界面,能够使用tabhost+RadioGroup来实现,或者其它的比方fragmentTabhost+fragment等。实现方式有好几种。本app是非常久之前做的,採用老方法tabhost+RadioGroup来实现的。界面底部是RadioGroup,里面放了4个radiobutton,4个button切换时候,分别切换显示4个不同的activity,button上面显示部分是另外一个activity。

MainActivity的主代码例如以下:

private static final String HOME = "home";   

private static final String HOT = "hot";

private static final String TJ = "tj";

private static final String LOCAL = "local";

private RadioGroup rGroup;   //这里用RadioGroup来代替TabWidget,更加方便我们设计控件的样式,用于底部4个button

private TabHost tabHost;      //像一个容器,把我们须要展示的activity放进去,依据我们须要进行显示

private TabSpec tabSpec;     //各个选项卡

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        initView();

        setLister();

}

private void setLister() {        //绑定事件

  rGroup.setOnCheckedChangeListener(this);

}

    private void initView()    //初始化view

    {

     rGroup = (RadioGroup) findViewById(R.id.RadioGroup);

  tabHost = this.getTabHost();   //从TabActivity中获取一个tabHost对象。由于我们继承了TabActivity,它已经获取了tabHost。我们不用再用findViewById

  /**

   * 获取各个选项卡,而且把对应的activity装进去,能够加一个或者多个,更具自己须要加入,activity须要我们自己创建,记住在配置文件中面进行配置

   */

  tabSpec = tabHost.newTabSpec(HOT).setIndicator(HOT)

    .setContent(new Intent(this, HotActivity.class));   //HotActivity,显示热门电影界面,刚进入时候,显示得第一个界面


  tabHost.addTab(tabSpec);

  tabSpec = tabHost.newTabSpec(TJ).setIndicator(TJ)  

    .setContent(new Intent(this, RecommendActivity.class));   //推荐界面


  tabHost.addTab(tabSpec);

  

  tabSpec = tabHost.newTabSpec(HOME).setIndicator(HOME)

    .setContent(new Intent(this, AllVideoActivity.class));
//所有电影界面  

  tabHost.addTab(tabSpec);

  tabSpec = tabHost.newTabSpec(LOCAL).setIndicator(LOCAL)

    .setContent(new Intent(this, LocalVideoActivity.class));
//本地视频  

  tabHost.addTab(tabSpec);

  

    }

  //点击以下5个Radiobutton,点击时候触发这里的事件,分别切换到对应的界面

    public void onCheckedChanged(RadioGroup group, int checkedId) {

  switch (checkedId) {

  case R.id.hot_id:

   tabHost.setCurrentTab(0);      //跳转到热门界面

   break;

  case R.id.tuijian_id:

   tabHost.setCurrentTab(1);    //跳转推荐界面

   break;

  case R.id.home_id:

   tabHost.setCurrentTab(2);  //跳转所有电影界面

   break;

  case R.id.local_id:

   tabHost.setCurrentTab(3);    //跳转本地视频

   break;

  

  }

}



MainActivit的布局文件例如以下:



<?

xml version="1.0" encoding="utf-8"?>

<TabHost xmlns:android="http://schemas.android.com/apk/res/android"

    android:id="@android:id/tabhost"  //该id名字必须这样写,不能变,TabActivity会依据此id获取tabhost对象  

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="horizontal" >

    <TabWidget         //该控件尽管是影藏的,可是必需要写出来。id也必须入下。不能改变。不然代码里面用tabhost获取tabTabSpec会出错。他显示时候。显示在界面的顶端,不是我们需要的。我们把它影藏,用以下的RadioGroup来取代

        android:id="@android:id/tabs"

        android:layout_width="fill_parent"

        android:layout_height="fill_parent"

        android:visibility="gone" >

    </TabWidget>

    <RelativeLayout  //使用相对布局,方便radiogroup能够显示究竟部,还有能够使类容不被以下的4个button挡住

android:layout_width="fill_parent"

        android:layout_height="fill_parent" >

        <FrameLayout     //这个是用来放置其它activity的。id也必须这样,不能任意变。

就是切换时候的那4个activity

            android:id="@android:id/tabcontent"

            android:layout_width="fill_parent"

            android:layout_height="fill_parent"

            android:layout_above="@id/RadioGroup" >   //这里设置位置在Radiogroup上面,放置部分内容被4个button挡住

        </FrameLayout>

        <RadioGroup       //放置底部4个radiobutton

            android:id="@id/RadioGroup"

            android:layout_width="fill_parent"

            android:layout_height="50dp"

            android:layout_alignParentBottom="true"  //放置在父控件的最以下

            android:gravity="bottom"

            android:orientation="horizontal" >

            <RadioButton

                android:paddingTop="5dp"

                android:id="@id/hot_id"   //这里名字随便取的。大家请依照规范命名。这里id是放在ids里面的,也能够直接用+号形式直接写

                style="@style/main_radio_botton"    //4个button属性同样的部分,我们提出去。放到style文件中面,达到公用

                android:layout_width="wrap_content"

                android:layout_height="fill_parent"

                android:layout_weight="1"   //设置权重,保重4个button的宽度一致

                android:background="@drawable/bar_selector"
//这个比較经常使用,设置一个selector的xml文件,点击时候,切换背景。

                android:checked="true"   //表示改radiobutton是选中状态,上面设置了selector。它就能够更具这个状态。显示对应的背景了

                android:drawableTop="@drawable/main_bt_ico_hot"
//看意思能看出来。在控件顶部放一个图片,当然一次还能够放其它位置

                android:gravity="center"

                android:text="@string/main_bt_hot"

                android:textSize="12sp" />

                        

        </RadioGroup>

      

    </RelativeLayout>

</TabHost>



除了MainActivity界面,我们还须要4个activity。上面有写,来先看看第一个界面HotActivity的布局文件



<?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="#000000"

    android:orientation="vertical" >

    <FrameLayout    //最顶部标题栏部分,由于非常多时候,它左边和右边都有对应的button,比方返回键什么的。所以用FrameLayout    来做。通过控件的属性

android:layout_gravity="xxxx",能够方便的把控件显示在中间,左边,右边,各种居中等



        android:layout_width="fill_parent"

        android:layout_height="40dp"

        android:background="@drawable/test_title_bg" >

        <TextView

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:layout_gravity="center"   //控件显示在中间。显示我们的app名字

            android:text="@string/app_name"

            android:textColor="#ffffff"

            android:textSize="18sp" />

    </FrameLayout>

    <HorizontalScrollView  //标题栏以下是一排button。应为比較多。能够 滑动。所以使用该控件,实现。左右滑动

        android:id="@+id/hscroll"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:scrollbars="none" >

        <RadioGroup  //这里还是使用它来实现点击切换效果,主要是为了使用它的checked属性。非常方便的变换,点击button后,切换背景

            android:id="@+id/bar_rg"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:gravity="center"

            android:orientation="horizontal" >

            <RadioButton

                android:id="@+id/bar_rd1"

                style="@style/main_radio_botton"

                android:layout_width="60dp"

                android:layout_height="35dp"

                android:layout_marginBottom="3dp"

                android:layout_marginLeft="5dp"

                android:layout_marginTop="3dp"

                android:background="@drawable/sc_bar_selector"

                android:checked="true"

                android:gravity="center"

                android:paddingBottom="3dp"

                android:text="@string/hot_text_rd" />

                    </RadioGroup>

    </HorizontalScrollView>

    <FrameLayout

        android:layout_width="fill_parent"

        android:layout_height="fill_parent" >

        <LinearLayout  //我们的数据是用listview来显示的。这里每一个button相应一个listview。在界面里面。我们动态加入到该linearlayout上面

详细写代码时候,大家会清楚的,用多个listview来显示不同类型的数据。通过显示影藏。来显示不同的数据,而不会又一次刷新数据

            android:id="@+id/list_lin"

            android:layout_width="fill_parent"

            android:layout_height="fill_parent"

            android:background="#ffffff"

            android:orientation="vertical" >

        </LinearLayout>

        <include    //自己定义的一个progress,一个转圈圈的view,提示用户当前在载入数据。这个view提出来,写在一个xml里面,便于其它界面使用。公用view,大家都能够单独提出来,在用include    增加


            android:id="@+id/pb"

            layout="@layout/progress_bar" />

    </FrameLayout>

</LinearLayout>





为了使我们的额代码看起来比較统一,我们创建一个包com.hck.videoplayer.interfaces。在里面我们新建一个借口类:

public interface BaseMethod {

public void initView();  //初始化数据

public void getData(); //从server获取数据

public void updateUi(); //更新界面

public void setDataToServer();   //发送数据到server

public void initData();  //初始化数据

}



源代码地址:http://pan.baidu.com/s/1eQirxuU

我的贴吧:http://tieba.baidu.com/f?kw=android%E5%BC%80%E5%8F%91%E5%AD%A6%E4%B9%A0&ie=utf-8

有问题能够这里来提问,大家相互交流,尽量回答大家问题。



有写属性数据各个界面可能公用,我们在ui包下创建一个名字叫BaseActivity的activity,继承activity,后面,公用的数据。我们就放在里面了。

然后在使用的时候。我们其它的activity都继承该BaseActivity,然后都实现 BaseMethod接口



好了,本片几乎相同这样了。时间有限。能力有限,非常多地方没写到位。可能有错误的地方,请大家见谅,文章,紧供參考。

须要的,大家能够參考下,不喜忽喷,谢谢

一步一步实现视频播放器client(二)的更多相关文章

  1. Android开发学习之路--基于vitamio的视频播放器(二)

      终于把该忙的事情都忙得差不多了,接下来又可以开始good good study,day day up了.在Android开发学习之路–基于vitamio的视频播放器(一)中,主要讲了播放器的界面的 ...

  2. (转)薛飞 基于VLC的Unity视频播放器(二)

    转自:http://www.manew.com/thread-144229-1-1.html 留个记录.

  3. SmartMS如何使用二次验证码/虚拟MFA/两步验证/谷歌身份验证器?

    一般点账户名——设置——安全设置中开通虚拟MFA两步验证 具体步骤见链接 SmartMS如何使用二次验证码/虚拟MFA/两步验证/谷歌身份验证器? 二次验证码小程序于谷歌身份验证器APP的优势 1.无 ...

  4. 一步一步搭建基于ffmpeg和sdl2的流媒体播放器

    一.  背景: 一步一步从资料收集.技术选型.代码编写.性能优化,动手搭建一款支持rtsp.rtmp等常用流媒体格式的视频播放器,ffmpeg用于流媒体解码,sdl2用于视频画面渲染和声音播放. 二. ...

  5. 一步一步自定义SpringMVC参数解析器

    随心所欲,自定义参数解析器绑定数据. 题图:from Zoommy 干货 SpringMVC解析器用于解析request请求参数并绑定数据到Controller的入参上. 自定义一个参数解析器需要实现 ...

  6. 一步一步学Silverlight 2系列(18):综合实例之RSS阅读器

    一步一步学Silverlight 2系列(18):综合实例之RSS阅读器   概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支 ...

  7. Mybatis源码解析,一步一步从浅入深(三):实例化xml配置解析器(XMLConfigBuilder)

    在上一篇文章:Mybatis源码解析,一步一步从浅入深(二):按步骤解析源码 ,中我们看到 代码:XMLConfigBuilder parser = new XMLConfigBuilder(read ...

  8. C语言基于GTK+Libvlc实现的简易视频播放器

    小编心语:现下,各种视频播放软件层出不穷,竞争也越演越烈,不知道大家有木有这个想法,小编有时在想能不能做一款属于自己的视频播放器呢~小编特意去实验楼,整理出了这篇关于如何实现简易视频播放器的博文.简易 ...

  9. 建站技能get(1)— Asp.net MVC快速集成ckplayer网页视频播放器

    故事背景大概是这样的,我厂两年前给山西晋城人民政府做了一个门户网站(地址:http://jccq.cn/),运行了一年多固若金汤,duang的有一天市场部门过来说,新闻管理模块带视频的内容播放不了了. ...

随机推荐

  1. 所驼门王的宝藏(bzoj 1924)

    Description Input 第一行给出三个正整数 N, R, C. 以下 N 行,每行给出一扇传送门的信息,包含三个正整数xi, yi, Ti,表示该传送门设在位于第 xi行第yi列的藏宝宫室 ...

  2. 【BZOJ4402】Claris的剑(组合计数)

    题意: 给定数列的定义: 1.每个元素都是正整数 2.每个元素不能超过M 3.相邻两个元素的差的绝对值必须是1 4.第一个元素的值必须是1 求有多少个长度不超过N的合法的本质不同的序列 两个序列本质不 ...

  3. 【Educational Codeforces Round 53 (Rated for Div. 2)】

    A:https://www.cnblogs.com/myx12345/p/9853775.html B:https://www.cnblogs.com/myx12345/p/9853779.html ...

  4. Javascript&Html-location对象

    Javascript&Html-location对象 location对应是BOM最有用的对象之一,她提供了当前窗口中加载的文档的信息,并提供了一些导航的功能.location对象有一个特别的 ...

  5. C# Log日志工具类

    using System; using System.Collections.Generic; using System.Text; using System.IO; public class Log ...

  6. Android使用圆角

    圆角Button 效果图 绿色Button 定义button_green.xml资源文件位于drawable文件夹下,可用作button的background属性 button_green.xml: ...

  7. Eigen--简单的C++矩阵计算库

    晚上突然想写一段小C++程序,要用到矩阵求逆呀乘法呀之类的,所以找了一下有什么现成的可用的C++矩阵计算相关的库,发现有一大堆,在其中各种各样的配置,感觉比较麻烦.从方便性来说Eigen是最方便的了, ...

  8. 【转载】Outlook2010 移动数据文件到其它地方

            您可以将数据文件移到计算机的其他文件夹中.移动文件的一个原因在于可使备份更容易并且可以让默认的outlook邮件文件不在存在C盘,导致装系统不见或者文件过大而撑死了C盘.例如,如果数据 ...

  9. 转载——分享一个html+js+ashx+easyui+ado.net权限管理系统

    EasyUI.权限管理 这是个都快被搞烂了的组合,但是easyui的确好用,权限管理在项目中的确实用.一直以来博客园里也不少朋友分享过,但是感觉好的要不没源码,要不就是过度设计写的太复杂看不懂,也懒得 ...

  10. iOS数组去重的方法,超级简单

    //最近新发现的一个数组去重,用不着循环,一句代码搞定 //去除数组中重复的 NSArray *oldArr = @[@"1",@"2",@"3&qu ...