美文网首页
手机影音01

手机影音01

作者: GeekGray | 来源:发表于2018-10-03 19:14 被阅读23次

阅读原文

01-splash页面

public class SplashActivity extends AppCompatActivity
{
    private static final String TAG = SplashActivity.class.getSimpleName();//"SplashActivity"
    private boolean isStartMain = false;//是否进入主界面标志
    private Handler handler = new Handler();

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);

        handler.postDelayed(new Runnable()
        {
            @Override
            public void run()
            {
                //两秒后才执行到这里
                //执行在主线程中
                startMainActivity();
                Log.e(TAG, "当前线程名称==" + Thread.currentThread().getName());
            }
        }, 2000);
    }



    /**
     * 跳转到主页面,并且把当前页面关闭掉
     */
    private void startMainActivity()
    {
        if (!isStartMain)
        {
            isStartMain = true;
            Intent intent = new Intent(this, MainActivity.class);
            startActivity(intent);
            //关闭当前页面
            finish();
        }

    }

      /**
       * 有一个bug,启动了多次Activity,如何解决?
       * 1.设置为启动的Activity只能是单例。
       *   在功能清单文件android:launchMode="singleTask"
       * 2.从源头上控制,执行代码只一次
       */
    @Override
    public boolean onTouchEvent(MotionEvent event)
    {
        Log.e(TAG, "onTouchEvent==Action" + event.getAction());
        startMainActivity();
        return super.onTouchEvent(event);
    }

    @Override
    protected void onDestroy()
    {
        //把所有的消息和回调移除
        handler.removeCallbacksAndMessages(null);
        super.onDestroy();
    }
}

02-MainActivity主页面布局

2.1activity_main.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">

    <!--标题栏-->
    <include layout="@layout/titlebar"/>

    <!--FrameLayout-->

    <FrameLayout
        android:id="@+id/fl_main_content"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1" />

    <!--RadioGroup-->

    <RadioGroup
        android:id="@+id/rg_bottom_tag"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#11000000"
        android:gravity="center_vertical"
        android:orientation="horizontal"
        android:padding="3dp"

        >


        <RadioButton
            android:id="@+id/rb_video"
            android:text="本地视频"
            android:drawableTop="@drawable/rb_video_drawable_selector"
            style="@style/botttom_tag_style"
            />


        <RadioButton
            android:id="@+id/rb_audio"
            android:text="本地音频"
            android:drawableTop="@drawable/rb_audio_drawable_selector"
            style="@style/botttom_tag_style"
            />


        <RadioButton
            android:id="@+id/rb_net_video"
            android:text="网络视频"
            android:drawableTop="@drawable/rb_net_video_drawable_selector"
            style="@style/botttom_tag_style"
            />


        <RadioButton
            android:id="@+id/rb_netaudio"
            android:text="网络音乐"
            android:drawableTop="@drawable/rb_netaudio_drawable_selector"
            style="@style/botttom_tag_style"
            />


    </RadioGroup>

</LinearLayout>

2.2样式中引用如下

<style name="bottom_tab_style" >
    <item name="android:layout_width">wrap_content</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:layout_weight">1</item>
    <item name="android:background">@android:color/transparent</item>
    <item name="android:button">@android:color/transparent</item>
    <item name="android:drawablePadding">3dp</item>
    <item name="android:textColor">@drawable/rb_bottom_textcolor_selector</item>
    <item name="android:gravity">center</item>
    <item name="android:textSize">10sp</item>
</style>

2.3RadioButton文字颜色

rb_bottom_textcolor_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="#363636" android:state_checked="false"/>
    <item android:color="#3097FD" android:state_checked="true"/>
</selector>

03-基类BasePager

public abstract class BasePager
{

    /**
     * 上下文
     */
    public final Context context;
    /**
     * 接收各个页面的实例
     */
    public View rootView;
    public boolean isInitData;

    public BasePager(Context context)
    {
        this.context = context;
        rootView = initView();
    }

    /**
     * 强制子页面实现该方法,实现想要的特定的效果
     *
     * @return
     */
    public abstract View initView();


    /**
     * 当子页面,需要绑定数据,或者联网请求数据并且绑定的时候,重写该方法
     */
    public void initData()
    {

    }
}

04-监听RadioGroup的状态

