前一篇已经将视频播放页面的布局弄好了,这一篇主要来处理播放页面的各种逻辑(播放、暂停、上/下一个视频、音量、进度…),逻辑比较多,一点一点贴代码。
顶部布局的逻辑:
显示系统时间,时间是一秒一秒更新的,所以可以通过循环发消息的方法来更新系统时间。相关代码如下:
private static final int UPDATE_SYSTEM_TIME = 0;//更新系统时间的消息 //主线程收到消息后,继续发消息更新系统时间 switch (msg.what) { case UPDATE_SYSTEM_TIME: updateSystemTime(); break; } /** * 更新系统的时间 */ private void updateSystemTime() { LogUtils.i("updateSystemTime"); tvSystemTime.setText(StringUtil.formatSystemTime()); handler.sendEmptyMessageDelayed(UPDATE_SYSTEM_TIME, 1000); }
updateSystemTime();方法先在initData的时候调用一次。
显示电池电量,这里准备了7张图,用来表示手机电池电量的显示。在initData时,注册一个电池电量的广播接受者,当电量改变时,更新一下显示电量的图片。代码如下:
/** * 注册电量变化的广播接受者 */ private void registerBatteryChangeReceiver() { IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); batteryChangeReceiver = new BatteryChangeReceiver(); registerReceiver(batteryChangeReceiver, filter); }
private class BatteryChangeReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { //level:表示系统电量等级,0-100 int level = intent.getIntExtra("level", 0); updateBatteryBg(level); } }
/** * 根据系统电量等级去设置对应的图片 * * @param level 电量等级 */ private void updateBatteryBg(int level) { if (level <= 0) { ivBattery.setBackgroundResource(R.mipmap.ic_battery_0); } else if (level > 0 && level <= 10) { ivBattery.setBackgroundResource(R.mipmap.ic_battery_10); } else if (level > 10 && level <= 20) { ivBattery.setBackgroundResource(R.mipmap.ic_battery_20); } else if (level > 20 && level <= 40) { ivBattery.setBackgroundResource(R.mipmap.ic_battery_40); } else if (level > 40 && level <= 60) { ivBattery.setBackgroundResource(R.mipmap.ic_battery_60); } else if (level > 60 && level <= 80) { ivBattery.setBackgroundResource(R.mipmap.ic_battery_80); } else { ivBattery.setBackgroundResource(R.mipmap.ic_battery_100); } }
附一张图片,看前面的电量小图标,studio这一点很好
另外,提前说下,当退出该activity的时候,记得把所有的消息或者广播给移除掉。(养成良好的编程习惯。)
@Override protected void onDestroy() { super.onDestroy(); handler.removeCallbacksAndMessages(null);//清除所有的回调和消息 unregisterReceiver(batteryChangeReceiver); }
初始化音量,这里要将SeeKBar的长度设置成音量的长度,并将进度设置成当前的音量。
/** * 初始化SeekBar的音量 */ private void initVolume()