一、前段时间看了某培训机构的讲解手机影音的视频(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 { 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(); } } }在这里我们还可以在加一个小功能,就是触摸屏幕后立即进入OneActivity。重写onTouchEvent()方法 ,有触摸事件后,handler延时清零。
@Override public boolean onTouchEvent(MotionEvent event) { handler.removeCallbacksAndMessages(0); startOneActivity(); return super.onTouchEvent(event); }