4.1 在MainActivity的onCreate方法中初始化各个页面

        private RadioGroup rg_bottom_tag;
        private Fragment fragment;
        /**
         * 页面的集合
         */
        private ArrayList<BasePager> basePagers;
    
        /**
         * 选中的位置
         */
        private int position;

        /**
         * 初始化各个页面
         */
        pbasePagers = new ArrayList<>();
        basePagers.add(new VideoPager(this));//添加本地视频页面-0
        basePagers.add(new AudioPager(this));//添加本地音乐页面-1
        basePagers.add(new NetVideoPager(this));//添加网络视频页面-2
        basePagers.add(new NetAudioPager(this));//添加网络音频页面-3


        //设置RadioGroup的监听
        rg_bottom_tag.setOnCheckedChangeListener(new MyOnCheckedChangeListener());
        rg_bottom_tag.check(R.id.rb_video);//默认选中首页

4.2 MyOnCheckedChangeListener

class MyOnCheckedChangeListener implements RadioGroup.OnCheckedChangeListener
    {

        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId)
        {

            switch (checkedId)
            {
                default:
                    position = 0;
                    break;
                case R.id.rb_audio://音频
                    position = 1;
                    break;
                case R.id.rb_net_video://网络视频
                    position = 2;
                    break;
                case R.id.rb_netaudio://网络音频
                    position = 3;
                    break;
            }

            setFragment();
        }
    }

4.3设置不同页面

    /**
     * 把页面添加到Fragment中
     */
    private void setFragment()
    {
        //1.得到FragmentManger
        FragmentManager manager = getSupportFragmentManager();
        //2.开启事务
        FragmentTransaction ft = manager.beginTransaction();
        //3.替换
        ft.replace(R.id.fl_main_content, new Fragment()
        {
            @Nullable
            @Override
            public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
            {
                BasePager basePager = getBasePager();
                if (basePager != null)
                {
                    //各个页面的视图
                    return basePager.rootView;
                }
                return null;
            }
        });
        //4.提交事务
        ft.commit();

    }

    /**
     * 根据位置得到对应的页面
     *
     * @return
     */
    private BasePager getBasePager()
    {
        BasePager basePager = basePagers.get(position);
        if (basePager != null && !basePager.isInitData)
        {
            basePager.initData();//联网请求或者绑定数据
            basePager.isInitData = true;
        }
        return basePager;
    }

05-屏蔽各个页面重复初始化数据

5.1在主页面中屏蔽

if (basePager != null && !basePager.isInitData)
        {
            basePager.initData();//联网请求或者绑定数据
            basePager.isInitData = true;
        }

06-本地视频列表VideoPager

6.1 顶部标题栏布局

<?xml version="1.0" encoding="utf-8"?>
<com.example.administrator.mediaplayer.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="@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="@drawable/ic_topbanner_record" />

</com.example.administrator.mediaplayer.view.TitleBar>

6.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();
                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;
        }
    }
}

6.3 视频列表显示

6.3.1 视频列表的布局文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ListView
        android:divider="@null"
        android:id="@+id/listview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <TextView
        android:id="@+id/tv_nomedia"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="没有发现视频..."
        android:textColor="#000000"
        android:textSize="18sp"
        android:visibility="gone" />

    <ProgressBar
        android:id="@+id/pb_loading"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        />

</RelativeLayout>

</LinearLayout>

6.3.2 得到手机里面的视频和屏幕3MB以下视频

    /**
     * 从本地的sdcard得到数据
     * //1.遍历sdcard,后缀名
     * //2.从内容提供者里面获取视频
     * //3.如果是6.0的系统,动态获取读取sdcard的权限
     */
    private void getDataFromLocal()
    {
        new Thread(new Runnable()
        {
            @Override
            public void run()
            {
                //SystemClock.sleep(2000);延迟2s加载
                isGrantExternalRW((Activity) context);
                mediaItems = new ArrayList<MediaItem>();
                ContentResolver contentResolver = context.getContentResolver();
                Uri uri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
                String[] objs =
                        {
                                MediaStore.Video.Media.DISPLAY_NAME,//视频文件在sdcard的名称
                                MediaStore.Video.Media.DURATION,//视频总时长
                                MediaStore.Video.Media.SIZE,//视频的文件大小
                                MediaStore.Video.Media.DATA,//视频的绝对地址
                                MediaStore.Video.Media.ARTIST,//歌曲的演唱者
                        };
                Cursor cursor = contentResolver.query(uri, objs, null, null, null);
                if (cursor != null)
                {
                    while (cursor.moveToNext())
                    {
                        MediaItem mediaItem = new MediaItem();

                        mediaItems.add(mediaItem);//写在上面

                        String name = cursor.getString(0);//视频的名称
                        mediaItem.setName(name);

                        long duration = cursor.getLong(1);//视频的时长
                        mediaItem.setDuration(duration);

                        long size = cursor.getLong(2);//视频的文件大小
                        mediaItem.setSize(size);

                        String data = cursor.getString(3);//视频的播放地址
                        mediaItem.setData(data);

                        String artist = cursor.getString(4);//艺术家
                        mediaItem.setArtist(artist);
                    }
                    cursor.close();//释放
                }
                //Handler发消息
                handler.sendEmptyMessage(10);
            }
        }).start();
    }

