前序:今天开始我会每天更新这个项目的进展和想法,如果有什么不对的地方,也希望网友们提出来,大家一起学习!
注意:我是按照项目的整一个逻辑顺序一点点的去实现,所以篇幅有点长,但只要用心去看和实现,一定会有收获,好了,不瞎比比了,直接进正文。
一.登陆界面
1)效果图(个人很装逼的用了自己的相片去作为登陆页面的imageview)
2)需求分析
(1)界面:因为组件要素都在中间聚集,所以最好用相对布局来写这些组件,因为相对布局可以相对于父容器和控件。最后分析这里有什么组件要素,这里有imageview,textview和progressbar这三个控件;
(2)定时跳转到主界面;
(3)点击登陆界面跳转到主界面;
(4)主界面返回的时候直接跳出app,而不会返回登陆界面或者说多次停留在主页。
3)上代码:
1)布局文件
<?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=".activity.SplashActivity"> <ImageView android:id="@+id/iv_splash_icon" android:layout_width="80dp" android:layout_height="80dp" android:layout_centerInParent="true" android:src="@drawable/ic_launcher" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/iv_splash_icon" android:layout_centerHorizontal="true" android:gravity="center" android:orientation="horizontal"> <ProgressBar android:layout_width="30dp" android:layout_height="30dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="8dp" android:text="正在启动..." android:textSize="18sp" /> </LinearLayout> </RelativeLayout>
2)SplashActivity
package com.example.pdyingyin.activity; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.util.Log; import android.view.MotionEvent; import com.example.pdyingyin.R; //登陆界面 public class SplashActivity extends Activity { private static final String TAG = SplashActivity.class.getSimpleName();//"SplashActivity"
private Handler handler = new Handler(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash);
//需求一:定时两秒跳转到主界面 handler.postDelayed(new Runnable() { @Override public void run() { //两秒后才执行到这里 //执行在主线程中(在那个线程里调用这个方法,就在那个线程里执行) startMainActivity(); Log.e(TAG, "当前线程名称==" + Thread.currentThread().getName()); } }, 2000); }
//以上需求一的逻辑代码
private boolean isStartMain = false; /** * 跳转到主页面,并且把当前页面关闭掉 */ private void startMainActivity() { //这个的作用是如果我们之前直接按了键进去首页了,之后在执行主线程的startMainactivity方法时,就不执行逻辑处理了, //从而避免发生多个同种活动存在
//需求三 if(!isStartMain){ isStartMain = true; Intent intent = new Intent(this,MainActivity.class); startActivity(intent); //关闭当前页面 finish(); } }
//需求二:点击界面跳转到主界面 //普通的话,我们会等两秒之后在跳转到我们的主页面,而这个方法的出现就是 //当我们点击界面时,我们就进入到我们的主页面了 @Override public boolean onTouchEvent(MotionEvent event) { Log.e(TAG,"onTouchEvent==Action"+event.getAction()); startMainActivity(); return super.onTouchEvent(event); } @Override protected void onDestroy() { //把所有的消息和回调移除 handler.removeCallbacksAndMessages(null); super.onDestroy(); } }
4)总结:直接看代码里面的注释,按照需求为单位一个一个功能去消化。
二.主界面
1)效果图
2)需求分析:
(0)其布局为一个标题栏,一个
(1)其有四大页面,也就是要用到fragment碎片
(2)要为每个按钮设立监听
(3)要为每个按钮设置点击前后变化
(4)其要有一个特制的标题栏,该标题栏有一个搜索功能,点击搜索的话跳转到搜索的界面,还有两个按钮
原文:http://www.cnblogs.com/lpd1/p/7747970.html