1 Star 0 Fork 0

型猿咚咚/Step by step to build an app

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
First Step 8.43 KB
一键复制 编辑 原始数据 按行查看 历史
型猿咚咚 提交于 2015-10-24 16:50 . new file
【开源中国】第一讲,启动界面
程序启动第一个界面类: net.oschina.app.AppStart
功能描述:一张图片,带有透明度的动画效果,效果动画完成后自动启动新的Activity(Main)
第一步:在src/main/AndroidManifest.xml中声明启动activity组件:
<activity
android:name=".AppStart"
android:label="@string/app_name"
<!—- 屏幕方向:垂直布局 -->
android:screenOrientation="portrait"
android:theme="@style/Theme.AppStartLoad" >
<intent-filter>
<!—- 注册意图:启动MainActivity的意图 -->
<action android:name="android.intent.action.MAIN" />
<!—- 注册为启动器:点击桌面图标启动应用 -->
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
并在values/styles.xml添加全屏的样式,这一步记得有哦,不然加载不出图像
<style name="Theme.AppStartLoad" parent="android:Theme.Black.NoTitleBar.Fullscreen">
<item name="android:windowBackground">@drawable/welcome</item>
<item name="android:windowNoTitle">true</item>
</style>
第二步:layout/app_start.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/app_start_view"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
这个是设置空间里的对象在空间里的位置,在这好像没有用到
android:gravity="bottom"
设置欢迎图片,也就是启动看到的界面
android:background="@drawable/welcome">
</LinearLayout>
第三步:net/oschina/app/AppStart.java,目前应该是这样:
import java.io.File;
//这里是包里的源文件
import net.oschina.app.ui.MainActivity;
//这里是系统自带的,我们暂时不用分析
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
/**
* 应用启动界面
*
* @author FireAnt(http://my.oschina.net/LittleDY)
* @created 2014年12月22日 上午11:51:56
*
*/
public class AppStart extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 防止第三方跳转时出现双实例,这里用到了一个AppManager
Activity aty = AppManager.getActivity(MainActivity.class);
if (aty != null && !aty.isFinishing()) {
finish();
}
// SystemTool.gc(this); //针对性能好的手机使用,加快应用相应速度
final View view = View.inflate(this, R.layout.app_start, null);
setContentView(view);
// 渐变展示启动屏
AlphaAnimation aa = new AlphaAnimation(0.5f, 1.0f);
aa.setDuration(800);
view.startAnimation(aa);
aa.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationEnd(Animation arg0) {
redirectTo();
}
@Override
public void onAnimationRepeat(Animation animation) {}
@Override
public void onAnimationStart(Animation animation) {}
});
}
@Override
protected void onResume() {
super.onResume();
/*以后用到的,用来检查更新:int cacheVersion = PreferenceHelper.readInt(this, "first_install",
"first_install", -1);
int currentVersion = TDevice.getVersionCode();
if (cacheVersion < currentVersion) {
PreferenceHelper.write(this, "first_install", "first_install",
currentVersion);
cleanImageCache();
}
}
private void cleanImageCache() {
final File folder = FileUtils.getSaveFolder("OSChina/imagecache");
KJAsyncTask.execute(new Runnable() {
@Override
public void run() {
for (File file : folder.listFiles()) {
file.delete();
}
}
});*/
}
/**
* 跳转到MainActivity...
*/
private void redirectTo() {
/*以后用到的,用来启动下载网络的意图
Intent uploadLog = new Intent(this, LogUploadService.class);
startService(uploadLog);*/
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
//注意,别忘了加这个哦,不然按返回键会出现启动界面的
finish();
}
}
4,上面用到一个AppManager,这是一个单例类,把创建的Activity放入到栈中进行管理,提供添加Activity , 移除当前Activity , 移除指定的Activity , 移除所有的Activity ,获得当前的Activity , 退出程序。这个管理app运行的类,是比较赞的,值得我们参考挪用,我们也可以模仿写一个FragmentManager管理类
net/oschina/app/AppManager.java
/**
* activity堆栈式管理
*
* @author FireAnt(http://my.oschina.net/LittleDY)
* @created 2014年10月30日 下午6:22:05
*
*/
public class AppManager {
private static Stack<Activity> activityStack;
private static AppManager instance;
private AppManager() {}
/**
* 单一实例
*/
public static AppManager getAppManager() {
if (instance == null) {
instance = new AppManager();
}
return instance;
}
/**
* 添加Activity到堆栈
*/
public void addActivity(Activity activity) {
if (activityStack == null) {
activityStack = new Stack<Activity>();
}
activityStack.add(activity);
}
/**
* 获取当前Activity(堆栈中最后一个压入的)
*/
public Activity currentActivity() {
Activity activity = activityStack.lastElement();
return activity;
}
/**
* 结束当前Activity(堆栈中最后一个压入的)
*/
public void finishActivity() {
Activity activity = activityStack.lastElement();
finishActivity(activity);
}
/**
* 结束指定的Activity
*/
public void finishActivity(Activity activity) {
if (activity != null && !activity.isFinishing()) {
activityStack.remove(activity);
activity.finish();
activity = null;
}
}
/**
* 结束指定类名的Activity
*/
public void finishActivity(Class<?> cls) {
for (Activity activity : activityStack) {
if (activity.getClass().equals(cls)) {
finishActivity(activity);
break;
}
}
}
/**
* 结束所有Activity
*/
public void finishAllActivity() {
for (int i = 0, size = activityStack.size(); i < size; i++) {
if (null != activityStack.get(i)) {
finishActivity(activityStack.get(i));
break;
}
}
activityStack.clear();
}
/**
* 获取指定的Activity
*
* @author kymjs
*/
public static Activity getActivity(Class<?> cls) {
if (activityStack != null)
for (Activity activity : activityStack) {
if (activity.getClass().equals(cls)) {
return activity;
}
}
return null;
}
/**
* 退出应用程序
*/
public void AppExit(Context context) {
try {
finishAllActivity();
// 杀死该应用进程
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(0);
} catch (Exception e) {
}
}
}
用上面的代码创建一个项目,注释掉目前用不到的代码,运行一下,看看效果怎么样
如果出现下面的错误:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xiaozhong.myapplication/com.xiaozhong.myapplication.Main2Activity}: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
原因是:创建的activity是MainActivity extends XxxxActivity这样的了,
解决办法:把XxxxActivity改成Activity,然后导包,在运行就没了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Android
1
https://gitee.com/xydd/Step-by-step-to-build-an-app.git
git@gitee.com:xydd/Step-by-step-to-build-an-app.git
xydd
Step-by-step-to-build-an-app
Step by step to build an app
master

搜索帮助

0d507c66 1850385 C8b1a773 1850385