6.3.3 视频显示出来

private Handler handler = new Handler()
    {
        @Override
        public void handleMessage(Message msg)
        {
            super.handleMessage(msg);
            if (mediaItems != null && mediaItems.size() > 0)
            {
                //有数据
                //设置适配器
                videoPagerAdapter = new VideoPagerAdapter(context, mediaItems,false);
                listview.setAdapter(videoPagerAdapter);
                //把文本隐藏
                tvNomedia.setVisibility(View.GONE);
            }
            else
            {
                //没有数据
                //文本显示
                tvNomedia.setVisibility(View.VISIBLE);
            }


            //ProgressBar隐藏
            pbLoading.setVisibility(View.GONE);
        }
    };

6.3.4 适配器

/**
 * VideoPager的适配器
 */
public class VideoPagerAdapter extends BaseAdapter
{
    private Context context;
    private final boolean isVideo;
    private final ArrayList<MediaItem> mediaItems;
    private Utils utils;

    public VideoPagerAdapter(Context context, ArrayList<MediaItem> mediaItems,boolean isVideo)
    {
        this.context = context;
        this.mediaItems = mediaItems;
        this.isVideo = isVideo;
        utils = new Utils();
    }

    @Override
    public int getCount()
    {
        return mediaItems.size();
    }

    @Override
    public Object getItem(int position)
    {
        return null;
    }

    @Override
    public long getItemId(int position)
    {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {
        ViewHolder viewHolder;
        if (convertView == null)
        {
            convertView = View.inflate(context, R.layout.item_video_pager, null);
            viewHolder = new ViewHolder(convertView);
            convertView.setTag(viewHolder);
        }
        else
        {
            viewHolder = (ViewHolder) convertView.getTag();
        }

        //根据position得到列表中对应位置的数据
        MediaItem mediaItem = mediaItems.get(position);
        viewHolder.tvName.setText(mediaItem.getName());
        viewHolder.tvSize.setText(Formatter.formatFileSize(context, mediaItem.getSize()));
        viewHolder.tvTime.setText(utils.stringForTime((int) mediaItem.getDuration()));

        return convertView;
    }

    static class ViewHolder
    {
        @Bind(R.id.iv_icon)
        ImageView ivIcon;
        @Bind(R.id.tv_name)
        TextView tvName;
        @Bind(R.id.tv_time)
        TextView tvTime;
        @Bind(R.id.tv_size)
        TextView tvSize;

        ViewHolder(View view)
        {
            ButterKnife.bind(this, view);
        }
    }
}

6.4 视频列表的Item完成和相关数据处理

6.4.1 item_video_pager.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:padding="3dp"
    android:layout_height="100dp">

    <ImageView
        android:id="@+id/iv_icon"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:layout_marginLeft="8dp"
        android:src="@drawable/video_default_icon" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_marginLeft="3dp"
        android:layout_toRightOf="@id/iv_icon"
        android:gravity="center_vertical"
        android:orientation="vertical">

        <TextView
            android:id="@+id/tv_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="视频的名称"
            android:textColor="@android:color/black"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/tv_time"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="5dp"
            android:text="20:00"
            android:textColor="#55000000"
            android:textSize="16sp" />
    </LinearLayout>

    <TextView
        android:id="@+id/tv_size"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_marginBottom="3dp"
        android:layout_marginRight="8dp"
        android:text="20MB"
        android:textColor="#55000000"
        android:textSize="16sp" />

    <View
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:background="#44000000"
        android:layout_alignParentBottom="true"
        android:layout_width="match_parent"
        android:layout_height="1dp"/>

</RelativeLayout>

07-播放器的控制面板

7.1 播放器控制栏顶部

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:id="@+id/ll_top"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/bg_player_status"
            android:gravity="center_vertical"
            android:orientation="horizontal">

