一、前段时间看了某培训机构的讲解手机影音的视频(118集),看完视频后敲代码,感觉收获不少,同时也有了不少想法想在博客里分享分享,顺便也巩固一下学到的知识。
二、分析软件结构
1.首先先介绍该培训机构的讲解的软件结构,然后在说说我对这个结构的看法。
①该培训机构的讲解的软件结构:首先它有一个软件启动页面,然后进入主页面,主页面有四大类:本地视频(VideoPager)、本地音乐(AudioPager)、
网络视频(NetVideoPager)、网络音乐(NetAudioPager),以及一些小挂件等等。
②我对此结构看法:最没用这软件之前呢,感觉这四大页面分类也挺合理的,有本地的、有联网的。但是写完程序下载到手机上测试后发现有很多的问题可以改进。
a:本地视频和本地音乐这两项基本无用。这两项就是把手机SD卡里的视频、音乐全都加载到页面上,测试发现手机里的铃声啊,广告宣传视频啊等一些乱七八糟的东西全都加载出来了,这体验非常不好。在结合我们平时用手机听音乐、看视频的习惯,视频,音乐资源应该全部改为网络资源,并且可以下载到手机本地,除此之外呢,还可以加上用户登陆功能等。
b:结合以上观点,我们可以先把某培训机构讲的先学会了,然后在尽情地发挥想象去修改这个软件。
三、软件启动页面
在软件启动之前会有一些启动广告、软件宣传的页面
先分析这个页面:这个布局很简单,所有的View都在中间,所以全局使用相对布局,ProgressBar和TextView使用线性布局,并且在ImageView的下方。
<?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:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff"
tools:context="com.example.administrator.mobleplayer.Activity.MainActivity">
<ImageView
android:id="@+id/iv_splash_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/login_icon"
android:layout_centerInParent="true"/>
<LinearLayout
android:layout_below="@id/iv_splash_icon"
android:layout_centerHorizontal="true"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ProgressBar
android:layout_width="8dp"
android:layout_height="8dp" />
<TextView
android:layout_marginLeft="8dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="正在启动..."/>
</LinearLayout>
</RelativeLayout>
再没做过启动页面之前,我一直以为显示的是一个ImageView没想到它是一个Activity
在MainActivity里我们设置显示MainActivity 2s 后启动 主Activity(OneActivity) (原谅我的错误命名。。。)
首先确保MainActivity在启动软件后第一个执行
<activity android:name=".Activity.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
在MainActivity里我们需要完成两项:一是延时2s 用handler.postDelayed();可完成延时 二是启动OneActivity
Intent intent = new Intent(this,OneActivity.class);
startActivity(intent);
使用显式Intent去跳转Activity 然后finish() 销毁MainActivity
完整代码:
public class MainActivity extends AppCompatActivity {在这里我们还可以在加一个小功能,就是触摸屏幕后立即进入OneActivity。重写onTouchEvent()方法 ,有触摸事件后,handler延时清零。
private String TAG = "MainActivity";
private Handler handler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(TAG,"正在运行MainActivity");
handler.postDelayed(new Runnable() {
@Override
public void run() {
//在主线程的Runnable
startOneActivity();
}
},2000);
}
private boolean isStartOne = false;
private void startOneActivity() {
if (!isStartOne) {
isStartOne = true;
Intent intent = new Intent(this,OneActivity.class);
startActivity(intent);
finish();
}
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
handler.removeCallbacksAndMessages(0);
startOneActivity();
return super.onTouchEvent(event);
}