【从 0 开始开发一款直播 APP】1 高层封装之 Activi
本文为菜鸟窝作者蒋志碧的连载。
菜鸟窝是专业的程序猿在线学习平台,提供最系统的 Android 项目实战课程
“从 0 开始开发一款直播 APP ”系列来聊聊时下最火的直播 APP,如何完整的实现一个类"腾讯直播"的商业化项目
一、概述
Activity 作为四大组件之首,其重要性可见一斑,为提高代码复用率和开发效率,封装必不可少。Activity 在开发中会重复很多操作:View 初始化、数据初始化、事件监听、ActionBar、设置布局、获取控件、吐司、页面跳转等。因此,这么多重复的工作,封装起来便可简单解决。
二、封装方法
新建 BaseActivity,将其改为抽象类,并继承 FragmentActivity,实现 onCreate() 方法
public abstract class BaseActivity extends FragmentActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
2.1 自定义 ActionBar
protected ActionBar mActionBar;
//设置setToolbar
protected abstract void setActionBar();
2.2 页面跳转
public void invoke(Context context,Class clz){
startActivity(new Intent(context,clz));
}
2.3 初始化数据
protected abstract void initData();
2.4 布局加载前的操作
protected void setBeforeLayout(){}
2.5 获取控件 Id (避免类型转换的繁琐,抽取 findViewById() )
public <T extends View> T obtainView(int resId){
return (T)findViewById(resId);
}
2.6 简化 Toast ( Toast 运行在 UI 线程,这里使用 Handler 进行操作,也可以采用其他方式)
public void showToast(final int resId){
mHandler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(BaseActivity.this,getString(resId),Toast.LENGTH_SHORT).show();
}
});
}
2.7 获取布局文件
protected abstract int getLayoutId();
2.8 设置监听
protected abstract void setListener();
2.9 重写 Activity 方法
@Override
protected void onPause() {
super.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
}
@Override
protected void onResume() {
super.onResume();
}
2.10 方法调用(注意方法调用顺序)
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setBeforeLayout();
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
mContext = this;
if (getLayoutId() != 0){
setContentView(getLayoutId());
}
initView();
initData();
setActionBar();
setListener();
}
三、Demo 演示 —— 闪屏页启动界面
3.1 闪屏页全屏显示
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
3.2 闪屏页 3 秒动画后跳转
private void startAnimation() {
AlphaAnimation animation = new AlphaAnimation(0.1f,1.0f);
animation.setFillAfter(true);
animation.setDuration(3000);
animation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
invoke(SplashActivity.this,LoginActivity.class);
//我们平时使用的App中,闪屏页均只出现一次,因此应结束当前Activity
finish();
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
mRlSplash.startAnimation(animation);
}
3.3 闪屏页布局 activity_splash.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/rl_splash"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/splash_bg"
tools:context="com.dali.admin.livestreaming.activity.SplashActivity">
</RelativeLayout>
3.4 代码合并
public class SplashActivity extends BaseActivity {
private RelativeLayout mRlSplash;
@Override
protected void setListener() {
}
@Override
protected void initData() {
}
@Override
protected void setActionBar() {
}
@Override
protected void initView() {
mRlSplash = obtainView(R.id.rl_splash);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
startAnimation();
}
private void startAnimation() {
AlphaAnimation animation = new AlphaAnimation(0.1f,1.0f);
animation.setFillAfter(true);
animation.setDuration(3000);
animation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
invoke(SplashActivity.this,LoginActivity.class);
finish();
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
mRlSplash.startAnimation(animation);
}
@Override
protected int getLayoutId() {
return R.layout.activity_splash;
}
}
四、运行效果展示
五、总结
编码中遇到重复性工作将代码抽取封装成抽象类,提高代码复用率并提高效率
学习过程中遇到问题尽量自己解决,多查阅资料,会提高自己学习能力
学习本节需要对 Activity 的基本操作熟练掌握
更多内容,请关注菜鸟窝(微信公众号ID: cniao5),程序猿的在线学习平台。 欢迎勾搭小助手(lov730)加入高端技术交流群*
转载请注明出处,本文出自菜鸟窝,原文链接: http://www.cniao5.com/forum/thread/5cc8edfc0eee11e79ff800163e0230fa )