            <TextView
                android:id="@+id/tv_name"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="8dp"
                android:layout_weight="1"
                android:text="视频名称"
                android:textColor="#ffffff" />

            <ImageView
                android:id="@+id/iv_battery"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginRight="8dp"
                android:src="@drawable/ic_battery_10" />

            <TextView
                android:id="@+id/tv_system_time"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="8dp"
                android:layout_marginRight="8dp"
                android:text="12:00"
                android:textColor="#ffffff" />
        </LinearLayout>


        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/bg_player_top_control"
            android:gravity="center_vertical"
            android:orientation="horizontal">

            <Button
                android:id="@+id/btn_voice"

                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/btn_voice_selector" />

            <SeekBar
                android:id="@+id/seekbar_voice"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:maxHeight="6dp"
                android:minHeight="6dp"
                android:progress="20"
                android:progressDrawable="@drawable/progress_horizontal"
                android:thumb="@drawable/progress_thumb" />

            <Button
                android:id="@+id/btn_swich_player"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/btn_swich_player_selector" />

        </LinearLayout>


    </LinearLayout>


    <LinearLayout
        android:id="@+id/ll_bottom"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:orientation="vertical">


        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/bg_player_bottom_seekbar"
            android:gravity="center_vertical"
            android:orientation="horizontal">

            <TextView
                android:id="@+id/tv_current_time"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="8dp"
                android:text="0:00"
                android:textColor="#ffffff" />

            <SeekBar
                android:id="@+id/seekbar_video"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="8dp"
                android:layout_marginRight="8dp"
                android:layout_weight="1"
                android:maxHeight="6dp"
                android:minHeight="6dp"
                android:progress="20"
                android:progressDrawable="@drawable/progress_horizontal"
                android:thumb="@drawable/progress_thumb" />

            <TextView
                android:id="@+id/tv_duration"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginRight="8dp"
                android:text="20:00"
                android:textColor="#ffffff" />

        </LinearLayout>


        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/bg_player_bottom_control"
            android:gravity="center_vertical"
            android:orientation="horizontal">

            <Button
                android:id="@+id/btn_exit"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@drawable/btn_exit_selector" />

            <Button
                android:id="@+id/btn_video_pre"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@drawable/btn_video_pre_selector" />


            <Button
                android:id="@+id/btn_video_start_pause"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@drawable/btn_video_pause_selector" />

            <Button
                android:id="@+id/btn_video_next"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@drawable/btn_video_next_selector" />

            <Button
                android:id="@+id/btn_video_siwch_screen"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@drawable/btn_video_siwch_screen_full_selector" />


        </LinearLayout>


    </LinearLayout>

</RelativeLayout>

7.2 系统播放器布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="#000000"
                android:gravity="center">

    <com.example.administrator.mediaplayer.view.VideoView
        android:id="@+id/videoview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerInParent="true"/>

    <include
        android:id="@+id/media_controller"
        layout="@layout/media_controller"/>

    <include
        android:id="@+id/ll_buffer"
        layout="@layout/ll_buffer"/>

    <include
        android:id="@+id/ll_loading"
        layout="@layout/ll_loading"/>

</RelativeLayout>

08-视频seekBar进度更新

8.1 设置总时间和seeKBar的总长度,在准备好了的回调中设置

int duration = videoview.getDuration();
//把毫秒转换成 12:22.40
tv_duration.setText(utils.stringForTime(duration));
          
//设置视频的总长度为video_seekBar的多少等分
video_seekBar.setMax(duration);
          
//发消息开始更新
handler.sendEmptyMessage(PROGRESS);

09-实现视频的拖动

class VideoOnSeekBarChangeListener implements SeekBar.OnSeekBarChangeListener
    {

        /**
         * 当手指滑动的时候,会引起SeekBar进度变化,会回调这个方法
         *
         * @param seekBar
         * @param progress
         * @param fromUser 如果是用户引起的true,不是用户引起的false
         */
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
        {
            if (fromUser)
            {
                videoview.seekTo(progress);
            }

        }

        /**
         * 当手指触碰的时候回调这个方法
         *
         * @param seekBar
         */
        @Override
        public void onStartTrackingTouch(SeekBar seekBar)
        {

            handler.removeMessages(HIDE_MEDIACONTROLLER);
        }

        /**
         * 当手指离开的时候回调这个方法
         *
         * @param seekBar
         */
        @Override
        public void onStopTrackingTouch(SeekBar seekBar)
        {
            handler.sendEmptyMessageDelayed(HIDE_MEDIACONTROLLER, 4000);
        }
    }


 //设置SeeKbar状态变化的监听
        seekbarVideo.setOnSeekBarChangeListener(new VideoOnSeekBarChangeListener());

010-设置电池状态

10.1 监听电量变化广播

    utils = new Utils();
    //注册电量广播
    receiver = new MyReceiver();
    IntentFilter intentFiler = new IntentFilter();
    //当电量变化的时候发这个广播
    intentFiler.addAction(Intent.ACTION_BATTERY_CHANGED);
    registerReceiver(receiver, intentFiler);




 class MyReceiver extends BroadcastReceiver
    {

        @Override
        public void onReceive(Context context, Intent intent)
        {
            int level = intent.getIntExtra("level", 0);//0~100;
            setBattery(level);
        }
    }

10.2电量刷新方法

  /**
   * 设置电量的状态
   */
  private void setBattery(int level)
    {
        if (level <= 0)
        {
            ivBattery.setImageResource(R.drawable.ic_battery_0);
        }
        else if (level <= 10)
        {
            ivBattery.setImageResource(R.drawable.ic_battery_10);
        }
        else if (level <= 20)
        {
            ivBattery.setImageResource(R.drawable.ic_battery_20);
        }
        else if (level <= 40)
        {
            ivBattery.setImageResource(R.drawable.ic_battery_40);
        }
        else if (level <= 60)
        {
            ivBattery.setImageResource(R.drawable.ic_battery_60);
        }
        else if (level <= 80)
        {
            ivBattery.setImageResource(R.drawable.ic_battery_80);
        }
        else if (level <= 100)
        {
            ivBattery.setImageResource(R.drawable.ic_battery_100);
        }
        else
        {
            ivBattery.setImageResource(R.drawable.ic_battery_100);
        }
    }

11-得到系统时间并且更新显示

11.1得到系统时间

        /**
         * 得到系统时间
         *
         * @return
         */
        private String getSysteTime()
        {
            SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
            return format.format(new Date());
        }

11.2在hanlder设置更新

//设置系统时间
tv_system_time.setText(utils.getSystemTime());

相关文章

  • 手机影音01

    阅读原文 01-splash页面 02-MainActivity主页面布局 2.1activity_main.xm...

  • 手机影音04

    阅读原文 29-音乐列表AudioPager 30-音乐播放器页面-动画列表-帧动画 播放动画 31-创建服务和创...

  • 手机影音03

    阅读原文 19-监听播放外界网络和本地视频&如何调起其他播放器 19.1监听播放外界网络和本地视频,参照Galle...

  • 手机影音02

    阅读原文 12-传递播放列表&对象的序列化 12.1 视频列表传数据 12.2 MediaItem 13-监听播放...

  • +

    大类 手机论坛 资源分享1.1影音 1.2软件 1.3ROM 1.4游戏 手机品牌2.1 winPhone 2.2...

  • 京东影音节收官盘点,Beats价格坚挺,魅族性价比最高

    说起手机配件促销活动,就不得不谈谈最近几天火爆的京东影音节了,作为盛大的手机配件促销盛会之一的京东影音节,在其上各...

  • 6.3 小米手机到小米智能

    小米手机成功两年之后,雷军推出小米音像——暴风影音。暴风影音是小米智能产品中的一种,由软件设计成形到硬件成行,小米...

  • 好奇者的新玩具:暴风魔镜 4 评测

    暴风魔镜,是暴风影音正式发布的一款硬件产品,是一款虚拟现实眼镜,在使用时需要配合暴风影音开发的专属魔镜应用,在手机...

  • 让微投亮出TV效果-菲斯特画卷光学屏S1评测

    影音产品一直是家庭娱乐的主角,虽然手机有的时候可以弥补大屏的空闲时间,但是真正享受极致的影音效果,屏幕自然是越大越...

  • Android视频播放利器 MX Player Pro v1.1

    MX Player Pro 是一款超级强悍的 Android 手机高清视频播放利器,推荐手机高清影音发烧友升级!M...

网友评论

      本文标题:手机影音01

      本文链接:https://www.haomeiwen.com/subject/tzqtaftx.html