《Android》课程设计报告
Android课程设计报告模板
android移动开发课程设计报告学生姓名:X X 学号:XXXXXXX 专业:计算机科学与技术班级:XXXXXXX 设计题目:口袋微博学年学期:2015 年秋季学期指导教师:X X目录(示例)一、设计题目 (1)二、设计目的 (1)三、设计原理及方案 (1)1使用的软件工具和环境 (1)2需求分析与概要设计 (1)3数据库设计(若有) (2)4详细设计和关键问题 (3)四、实现效果 (8)五、设计体会 (69)参考文献 (71)一、设计题目Android社交分享平台——口袋微博设计目的二、设计原理及方案首先要实现以下这些功能:Android端登录和注册模块的实现Android端个人中心模块的实现Android端快速发布模块的实现Android端查看联系人模块的实现Android端管理日志模块的实现Android端管理相册模块的实现1使用的软件工具和环境1)PC计算机2)JDK安装包3)Eclipse安装包4)Android SDK安装包5)ADT插件2需求分析与概要设计(详细描述系统的功能需求)Android端登录和注册模块的实现Android端个人中心模块的实现Android端快速发布模块的实现Android端查看联系人模块的实现Android端管理日志模块的实现Android端管理相册模块的实现(详细描述系统结构;例如总体架构设计、流程图、用例图等,并分别描述)说明:这里的用例图和类图的对应关系可以在下面的E-R图上找到,这里我就略了一下。
Android端总体架Web端的原理示意图数据库设计(若有的必须给出,没有的给出其他重要设计过程)(给出ER关系图及数据库表)用powerdesigner设计对应关系,并生成表,E-R图3详细设计和关键问题(分功能模块描述设计细节,例如详细功能图、类图和关键流程图等。
遇到的关键Android 问题是如何解决的)相册列表:功能图查看修改权限二、快速发布:三、实现效果(包括系统描述和程序运行界面的截图)1.口袋微博用户登录界面2.口袋微博个人中心——快速发布功能界面3.口袋微博个人中心——我的好友功能界面4.口袋微博个人中心——最近访客功能界面5.口袋微博个人中心——日志列表功能界面6.口袋微博个人中心——相册列表功能界面7.口袋微博——搜索好友界面以下是部分重要代码由于代码太多无法容纳(1)LoginActivity.java登录界面package wyf.wpf;import static wyf.wpf.ConstantUtil.SERVER_ADDRESS; import static wyf.wpf.ConstantUtil.SERVER_PORT; import android.app.Activity;import android.app.ProgressDialog;import android.content.Intent;import android.content.SharedPreferences;import android.os.Bundle;import android.os.Looper;import android.view.View;import android.widget.Button;import android.widget.CheckBox;import android.widget.EditText;import android.widget.ImageButton;import android.widget.Toast;public class LoginActivity extends Activity {MyConnector mc = null;ProgressDialog pd;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.login);checkIfRemember();Button btnLogin = (Button)findViewById(R.id.btnLogin);btnLogin.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {pd = ProgressDialog.show(LoginActivity.this, "请稍候", "正在连接服务器...", true, true);login();}});Button btnReg = (Button)findViewById(R.id.btnReg);btnReg.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(LoginActivity.this, wyf.wpf.RegActivity.class);startActivity(intent);finish();}});ImageButton ibExit = (ImageButton)findViewById(R.id.ibExit);ibExit.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {android.os.Process.killProcess(android.os.Process.myPid()); //结束进程,退出程序}});}//方法:连接服务器进行登录public void login(){new Thread(){public void run(){Looper.prepare();try{if(mc == null){mc = new MyConnector(SERVER_ADDRESS, SERVER_PORT);}EditText etUid = (EditText)findViewById(R.id.etUid); //获得帐号EditTextEditText etPwd = (EditText)findViewById(R.id.etPwd); //获得密码EditTextString uid = etUid.getEditableText().toString().trim(); //获得输入的帐号String pwd = etPwd.getEditableText().toString().trim(); //获得输入的密码if(uid.equals("") || pwd.equals("")){ //判断输入是否为空Toast.makeText(LoginActivity.this, "请输入帐号或密码!", Toast.LENGTH_SHORT).show();//输出提示消息return;}String msg = "<#LOGIN#>"+uid+"|"+pwd; //组织要返回的字符串mc.dout.writeUTF(msg); //发出消息String receivedMsg = mc.din.readUTF(); //读取服务器发来的消息pd.dismiss();if(receivedMsg.startsWith("<#LOGIN_SUCCESS#>")){ //收到的消息为登录成功消息receivedMsg = receivedMsg.substring(17);String [] sa = receivedMsg.split("\\|");CheckBox cb = (CheckBox)findViewById(R.id.cbRemember); //获得CheckBox 对象if(cb.isChecked()){rememberMe(uid,pwd);}//转到功能面板Intent intent = new Intent(LoginActivity.this,FunctionTabActivity.class);intent.putExtra("uno", sa[0]);startActivity(intent); //启动功能Activityfinish();}else if(msg.startsWith("<#LOGIN_FAIL#>")){ //收到的消息为登录失败Toast.makeText(LoginActivity.this, msg.substring(14), Toast.LENGTH_LONG).show();Looper.loop();Looper.myLooper().quit();}}catch(Exception e){e.printStackTrace();}}}.start();}//方法:将用户的id和密码存入Preferencespublic void rememberMe(String uid,String pwd){SharedPreferences sp = getPreferences(MODE_PRIV ATE); //获得PreferencesSharedPreferences.Editor editor = sp.edit(); //获得Editoreditor.putString("uid", uid); //将用户名存入Preferenceseditor.putString("pwd", pwd); //将密码存入Preferencesmit();}//方法:从Preferences中读取用户名和密码public void checkIfRemember(){SharedPreferences sp = getPreferences(MODE_PRIVA TE); //获得PreferencesString uid = sp.getString("uid", null);String pwd = sp.getString("pwd", null);if(uid != null && pwd!= null){EditText etUid = (EditText)findViewById(R.id.etUid);EditText etPwd = (EditText)findViewById(R.id.etPwd);CheckBox cbRemember = (CheckBox)findViewById(R.id.cbRemember);etUid.setText(uid);etPwd.setText(pwd);cbRemember.setChecked(true);}}@Overrideprotected void onDestroy() {if(mc != null){mc.sayBye();}super.onDestroy();}}(2)DirayActivity.javapackage wyf.wpf;import static wyf.wpf.ConstantUtil.SERVER_ADDRESS; import static wyf.wpf.ConstantUtil.SERVER_PORT;import java.util.ArrayList;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.Gravity;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.BaseAdapter;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.TextView;import android.widget.AdapterView.OnItemClickListener;public class DiaryActivity extends Activity{ArrayList<String []> diaryList = new ArrayList<String []>();MyConnector mc = null;String uno = null;String visitor = null;BaseAdapter ba = new BaseAdapter() {@Overridepublic View getView(int position, View convertView, ViewGroup parent) {LinearLayout ll = new LinearLayout(DiaryActivity.this);TextView tvTitle = new TextView(DiaryActivity.this);ll.setOrientation(LinearLayout.VERTICAL);tvTitle.setTextAppearance(DiaryActivity.this, R.style.title);tvTitle.setGravity(Gravity.LEFT); //设置TextView的对齐方式tvTitle.setText(diaryList.get(position)[1]);TextView tvContent = new TextView(DiaryActivity.this);tvContent.setTextAppearance(DiaryActivity.this, R.style.content); //设置字体大小tvContent.setGravity(Gravity.LEFT); //设置TextView的对齐方式tvContent.setText(diaryList.get(position)[2]); //设置显示的内容ll.addView(tvTitle);ll.addView(tvContent);return ll;}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic Object getItem(int arg0) {return null;}@Overridepublic int getCount() {return diaryList.size();}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Intent intent = getIntent();uno = intent.getStringExtra("uno"); //获得主人IDvisitor = intent.getStringExtra("visitor"); //获得访客IDgetDiaryList();setContentView(yout.diary);ListView lvDiary = (ListView)findViewById(R.id.lvDiary); //获得ListView对象lvDiary.setAdapter(ba);lvDiary.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View v, int position,long id) {Intent intent = new Intent(DiaryActivity.this,CommentActivity.class);intent.putExtra("rid", diaryList.get(position)[0]);intent.putExtra("uno", uno);intent.putExtra("visitor", visitor);startActivity(intent);}});}//方法:获取日志列表public void getDiaryList(){new Thread(){public void run(){try{mc = new MyConnector(SERVER_ADDRESS, SERVER_PORT);mc.dout.writeUTF("<#GET_DIARY#>"+uno+"|"+"1");int size = mc.din.readInt(); //读取日志的长度for(int i=0;i<size;i++){ //循环接受日志信息String diaryInfo = mc.din.readUTF(); //读取日志信息String [] sa = diaryInfo.split("\\|");diaryList.add(sa); //将日志信息添加到列表中}}catch(Exception e){e.printStackTrace();}}}.start();}@Overrideprotected void onDestroy() {if(mc != null){mc.sayBye();mc = null;}super.onDestroy();}}(3)口袋微博_____个人中心PublishActivity.javapackage wyf.wpf;import static wyf.wpf.ConstantUtil.*;import android.app.Activity;import android.app.AlertDialog;import android.app.ProgressDialog;import android.content.DialogInterface;import android.content.Intent;import android.os.Bundle;import android.os.Looper;import android.view.Gravity;import youtInflater;import android.view.View;import android.view.ViewGroup;import youtParams;import android.widget.AdapterView;import android.widget.BaseAdapter;import android.widget.EditText;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.TextView;import android.widget.Toast;import android.widget.AdapterView.OnItemClickListener;public class PublishActivity extends Activity{String [] items = { //存放ListView中的选项内容"更新心情","发布日志","拍照上传"};int [] imgIds = {R.drawable.p_status,R.drawable.p_diary,R.drawable.p_shoot};String uno = null; //存放MyConnector mc = null; //MyConnector对象引用ProgressDialog pd = null; //ProgressDialog对象引用View dialog_view = null; //心情BaseAdapter ba = new BaseAdapter() {@Overridepublic View getView(int position, View convertView, ViewGroup parent) {LinearLayout ll = new LinearLayout(PublishActivity.this);ll.setOrientation(LinearLayout.HORIZONTAL);ll.setGravity(Gravity.CENTER);ImageView iv = new ImageView(PublishActivity.this); //创建ImageView对象iv.setAdjustViewBounds(true);iv.setImageResource(imgIds[position]); //设置ImageView的ll.addView(iv); //将ImageView添加到线性布局中TextView tv = new TextView(PublishActivity.this);tv.setPadding(10, 0, 0, 0);tv.setLayoutParams(new youtParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));tv.setTextAppearance(PublishActivity.this, R.style.title);tv.setText(items[position]); //设置TextView显示的内容ll.addView(tv);return ll;}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic Object getItem(int position) {return null;}@Overridepublic int getCount() {return items.length;}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Intent intent = getIntent(); //获得启动该Activity的Intentuno = intent.getStringExtra("uno");setContentView(yout.publish); //设置当前屏幕ListView lvPublish = (ListView)findViewById(R.id.lvPublish); //获得ListView对象引用lvPublish.setAdapter(ba);lvPublish.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View v, int position,long id) {switch(position){ //判断点击的是哪一个选项case 0: //更新心情LayoutInflater li = LayoutInflater.from(PublishActivity.this);dialog_view = li.inflate(yout.publish_status, null);new AlertDialog.Builder(PublishActivity.this).setTitle("更新心情").setIcon(R.drawable.p_status).setView(dialog_view).setPositiveButton("发表",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {pd = ProgressDialog.show(PublishActivity.this, "请稍候", "正在更新心情...",true,true);updateStatus();}}).setNegativeButton("取消",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {}}).show();break;case 1: //发表日志Intent intent1 = new Intent(PublishActivity.this,PublishDiaryActivity.class);//创建Intentintent1.putExtra("uno", uno); //设置Intent的Extra字段startActivity(intent1);break;case 2: //拍照上传Intent intent2 = new Intent(PublishActivity.this,ShootActivity.class);//创建Intentintent2.putExtra("uno", uno); //设置Intent的Extra字段startActivity(intent2);break;}}});}//方法:连接服务器,更新心情public void updateStatus(){new Thread(){public void run(){Looper.prepare();EditText etStatus = (EditText)dialog_view.findViewById(R.id.etInputStatus);String status = etStatus.getEditableText().toString().trim(); //获得心情内容if(status.equals("")){ //如果输入的心情为空pd.dismiss();Toast.makeText(PublishActivity.this, "请输入更新的心情", Toast.LENGTH_LONG).show();//输出提示Looper.loop();return;}String message = "<#NEW_STA TUS#>"+status+"|"+uno;if(mc == null){mc = new MyConnector(SERVER_ADDRESS, SERVER_PORT);}try{mc.dout.writeUTF(message); //向服务器发送更新的心情pd = ProgressDialog.show(PublishActivity.this, "正在连接网络", "请稍候",true);String reply = mc.din.readUTF(); //从服务器返回的回复pd.dismiss();if(reply.equals("<#STA TUS_SUCCESS#>")){ //心情更新成功Toast.makeText(PublishActivity.this, "心情更新成功!", Toast.LENGTH_LONG).show();Looper.loop();}else { //心情更新失败Toast.makeText(PublishActivity.this, "心情更新失败!", Toast.LENGTH_LONG).show();Looper.loop();}}catch(Exception e){e.printStackTrace();}Looper.myLooper().quit();}}.start();}@Overrideprotected void onDestroy() {if(mc != null){mc.sayBye();}super.onDestroy();}}(4)注册处理____RegActivity.javapackage wyf.wpf;import static wyf.wpf.ConstantUtil.SERVER_ADDRESS;import static wyf.wpf.ConstantUtil.SERVER_PORT;import android.app.Activity;import android.app.ProgressDialog;import android.content.Intent;import android.os.Bundle;import android.os.Handler;import android.os.Looper;import android.os.Message;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.LinearLayout;import android.widget.Toast;public class RegActivity extends Activity{MyConnector mc = null; //声明MyConnector对象String uno = ""; //记录用户的IDProgressDialog pd= null; //声明进度对话框Handler myHandler = new Handler(){@Overridepublic void handleMessage(Message msg) {switch(msg.what){case 0:View linearLayout = (LinearLayout)findViewById(R.id.regResult); //获得线性布局linearLayout.setVisibility(View.VISIBLE); //设置可见性EditText etUno = (EditText)findViewById(R.id.etUno);etUno.setText(uno);break;}super.handleMessage(msg);}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.reg); //设置当前屏幕Button btnReg = (Button)findViewById(R.id.btnReg); //获得注册Button按钮对象btnReg.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {pd = ProgressDialog.show(RegActivity.this, "请稍候...", "正在连接服务器...", false);register();}});Button btnBack = (Button)findViewById(R.id.btnBack); //获得返回按钮对象btnBack.setOnClickListener(new View.OnClickListener() { //为返回按钮添加监听器@Overridepublic void onClick(View v) {Intent intent = new Intent(RegActivity.this,LoginActivity.class); //创建Intent对象startActivity(intent); //启动Activityfinish();}});Button btnEnter = (Button)findViewById(R.id.btnEnter); //获得进入功能面板按钮对象btnEnter.setOnClickListener(new View.OnClickListener() { //为进入功能面板的按钮添加监听器@Overridepublic void onClick(View v) {Intent intent = new Intent(RegActivity.this,FunctionTabActivity.class); //创建Intentintent.putExtra("uno", uno); //设置Extra字段startActivity(intent); //启动FunctionTabfinish(); //关闭该Activity}});}//方法:连接服务器,进行注册public void register(){new Thread(){public void run(){Looper.prepare();//获得用户输入的数据并进行验证EditText etName = (EditText)findViewById(R.id.etName); //获得昵称EditText对象EditText etPwd1 = (EditText)findViewById(R.id.etPwd1); //获得密码EditText对象EditText etPwd2 = (EditText)findViewById(R.id.etPwd2); //获得确认密码EditText 对象EditText etEmail = (EditText)findViewById(R.id.etEmail); //获得邮箱EditText对象EditText etStatus = (EditText)findViewById(R.id.etStatus); //获得心情EditText对象String name = etName.getEditableText().toString().trim(); //获得昵称String pwd1 = etPwd1.getEditableText().toString().trim(); //获得密码String pwd2 = etPwd2.getEditableText().toString().trim(); //获得确认密码String email = etEmail.getEditableText().toString().trim(); //获得邮箱String status = etStatus.getEditableText().toString().trim(); //获得状态if(name.equals("") || pwd1.equals("") || pwd2.equals("") || email.equals("") || status.equals("")){ Toast.makeText(RegActivity.this, "请将注册信息填写完整", Toast.LENGTH_LONG).show();return;}if(!pwd1.equals(pwd2)){ //判断两次输入的密码是否一致Toast.makeText(RegActivity.this, "两次输入的密码不一致!", Toast.LENGTH_LONG).show();return;}try{mc = new MyConnector(SERVER_ADDRESS, SERVER_PORT);String regInfo = "<#REGISTER#>"+name+"|"+pwd1+"|"+email+"|"+status;mc.dout.writeUTF(regInfo);String result = mc.din.readUTF();pd.dismiss();if(result.startsWith("<#REG_SUCCESS#>")){ //返回信息为注册成功result= result.substring(15); //去掉信息头uno = result; //记录用户的IDmyHandler.sendEmptyMessage(0); //发出Handler消息Toast.makeText(RegActivity.this, "注册成功!", Toast.LENGTH_LONG).show();}else{ //注册失败Toast.makeText(RegActivity.this, "注册失败!请重试!", Toast.LENGTH_LONG).show();}}catch(Exception e){e.printStackTrace();}}}.start();}@Overrideprotected void onDestroy() {if(mc != null){mc.sayBye();}super.onDestroy();}}(5)AlbumActivity.javapackage wyf.wpf;import static wyf.wpf.ConstantUtil.IMAGESWITCHER_HEIGHT;import static wyf.wpf.ConstantUtil.PHOTO_HEIGHT;import static wyf.wpf.ConstantUtil.PHOTO_WIDTH;import static wyf.wpf.ConstantUtil.SERVER_ADDRESS;import static wyf.wpf.ConstantUtil.SERVER_PORT;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.content.Intent;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Color;import android.graphics.drawable.BitmapDrawable;import android.graphics.drawable.Drawable;import android.opengl.Visibility;import android.os.Bundle;import android.os.Handler;import android.os.Looper;import android.os.Message;import android.view.View;import android.view.ViewGroup;import android.view.animation.AnimationUtils;import android.widget.AdapterView;import android.widget.BaseAdapter;import android.widget.Button;import android.widget.Gallery;import android.widget.ImageSwitcher;import android.widget.ImageView;import android.widget.Spinner;import android.widget.TextView;import android.widget.Toast;import android.widget.ViewSwitcher;import android.widget.AdapterView.OnItemClickListener;import android.widget.AdapterView.OnItemSelectedListener;public class AlbumActivity extends Activity implements ViewSwitcher.ViewFactory{ List<String []> photoInfoList = new ArrayList<String []>();Bitmap [] photoList; //存放图片的数组Gallery gl = null; //Gallery对象的引用ImageSwitcher is = null; //ImageSwitcher对象的引用Spinner sp = null; //Spinner对象的引用MyConnector mc = null; //MyConnector对象的引用String xid = ""; //存放相册的IDString uno = ""; //存放用户IDString visitor = ""; //存放访问者的IDString pid = ""; //存放当前显示的照片IDint from = -1; //启动该Activity的来源,0为MyAlbumListActivity,1为AlbumListActivityList<String []> albumInfoList = new ArrayList<String []>(); //存放相册信息,id和相册名称//Spinner的AdapterBaseAdapter baSpinner = new BaseAdapter() {@Overridepublic View getView(int position, View convertView, ViewGroup parent) {TextView tv = new TextView(AlbumActivity.this);tv.setTextSize(18.5f);tv.setTextColor(Color.DKGRAY);String [] sa = albumInfoList.get(position);tv.setText(sa[1]);return tv;}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic Object getItem(int position) {return null;}@Overridepublic int getCount() {return albumInfoList.size();}};//Gallery的AdapterBaseAdapter baGallery= new BaseAdapter() {@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ImageView iv = new ImageView(AlbumActivity.this);iv.setAdjustViewBounds(true);iv.setLayoutParams(new youtParams(PHOTO_WIDTH, PHOTO_HEIGHT));iv.setMaxHeight(PHOTO_HEIGHT); //设置ImageView显示的高度iv.setMaxWidth(PHOTO_WIDTH); //设置ImageView显示的宽度iv.setImageBitmap(photoList[position]); //设置ImageView显示的内容return iv;}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic Object getItem(int position) {return null;}@Overridepublic int getCount() {if(photoList != null){return photoList.length;}else{return 0;}}};//点下Gallery中的图片后触发的事件监听器OnItemClickListener myListener = new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View v, int position,long id) {if(is != null){ //如果ImageSwitcher不为空Drawable d = new BitmapDrawable(photoList[position]);is.setImageDrawable(d);}}};Handler myHandler = new Handler(){@Overridepublic void handleMessage(Message msg) {switch(msg.what){case 0:gl.setAdapter(baGallery);is.setImageDrawable(new BitmapDrawable(photoList[0]));break;}super.handleMessage(msg);}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.album); //设置当前屏幕Intent intent = getIntent(); //获取启动该Activity的Intentuno = intent.getStringExtra("uno"); //获得Extra字段的unovisitor = intent.getStringExtra("visitor");from = intent.getIntExtra("from", -1); //获得Extra字段的fromint position = intent.getIntExtra("position", 0); //获得被选中的相册String [] albumInfoArray = intent.getStringArrayExtra("albumlist"); //获得相册信息数组xid = intent.getStringExtra("xid"); //获得被选中的相册编号albumInfoList = new ArrayList<String []>();for(String s:albumInfoArray){ //遍历信息数组String [] sa = s.split("\\|");albumInfoList.add(sa); //构建相册信息列表}sp = (Spinner)findViewById(R.id.spAlbum); //获得Spinner对象sp.setAdapter(baSpinner); //设置Spinner对象的Adaptersp.setSelection(position); //选中在前一个Activity中被选中的相册sp.setOnItemSelectedListener(new OnItemSelectedListener() { //为Spinner添加监听器@Overridepublic void onItemSelected(AdapterView<?> parent, View v,int position, long id) {xid = albumInfoList.get(position)[0]; //修改存储相册ID的成员变量getPhotoList(); //获得相册中的相片列表}@Overridepublic void onNothingSelected(AdapterView<?> parent) {}});gl = (Gallery)findViewById(R.id.galleryPhoto); //获得Gallery对象gl.setOnItemClickListener(myListener); //设置Gallery的OnItemClickListener监听器is = (ImageSwitcher)findViewById(R.id.isPhoto); //获得ImageSwitcher对象is.setFactory(this); //设置ImageSwitcher的Factoryis.setInAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_in)); //设置ImageSwitcher 的In动画is.setOutAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_out));//设置ImageSwitcher 的Out动画Button btnBack = (Button)findViewById(R.id.btnAlbumBack); //获得返回按钮btnBackbtnBack.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {switch(from){ //判断启动该Activity的来源case 0: //有MyAlbumListActivity启动Intent intent1 = new Intent(AlbumActivity.this,FunctionTabActivity.class);intent1.putExtra("uno", uno);intent1.putExtra("tab", "tab5");startActivity(intent1);finish();break;case 1: //由AlbumListActivity启动Intent intent2 = new Intent(AlbumActivity.this,HomePageActivity.class);intent2.putExtra("uno", uno);intent2.putExtra("visitor", visitor);intent2.putExtra("tab", "tab2");startActivity(intent2);finish();break;}}});Button btnDeletePhoto = (Button)findViewById(R.id.btnDeletePhoto);if(visitor != null){ //不是查看自己的相册btnDeletePhoto.setVisibility(View.GONE); //如果不是自己的相册,隐藏删除按钮}btnDeletePhoto.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {new AlertDialog.Builder(AlbumActivity.this).setTitle("提示").setIcon(R.drawable.alert_icon).setMessage("确认删除该照片?").setPositiveButton("确定",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {int pos = gl.getSelectedItemPosition();pid = photoInfoList.get(pos)[0];deletePhoto();}}).setNegativeButton("取消",null).show();}});}public void getPhotoList(){new Thread(){public void run(){Looper.prepare();mc = null;mc = new MyConnector(SERVER_ADDRESS, SERVER_PORT);mc.dout.writeUTF("<#GET_ALBUM#>"+xid);int size = 0; //获得相册长度size = mc.din.readInt(); //读取相册的长度if(size == 0){Toast.makeText(AlbumActivity.this, "该相册还未上传照片", Toast.LENGTH_LONG).show();Looper.loop();return;}photoInfoList = new ArrayList<String []>(size);photoList = new Bitmap[size];for(int i=0;i<size;i++){ //循环获取图片数据String photoInfo = mc.din.readUTF(); //读取相片信息String [] sa = photoInfo.split("\\|"); //切割字符串photoInfoList.add(sa); //将相片信息添加到列表中int photoLength = mc.din.readInt(); //读取相片长度byte [] buf = new byte[photoLength]; //创建相应长度的数组mc.din.read(buf); //读入图片数据photoList[i] = BitmapFactory.decodeByteArray(buf, 0, photoLength); //创建Bitmap }myHandler.sendEmptyMessage(0);}catch(Exception e){e.printStackTrace();}}}.start();}//方法:删除指定照片public void deletePhoto(){new Thread(){public void run(){Looper.prepare();if(mc ==null){mc = new MyConnector(SERVER_ADDRESS, SERVER_PORT);}String msg = "<#DELETE_PHOTO#>"+pid;mc.dout.writeUTF(msg);String reply = mc.din.readUTF();if(reply.equals("<#DELETE_PHOTO_SUCCESS#>")){Toast.makeText(AlbumActivity.this, "照片删除成功!", Toast.LENGTH_LONG).show();}else {Toast.makeText(AlbumActivity.this, "删除失败,请重试!", Toast.LENGTH_LONG).show();}getPhotoList();Looper.loop();}catch(Exception e){e.printStackTrace();}}}.start();}@Overridepublic View makeView() {ImageView iv = new ImageView(this);iv.setScaleType(ImageView.ScaleType.CENTER_INSIDE);iv.setLayoutParams(newyoutParams(IMAGESWITCHER_HEIGHT,IMAGESWITCHER_HEIGHT));return iv;}@Overrideprotected void onDestroy() {if(mc != null){mc.sayBye();。
Android-课程设计报告
课程设计课程名称:嵌入式技术课程设计设计题目:基于Android系统的小查询工具学院:信息工程与自动化学院专业:计算机科学与技术年级: 2010级学生姓名:指导教师:日期: 2013/7/8教务处制课程设计任务书信息工程与自动化学院计算机科学与技术专业 2010 年级学生姓名:课程设计题目:基于Android系统的小查询工具课程设计主要内容:通过本课程设计,使学生巩固软件工程的基本概念、原理,熟悉安卓应用开发环境和技术,学会完成一个移动终端应用软件的分析、设计、编码测试和安装,将理论与实际相结合,强化学生的项目开发和团队意识,提高学生分析能力和创新能力基本理论1、 Android系统的开发方法及基本原理2、 JavaEE应用程序设计开发技术实验方法与基本要求要求学生掌握Windows环境下Android系统开发的一般方法,AndroidSdk 集成开发环境的构建及JavaEE应用程序的开发。
整个设计过程必须由学生自己独立完成,课程设计按二人一组,分组进行全过程的设计。
设计内容1、Windows环境下构建Android系统的开发环境2、基于Android模拟手机,设计手机应用程序3、将程序下载的Android手机上应用设计指导教师(签字):教学基层组织负责人(签字):年月日目录一、课程设计的目的及要求 (3)1.1 课程设计的目的 (3)1.2 课程设计要求 (3)二、Android应用程序开发背景 (3)2.1开发背景 (3)2.2开发环境 (4)三、Android应用程序开发环境搭建 (5)3.1所需软件的下载 (5)3.2相应软件的安装 (5)四、“小查询工具”的设计与实现 (10)1. 总体设计 (10)1)界面设计 (10)2)功能设计 (12)2. 详细设计 (12)1)模块设计 (12)2)编码实现 (12)3. 手机上运行截图 (14)五、总结与体会 (16)基于Android系统的小查询工具设计一、课程设计的目的及要求1.1 课程设计的目的1) 复习、巩固Java语言的基础知识,进一步加深对Java语言的理解和掌握;搭建一个完整的安卓开发环境。
android课程设计报告_2
目录1. 概述 (1)2. 项目设计与实现 (1)2.1欢迎界面 (1)2.1.1界面布局 (2)2.1.2功能实现 (2)2.2登陆界面 (2)2.2.1 界面布局 (2)2.2.2 功能实现 (2)2.3微信显示界面 (4)2.3.1 界面布局 (4)2.3.2功能实现 (5)2.4主界面 (5)2.4.1 界面布局 (5)2.4.2 功能实现 (5)3.参考文献 (5)4.致谢 (6)1.概述移动互联网时代的来临, 直接促进了搭载智能操作系统、具有强大扩展性的智能手机、平板电脑等移动终端产业的蓬勃发展。
搭载安卓操作系统的智能手机目前已经成为市场上最炙手可热的智能产品。
开放的源代码和零成本已经让安卓在全世界范围内受到青睐并迅速获得了主要手机厂商和数百万软件开发者的支持, 2011年安卓系统的市场份额已经超过Symbian, 成为全球第一大智能手机操作系统。
本项目基于QQ和微信等聊天工具, 仿制其功能初步实现了登录界面和主界面的简单设置, 剩余的功能我会在以后更加努力实现。
2. 项目设计与实现2.1欢迎界面图1 欢迎界面2.1.1界面布局整体采用相对布局, 下面为一个线性布局, 其中包括一个ImageViewTextView,最下面仍是一个线性布局, 包括两个Button和两个TextView。
2.1.2功能实现欢迎界面由按钮和图片等构成, 启动该客户端时, 首先进入该界面。
在欢迎界面点击登录按钮可通过QQ号或微信号登录, 点击注册按钮, 可在联网的情况下注册微信号。
2.2登陆界面图2 登录界面2.2.1 界面布局整体采用RelativeLayout相对布局, 下面仍为一相对布局, 其中包括一个Buttton 和一个TextView.紧邻为两个EditText,最下面为相对布局, 包括两个Button。
2.2.2 功能实现使用UserEdit.getText().toString().trim() 和PasswordEdit.getText(). toString().trim()方法得到用户输入的用户名和密码。
安卓课程设计报告
安卓课程设计报告引言在当今数字化的时代,移动应用的发展变得越来越重要。
安卓操作系统作为最受欢迎的移动操作系统之一,为开发人员提供了广阔的创作空间。
本报告将详细介绍我们小组在安卓课程设计中的设计思路、开发过程和项目成果。
一、项目背景移动应用的普及使得人们在手机上执行各种任务变得越来越方便。
鉴于此,我们小组决定开发一款名为“Daily Planner”的日程管理应用。
该应用旨在帮助用户更加高效地管理个人和工作日程,提高生活的规划和安排能力。
二、需求分析1. 功能需求- 日程管理:用户可以创建、编辑和删除日程,并设置提醒。
- 分类管理:用户可以按照分类将日程划分,如工作、学习、娱乐等。
- 日程分享:用户可以将日程分享给其他用户,方便共享安排。
- 备忘录功能:用户可以添加备忘录,例如购物清单、想法记录等。
- 数据备份:用户可以将日程数据进行备份和恢复。
2. 非功能需求- 用户友好性:用户界面设计简洁明了,操作简单直观。
- 性能要求:应用响应速度快,稳定性高。
- 安全性:用户数据加密存储,保障用户隐私。
三、系统设计和开发我们小组采用了敏捷开发方法,将整个项目分为多个迭代阶段。
每个迭代阶段都有相应的目标和任务,以确保项目在时间和质量上的有效管理。
1. 技术选型为了实现项目需求,我们选择了Java作为主要的开发语言,使用Android Studio作为集成开发环境。
此外,我们还使用了SQLite 作为本地数据库存储数据。
2. 界面设计我们注重用户体验,将界面设计简洁明了。
主界面呈现日历视图,用户可以直观地查看每日计划。
通过侧边菜单,用户可以快速切换到不同的功能模块,如日程管理、备忘录等。
3. 后台开发为了实现日程管理、分类管理等功能,我们设计了相应的后台逻辑。
我们使用SQLite作为本地数据库存储用户数据,并通过查询和更新操作实现不同的功能需求。
四、系统测试与优化在开发过程中,我们注重系统的稳定性和性能。
我们采用了自动化测试框架对系统进行测试,以确保功能的正确性。
安卓开发课程设计报告
安卓开发课程设计报告一、课程目标知识目标:1. 学生理解安卓应用开发的基本概念和原理,掌握安卓开发环境搭建方法。
2. 学生掌握安卓应用的基本组件,如Activity、Service、BroadcastReceiver 等,并了解其生命周期。
3. 学生学会使用安卓布局和控件,能够设计美观、易用的用户界面。
4. 学生掌握安卓事件处理机制,能够实现应用内的交互功能。
5. 学生了解安卓存储和数据持久化的方法,能够实现数据的保存和读取。
技能目标:1. 学生能够独立搭建安卓开发环境,并熟练使用相关工具进行开发。
2. 学生具备编写、调试和优化安卓应用的能力,能够解决实际开发过程中遇到的问题。
3. 学生能够运用所学知识,设计并实现具有实际意义的小型安卓应用。
4. 学生学会查阅安卓开发相关资料,具备自我学习和持续提升的能力。
情感态度价值观目标:1. 学生培养对计算机科学的兴趣,激发创新意识和探索精神。
2. 学生养成合作学习和解决问题的习惯,提高团队协作能力。
3. 学生认识到编程对于培养逻辑思维和抽象思维能力的重要性,增强自信心。
4. 学生了解安卓应用在实际生活中的应用,认识到科技对生活的改变,培养社会责任感。
本课程旨在通过安卓开发教学,使学生在掌握基本知识、技能的基础上,培养实际开发能力,激发创新意识,提高团队协作能力,为未来进一步学习计算机科学和从事相关领域工作打下坚实基础。
二、教学内容1. 安卓开发基础- 环境搭建:讲解并实践安装Java开发工具、Android Studio和模拟器。
- 应用结构:介绍Android应用的基本目录结构,理解AndroidManifest.xml 文件的作用。
2. 安卓应用组件- Activity:学习Activity的生命周期,掌握状态保存和恢复。
- Service:了解Service的基本用法,实现后台服务。
- BroadcastReceiver:学习广播接收者的使用,实现应用间的消息传递。
安卓android课程设计报告
湘潭大学课程设计报告课程名称______手机安卓开发_______课题名称______天气预报APP_______指导老师______周唯___________姓名____黄柳________班级____12计2班________小组______棒棒糖_______时间____2015年1月26 日_____一、需求分析(一)引言1.编写目的1.1为用户提供一个显示天气预报的软件,可以根据百度地图显示用户需求的城市位置,以及用图标表示各城市对应的气象信息,可以简洁的表示出“晴、雨、雪”和“气温”气象信息。
2.项目风险2.1(项目风险识别是指找出影响项目目标顺利实现的主要风险因素,并识别出这些风险究竟有哪些基本特征、可能会影响到项目的那些方面。
)2.2联网收费视用户电话运营商的收费标准决定2.3手机或者无线信号不好时,可能无法连接或更新天气情况3.预期读者和阅读建议3.1预期读者:会使用已经安装安卓系统的手机或者平板电脑及其他移动设备的用户3.2阅读建议:读者应通过该文档可以了解相关项目的需求分析、使用注意事项以及可能存在的风险4.产品范围2.2手机,平板电脑,MP4,导航仪,上网本,电纸书等使用安卓系统的数码领域(二)综合描述1.产品的状况1.1 Android是一种以Linux为基础的开放源代码操作系统,主要使用于便携设备。
目前未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。
Android操作系统最初由Andy Rubin开发,最初主要支持手机。
2005年由Google收购注资,并组建开放手机联盟开发改良,逐渐扩展到平板电脑及其他数码领域上。
我们开发的相关项目正是一个在安卓平台上开发的软件,可以用这个软件来实现用户在一些简单的手持设备如手机或者平板电脑等上面及时的了解到用户所在城市的天气预报。
2.产品的功能2.1天气信息获取2.2天气信息显示3.系统配置功能3.1用户类和特性安卓平台用户:安卓新用户可以使用软件来了解用户所在城市的天气预报。
Android课程设计报告
2016~2017(1) 《Android程序设计》期末考查设计、实现、使用文档考查题目:订餐外卖系统一、题目要求本程序目的是设计一个校内的订餐系统,旨在方便大众。
总所周知,外卖对于大学生快节奏生活必不可少,大学生通过订外卖可以增加时间的利用率,以及方便了大学生的生活。
本系统具备的功能大体有:订餐、查询店家电话与地址、为店家打分等功能。
二、本实验环境前台:Myeclipse10、eclipse服务器:tomcat6数据库:mysql5.5测试使用手机:酷派手机适用ANDROID 4.2三、程序的设计○1数据库表的设计四、程序的实现(界面设计等将不具体给出过程,给出关键代码)○1服务器端:建立DB_Conn的一个类,其中包含数据库连接函数ConnectDB。
成员包括:driverName//驱动程序名userName//数据库用户名userPassword//数据库用户密码dbName="weborderdb"url//数据库连接字符串conn//数据库连接对象sm//数据库语句对象public void ConnectDB(){try{Class.forName(driverName).newInstance();//实例化conn=DriverManager.getConnection(url,userName,userPassword );//获得数据库连接sm=conn.createStatement();System.out.println("connect success");}catch(Exception e){e.printStackTrace();out.print("数据库连接失败!");}}创建HttpServlet响应客户端发来请求:String username = request.getParameter("account");String password = request.getParameter("password");创建Dao来对mysql数据库进行更新操作:String sql = "select * from tb_admin";rs = db_conn.sm.executeQuery(sql);○2客户端:数据传输相关:通过用HttpUtil连结数据库,用queryStringForPost根据url获得HttpPost的对象,确认是否连接上服务器。
安卓课程设计报告
安卓课程设计报告设计题目:五子棋目录一.需求分析 (2)二.功能模块 (2)三. 界面设计 (3)四. 分工说明 (5)五. 所遇到的问题 (5)六.代码注释 (6)一.需求分析网络技术的日新月异让世界惊叹,高速发展的网络技术和日渐成熟的3G网络,让越来越多的用户沉浸在手机的世界而无限欢快。
不管是逛街、乘地铁,还是吃饭,排队,跟随潮流的时尚一群都利用拇指掌控着周围的一切,似乎只有手机才能让他们真正体验娱乐的极致。
手机已然成为本世纪最有作为、最受欢迎的发明。
而手机的流行更成就了相关应用和网站,让他们在移动互联网大放异彩的当下备受用户关注。
二.功能模块三. 界面设计3.1开始界面3.2游戏界面3.3点击认输界面四. 分工说明张哲:编辑main代码刘凯:获取MainAct丁章华:写报告黄思淳:程序注释叶浩:编辑MyView代码五. 所遇到的问题1 登录界面的部分功能没有实现。
2 界面的布局没有很清晰。
3 部分代码不够简洁。
六.代码注释public MyView(Context context,float width,float height) {super(context);// TODO Auto-generated constructor stubthis.width=(float) (width);this.height=(float) (height);flag=true;holder=this.getHolder();this.setFocusable(true);holder.addCallback(this);bitmap=BitmapFactory.decodeStream(getResources().openRawResource(R.drawab le.chess_2));chess=new int[9][9];msg="点击开始";}public void myDraw(){//获得画布Canvas canvas=holder.lockCanvas();//获得画笔Paint paint=new Paint();//绘画paint.setAntiAlias(true);Matrix matrix=new Matrix();int ww = bitmap.getWidth();//获取资源位图的宽int hh = bitmap.getHeight();//获取资源位图的高float w = (width/(float)ww);float h = (float) ((height/(float)hh)/1.1);matrix.postScale(w, h);//获取缩放比例Bitmap bmp = Bitmap.createBitmap(bitmap, 0, 0, ww, hh, matrix, true);//根据缩放比例获取新的位图canvas.drawBitmap(bmp, 0, 0, paint); //在屏幕上画出位图int sx=(int) width;int sy=(int) (height/1.1);paint.setColor(Color.BLACK);//适应屏幕画横线竖线tempy=(float) ((0.6*sy-(0.6*sy)%8-16)/8);ax=(sx-tempy*8)/2;ay=(float) (((0.6*sy)%8)/2)+8;bx=sx-(sx-tempy*8)/2;cy=(float) (0.6*sy-((0.6*sy)%8)/2-8);// System.out.println("MyView:==========="+tempy);for(int i=0;i<9;i++){canvas.drawLine(ax, ay+tempy*i, bx, ay+tempy*i, paint);canvas.drawLine(ax+tempy*i, ay, ax+tempy*i, cy, paint);}//画棋盘下方现实信息paint.setColor(Color.BLACK);paint.setTextSize(30);// float tx=3*sx/8;// float ty=(float) (0.75*sy);canvas.drawText(msg, 3*sx/8-25, (float) (0.72*sy), paint);canvas.drawText("开始", (float) (0.175*sx), (float) (0.92*sy), paint);canvas.drawText("认输", (float) (0.425*sx), (float) (0.92*sy), paint);canvas.drawText("退出", (float) (0.675*sx), (float) (0.92*sy), paint);//画棋子int qx,qy;for(int i=0;i<9;i++){for(int j=0;j<9;j++){//画黑棋if(chess[i][j]==1){qx=(int) (ax+i*tempy);qy=(int) (ay+j*tempy);paint.setColor(Color.BLACK);canvas.drawCircle(qx, qy, tempy/3, paint);}//画白棋else if(chess[i][j]==2){qx=(int) (ax+i*tempy);qy=(int) (ay+j*tempy);paint.setColor(Color.WHITE);canvas.drawCircle(qx, qy, tempy/3, paint);}}}if(canvas!=null){holder.unlockCanvasAndPost(canvas);}}Overridepublic boolean onTouchEvent(MotionEvent event) { // TODO Auto-generated method stubsuper.onTouchEvent(event);x=(int) event.getX();y=(int) event.getY();float xx=event.getX();float yy=event.getY();System.out.println("点击的坐标:"+xx+":"+yy);int sx=(int) width;int sy=(int) (height/1.1);//点击开始if(x>=0.125*sx&&x<=0.375*sx&&y>=0.86*sy&&y<=0.98*sy) {game_start=true;msg="黑方落子";myDraw();}//点击认输if(x>0.375*sx&&x<=0.625*sx&&y>=0.86*sy&&y<=0.98*sy) {game_start=false;if(isBlack)msg="黑方认输";else if(!isBlack)msg="白方认输";myDraw();}//点击退出if(x>0.625*sx&&x<=0.875*sx&&y>=0.86*sy&&y<=0.98*sy) {System.exit(0);}else if(game_start){if(x>=ax&&y>=ay&&(x<=bx+tempy)&&y<=(cy+tempy)){x=(int) ((x-ax)/tempy);y=(int) ((y-ay)/tempy);System.out.println("变换成下标后xy的值:"+x+":"+y);if(chess[x][y]==0){//黑方下棋if(isBlack){chess[x][y]=1;isBlack=false;msg="白方落子";}//白方下棋else{chess[x][y]=2;isBlack=true;msg="黑方落子";}boolean isWin=checkWin(x,y);if(isWin){if(isBlack==false){msg="黑方获胜";game_start=false;}else if(isBlack==true){msg="白方获胜";game_start=false;}}}myDraw();}}return true; }。
android课程设计实验报告
android课程设计实验报告Android课程设计实验报告一、引言Android操作系统是目前最流行的移动操作系统之一,具有广泛的应用领域和强大的开发能力。
本次课程设计实验旨在通过开发一个基于Android平台的应用程序,来提升学生对Android开发的理解和实践能力。
本文将详细介绍课程设计实验的目的、内容和实施过程,并对实验结果进行分析和总结。
二、实验目的本次课程设计实验的主要目的是让学生通过实际操作,深入了解Android应用程序的开发过程和技术要点,包括界面设计、数据处理、网络通信等方面。
通过这次实验,学生将能够掌握Android开发的基本流程和常用工具,提升其软件开发能力和综合解决问题的能力。
三、实验内容本次实验的主要内容是开发一个基于Android平台的应用程序,要求具备以下功能:1. 用户注册和登录功能:用户可以在应用程序中注册新账号并登录,以便使用更多的功能。
2. 数据展示功能:应用程序可以展示一些实时更新的数据,例如天气信息、股票行情等。
3. 数据编辑和保存功能:用户可以编辑和保存一些个人信息或设置,例如昵称、头像等。
4. 网络通信功能:应用程序可以实现与服务器的数据交互,例如获取最新的新闻内容、发送和接收消息等。
四、实验过程1. 环境搭建:首先,学生需要搭建Android开发环境,包括安装Java开发工具、Android开发工具包和虚拟机等。
2. 项目创建:学生需要创建一个新的Android项目,并进行相关配置,包括应用程序的名称、图标、权限等。
3. 界面设计:学生需要设计应用程序的用户界面,包括登录页面、注册页面、数据展示页面等。
4. 功能实现:学生需要编写代码,实现应用程序的各个功能,包括用户注册和登录功能、数据展示功能、数据编辑和保存功能、网络通信功能等。
5. 调试和测试:学生需要对应用程序进行调试和测试,确保其功能的正确性和稳定性。
6. 文档撰写:学生需要撰写实验报告,包括实验目的、内容、过程和结果等。
android课程设计报告
android课程设计报告一、课程目标知识目标:1. 掌握Android开发环境的基本配置,理解Android系统的架构及工作原理;2. 学会使用Android Studio进行应用程序开发,熟悉常用的布局、控件及其属性;3. 掌握Android事件处理机制,了解Activity、Service、BroadcastReceiver等核心组件的使用;4. 学会数据存储与读取,掌握SQLite数据库在Android中的应用;5. 了解网络编程在Android中的应用,掌握使用HTTP协议进行数据交互。
技能目标:1. 能够独立搭建Android开发环境,并进行基本的调试;2. 能够运用Android Studio设计美观、易用的用户界面;3. 能够编写具有基本功能的Android应用程序,如计算器、天气查询等;4. 能够根据实际需求,选择合适的数据存储方式,如SharedPreferences、SQLite等;5. 能够运用所学知识,实现简单的网络请求和数据解析。
情感态度价值观目标:1. 培养学生对Android编程的兴趣,激发学习热情;2. 培养学生具备良好的编程习惯,注重代码规范和注释;3. 培养学生团队协作意识,学会与他人分享、交流技术心得;4. 培养学生具备解决问题的能力,面对编程难题不轻言放弃;5. 培养学生关注移动开发领域的发展动态,紧跟技术潮流。
本课程针对高年级学生,在已有编程基础的前提下,深入浅出地讲解Android 应用开发。
课程设计注重实用性,结合教材内容,将知识点分解为具体的学习成果,以便学生能够学以致用。
通过本课程的学习,使学生掌握Android编程的基本技能,培养具备实际项目开发能力的优秀程序员。
二、教学内容1. Android开发环境搭建:讲解Android Studio的安装与配置,熟悉Android模拟器和真机调试;对应教材章节:第1章 Android开发环境搭建。
2. Android基本UI设计:学习常用的布局(如LinearLayout、RelativeLayout等)和控件(如TextView、Button、EditText等);对应教材章节:第2章 Android基本UI设计。
Android课程设计报告书【范本模板】
Android课程设计报告书题目:RFID药品WMS仓库管理系统院(系)别交通与物流工程学院专业物联网工程专业班级物联132成员伊华 130516234宫玮钰 130516229刘文清 130516238 指导教师贾雁二○一六年六月目录一、摘要 (2)二、课题及要求 (3)三、程序功能简介 (3)四、主体内容 (3)4.1设计分析 (3)4.2程序结构图 (3)4.3模块功能及程序说明 (4)4。
3。
1登录界面 (4)4.3.2注册信息 (6)4。
3.3选项卡操作 (10)五、总结 (16)六、参考文献 (17)一、摘要随着智能手机的快速普及,智能手机操作系统市场风生水起。
为了让智能手机用户能够随时随地的查询互联网所提供的服务,一种高效的办法就是将应用系统的功能拓展到手机终端上,让手机能够通过移动网以及互联网访问Web网站并处理各种各样业务。
因此,智能手机的应用软件及其需要的服务将有广阔的发展前景.在如今这个智能手机系统群雄纷争的时候,2008年Google推出了一款名为Android的开源智能手机操作系统。
它的最大特点是其开放性体系架构,不仅具有非常好的开发、调试环境,而且还支持各种可扩展的用户体验,包括丰富的图形组件、多媒体支持功能以及强大的浏览器。
本文是关于Android技术基础的RFID药品WMS仓库管理系统。
关键字:Android 智能手机仓库管理系统二、课题及要求1、课题:RFID药品WMS仓库管理系统2、目的:1)复习、巩固Android相关技术的基础知识,进一步加深对Android开发技术的理解和掌握;2)课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力;3)培养学生在项目开发中团队合作精神、创新意识及能力。
3、要求:1)对系统进行功能模块分析,符合课题要求,实现相应功能2)系统设计要实用,编程简练,可用,功能全面3)说明书、流程图要清楚三、程序功能简介经过一系列的编程与实验之后,能够实现简单的一下操作:登录界面,实现药品的入库、移库、盘点、药品有效期提醒、出库等功能.四、主体内容4.1设计分析这是一个基于Android技术基础的RFID药品WMS仓库管理系统。
安卓实训课程设计报告
一、摘要随着移动互联网的快速发展,Android操作系统凭借其开放性、灵活性以及庞大的用户群体,已经成为全球最受欢迎的移动操作系统之一。
为了提高学生的实践能力,本课程设计旨在让学生通过实际操作,掌握Android应用开发的基本流程,熟悉Android开发环境,并完成一个完整的Android应用项目。
二、项目背景随着智能手机的普及,Android应用开发已成为计算机科学与技术专业学生的必备技能。
为了让学生更好地掌握Android应用开发,本课程设计选取了一个具有实用价值的Android应用项目——智能购物助手。
该应用可以帮助用户方便地查询商品信息、比价、下单购物,提高购物体验。
三、项目需求1. 功能需求:(1)商品查询:用户可以通过搜索框输入关键词,快速查询商品信息。
(2)商品比价:用户可以选择商品,查看不同商家的价格,并进行比价。
(3)购物车:用户可以将喜欢的商品添加到购物车,方便下单。
(4)下单购物:用户可以查看购物车中的商品,选择下单,并支付。
(5)用户反馈:用户可以对商品或购物体验进行评价和反馈。
2. 性能需求:(1)响应速度:应用界面加载速度快,用户操作流畅。
(2)稳定性:应用运行稳定,不出现崩溃现象。
(3)兼容性:应用支持主流Android设备,兼容性良好。
四、技术选型1. 开发环境:Android Studio2. 开发语言:Java3. 数据库:SQLite4. 网络通信:HttpURLConnection五、系统设计1. 系统架构本系统采用MVC(Model-View-Controller)架构,将系统分为模型(Model)、视图(View)和控制器(Controller)三个部分。
(1)模型(Model):负责数据存储和业务逻辑处理。
(2)视图(View):负责展示用户界面。
(3)控制器(Controller):负责接收用户输入,调用模型和视图进行数据处理和展示。
2. 系统模块设计(1)商品查询模块:实现商品搜索、查询和展示功能。
android课程设计的总结
android课程设计的总结一、教学目标本章节的教学目标包括以下三个方面:1.知识目标:使学生掌握Android课程的基本概念、原理和关键技术,如活动(Activity)、服务(Service)、广播接收器(BroadcastReceiver)和内容提供器(ContentProvider);理解Android应用的生命周期、界面布局和事件处理机制。
2.技能目标:培养学生具备Android应用开发的实际操作能力,能够独立完成Android项目的搭建、界面设计与功能实现;培养学生具备良好的编程习惯和团队协作能力。
3.情感态度价值观目标:激发学生对Android开发的兴趣,培养学生勇于探索、创新的精神,提高学生解决实际问题的能力,使学生认识到Android开发在现代社会中的重要性和应用价值。
二、教学内容本章节的教学内容主要包括以下几个部分:1.Android概述:介绍Android的发展历程、版本特点和应用领域,使学生了解Android平台的基本情况。
2.Android开发环境搭建:讲解如何搭建Android开发环境,包括安装JDK、配置Android Studio和安装ADB工具等。
3.Android基本概念:介绍Android应用的组成、生命周期、界面布局和事件处理机制,让学生掌握Android应用开发的基础知识。
4.Android四大组件:详细讲解活动(Activity)、服务(Service)、广播接收器(BroadcastReceiver)和内容提供器(ContentProvider)的定义、作用和用法,使学生能够熟练运用这些组件开发Android应用。
5.Android常用开发工具:介绍Android开发中常用的工具,如Git、Gradle和模拟器等,提高学生的开发效率。
6.Android项目实战:通过实际项目案例,让学生动手实践,掌握Android项目开发的整个流程,培养学生的实际操作能力。
Android课程设计报告
目录1.系统概述 (2)2.系统功能分析 (2)2.1主页 (2)2.2文件管理 (3)2.3分类管理 (4)3主要模块实现 (4)3.1快速进入 (4)3.2文件管理 (5)3.3分类管理 (9)4.系统测试 (10)4.1按钮和checkbox关系的测试 (11)4.2expandablelistview调试 (11)5.设计总结 (11)Android课程设计报告1.系统概述该应用程序主要完成了手机文件管理的功能,包括新建,复制,移动和重命名文件,并且能够进行文件分类管理,实现某些文件关联应用,其中包括常见的图片,音乐,视频,文档,安装包以及压缩包。
另外,它能快速进入内置存储卡或者外置存储卡,不用单独去找,方便使用。
2.系统功能分析该应用程序有一个Activity构成,自定义titlebar,在viewpager里面放置三个Fragnment,分别管理三个页面,这三个页面如下:2.1主页在主页中,有九个按钮:“后退”按钮的功能是退出应用程序;“图片”,“音乐”,“视频”,“文档”,“安装包”,“压缩包”这六个按键的功能是跳转到第三页面,并且显示相应的内容,例如,单击“图片”按键,应用会跳转到第三个页面,同时打开手机中的图片,包括内置存储卡和外置存储卡中的全部图片;最后两个按键运用图文混排,单击后会跳转到第二页面并且打开相对的文件,例如,单击“extcard”,如果存在外置内存卡就会在第二个页面显示外置存储卡中的文件,否则将提示用户外置存储卡不存在,但不会跳转。
2.2文件管理在该页面中也有9个按钮,但是有部分按钮刚开始时不可用的,当点击checkbox时来设置按钮是否可用:“后退”按键的功能是返回到主页中,“取消”按键的功能是取消checkbox的选择。
点击列表的某一项可以打开该文件夹或者该页面中包含有一个按钮和一个expandablelistview。
单击按钮会跳转到主页中,点击expandablelistview中某一条框会打开相对应的文件,例如,点击图片的条框就能显示打开手机中的图片,包括内置存储卡和外置存储卡中的全部图片。
安卓技术课程设计报告
安卓技术课程设计报告一、课程目标知识目标:1. 掌握安卓开发环境的基本配置,了解Android Studio的使用方法;2. 学习Android应用程序的基本架构,理解Activity、Service、BroadcastReceiver等核心组件的作用;3. 学会使用Android常用布局,掌握界面设计的技巧;4. 了解SQLite数据库在Android中的应用,学会数据存储与检索方法;5. 学习Android网络编程,掌握HTTP协议的使用和JSON解析。
技能目标:1. 能够独立搭建Android开发环境,创建并运行简单的Android应用程序;2. 能够编写代码实现界面布局,进行界面设计与优化;3. 能够利用SQLite数据库进行数据存储和查询,实现应用程序的数据持久化;4. 能够通过HTTP协议进行网络请求,实现数据的上传与下载;5. 能够运用所学知识,设计与开发具有实际应用价值的Android应用程序。
情感态度价值观目标:1. 培养学生对计算机编程的兴趣,激发学生学习编程的热情;2. 培养学生的团队协作精神,提高沟通与协作能力;3. 培养学生面对问题积极思考、解决问题的能力,增强自信心;4. 培养学生的创新意识,鼓励学生勇于尝试新技术和新方法;5. 培养学生具备良好的职业道德,关注用户需求,为用户提供优质的应用程序。
本课程针对高中年级学生,结合学科特点和教学要求,课程目标明确,可衡量性强。
通过本课程的学习,学生将掌握Android开发的基本知识,提高编程实践能力,培养团队协作和创新能力,为未来的软件开发职业生涯打下坚实基础。
二、教学内容1. Android开发环境搭建:介绍Android Studio的安装与配置,讲解SDK、AVD的使用方法,学会创建、运行和管理Android项目。
教材章节:第1章 Android开发环境搭建2. Android应用程序架构:学习Activity、Service、BroadcastReceiver等核心组件的作用和使用方法,理解Android应用程序的基本架构。
安卓课程设计报告
安卓课程设计报告一、教学目标本课程的教学目标是使学生掌握Android基本概念、开发环境搭建、应用程序设计、界面布局、多媒体应用、网络编程和数据存储等知识,培养学生具备实际的Android应用开发能力。
1.理解Android操作系统的基本原理和架构;2.熟悉Android开发环境搭建及应用项目结构;3.掌握Android界面布局和控件使用;4.了解Android多媒体应用开发;5.掌握Android网络编程和数据存储技术。
6.能够搭建Android开发环境并编写简单的应用程序;7.能够使用Android Studio进行项目管理和代码调试;8.能够设计并实现Android界面布局和交互功能;9.能够开发Android多媒体应用,如音乐播放器、图片浏览器等;10.能够进行Android网络编程和数据存储,实现数据的增删改查功能。
情感态度价值观目标:1.培养学生对计算机科学和软件开发的兴趣,激发创新精神;2.培养学生团队合作意识和沟通能力,提高解决实际问题的能力;3.培养学生具有良好的职业素养,遵守软件开发规范,注重用户体验。
二、教学内容根据课程目标,本课程的教学内容主要包括以下几个方面:1.Android基本概念和架构:Android发展历程、Android系统架构、Android应用组件等;2.Android开发环境搭建:Android Studio安装与使用、模拟器调试、代码编译与调试等;3.Android界面布局和控件使用:线性布局、相对布局、绝对布局、常用控件属性及使用方法等;4.Android多媒体应用开发:音频、视频、图片、相机等媒体资源的获取和处理;5.Android网络编程:HTTP通信、JSON解析、XML解析、网络请求等;6.Android数据存储技术:SharedPreferences、文件存储、SQLite数据库等;7.实际项目案例分析与实践:分析并改造现有应用,完成个人作品的开发与发布。
课程设计报告andriod
课程设计报告andriod一、教学目标本课程旨在让学生掌握Android应用开发的基本知识和技能,包括Android平台架构、Activity生命周期、Intent、布局文件、控件使用、事件处理等。
通过本课程的学习,学生能够独立开发简单的Android应用,培养他们对移动应用开发的兴趣和创新能力。
具体来说,知识目标包括:1.理解Android平台的基本架构和组件。
2.掌握Activity的生命周期和启动方式。
3.熟悉Intent的使用,了解不同类型的Intent。
4.了解Android的布局文件和控件属性。
5.掌握事件处理的基本方法。
技能目标包括:1.能够使用Android Studio创建和管理Android项目。
2.能够编写简单的Activity代码,实现用户界面与逻辑处理。
3.能够使用Intent在不同Activity之间传递数据。
4.能够使用基本的布局文件和控件开发用户界面。
5.能够处理用户触摸、点击等事件。
情感态度价值观目标包括:1.培养学生对移动应用开发的兴趣,激发创新精神。
2.培养学生团队合作意识,提高沟通与协作能力。
3.培养学生良好的编程习惯,提高代码质量。
二、教学内容本课程的教学内容主要包括以下几个部分:1.Android平台架构:介绍Android系统的基本架构,包括操作系统、应用框架、运行时和硬件抽象层。
2.Activity生命周期:讲解Activity的创建、运行、暂停、停止和恢复等状态,以及如何管理Activity栈。
3.Intent:介绍Intent的概念和使用方法,包括显式Intent和隐式Intent,以及如何使用Intent进行页面跳转和数据传递。
4.布局文件和控件使用:讲解Android的布局文件结构,介绍常用的控件及其属性,如何编写自定义控件。
5.事件处理:讲解用户触摸、点击等事件的处理方法,包括监听器和事件过滤器。
三、教学方法本课程采用讲授法、案例分析法和实验法相结合的教学方法。
android课课程设计(饮食日记
android课课程设计(饮食日记一、教学目标本节课的学习目标包括以下三个方面:1.知识目标:学生需要掌握Android的基本操作,了解饮食日记的界面设计和功能实现。
2.技能目标:学生能够独立完成饮食日记的应用开发,具备一定的编程能力。
3.情感态度价值观目标:通过本节课的学习,学生能够培养对编程的兴趣,提高解决问题的能力,培养团队合作的意识。
二、教学内容本节课的教学内容主要包括以下几个部分:1.Android的基本操作:介绍Android的开发环境,让学生熟悉Android的开发工具和基本语法。
2.饮食日记的界面设计:讲解如何设计一个简洁美观的饮食日记界面,让学生了解界面设计的原则和方法。
3.饮食日记的功能实现:教授如何实现饮食日记的各项功能,如添加、删除、修改饮食记录等。
4.项目实践:学生分组完成一个简单的饮食日记项目,锻炼实际操作能力。
三、教学方法本节课采用以下几种教学方法:1.讲授法:讲解Android的基本操作和饮食日记的界面设计、功能实现等理论知识。
2.案例分析法:分析一些成功的饮食日记应用案例,让学生了解实际应用中的设计方法和技巧。
3.实验法:学生分组进行项目实践,锻炼实际操作能力。
4.讨论法:学生在课堂上相互交流,分享学习心得和解决问题的方法,提高团队合作能力。
四、教学资源本节课的教学资源包括以下几个方面:1.教材:选用权威、实用的Android开发教材,为学生提供理论知识的学习参考。
2.参考书:提供一些与Android开发相关的参考书籍,丰富学生的知识体系。
3.多媒体资料:制作精美的PPT,直观地展示饮食日记的界面设计和功能实现过程。
4.实验设备:为学生提供充足的实验设备,确保每个学生都能进行实际操作。
五、教学评估本节课的评估方式包括以下几个方面:1.平时表现:评估学生在课堂上的参与程度、提问回答等情况,占总分的30%。
2.作业:评估学生完成的作业质量,包括饮食日记应用的设计和实现,占总分的30%。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
滨江学院《Android》课程设计报告题目飞翔的圆(类似Flappy Bird)专业_ _学生姓名_____ _ ____ __学号_ _二O一五年六月二十五日目录一安卓应用程序开发背景 (3)1.1开发背景 (3)1.2开发环境 (4)二安卓应用程序开发理论与方法 (4)三小游戏应用程序的设计与实现 (6)3.1 拟解决的问题及目标 (6)3.2 总体设计 (5)3.3 详细设计与编码实现 (6)四总结 (17)一安卓应用程序开发背景1.1开发背景1.智能手机的市场(1)功能多样化的智能手机挑战全球PC出货量移动互联网时代的来临,直接促进了搭载智能操作系统、具有强大扩展性的智能手机、平板电脑等移动终端产业的蓬勃发展。
来自美国最大的风险投资机构KPCB的数据显示,全球智能手机出货量正在以远高于台式电脑、笔记本电脑出货量的速度快速增长,该机构预计2011年全球智能手机出货量将达到4.13亿,超过台式电脑与笔记本电脑出货量的总和。
(2)智能手机的用户使用数量正在高速增长。
据市场调研机构Gartner信息,2011年全球智能手机的总出货量将会达到4.68亿部,相比2010年实现了57.7%的增长,而谷歌Android 操作系统将会在今年之内成为全球最大的智能手机操作系统。
另外,全球市场调研机构IDC 预计未来5年中国手机市场上,智能手机替代传统功能手机的趋势将日益明显,未来5年中国智能手机市场复合增长率将达到34.1%,人们对IT设备智能化的向往是这一增长率能够实现的主要因素,并且与其他国家相比,中国智能手机市场的发展空间更加广阔。
(3)操作系统格局预测:Android有望成为智能手机市场主导力量搭载Android操作系统的智能手机目前已经成为市场上最炙手可热的智能产品。
来自美国市场研究机构Gartner的数据显示,Android操作系统所占的市场份额从2008年的0.5%急剧增长到2011年的15.94%。
开放的源代码和零成本已经让Android在全世界范围内受到青睐并迅速获得了主要手机厂商和数百万软件开发者的支持,Gartner预计,未来Android 系统的市场份额有望超过其他操作系统,从而成为全球第一大智能手机操作系统。
2.安卓手机介绍安卓手机指的是用Android操作系统的手机。
安卓(Android)是基于Linux内核的操作系统,是Google公司在2007年11月5日公布的手机操作系统。
同样都是手机上面用的智能系统,安卓的系统是新生系统,界面更为华丽,开源性更强,当然因为是新生系统,所以在第三方软件方面暂时还不太多。
因此,安卓应用程序的需求还是很迫切的。
3.软件人才需求据业内统计,目前国内的Android研发人才缺口至少30万。
由于目前Android技术较新,无论是相关书籍、培训还是大学教育,都处于初级阶段,因此Android人才短期将供不应求。
从长期来看,随着各种移动应用和手机游戏等内容需求日益增加,也将激励大中小型手机应用开发商加大对Android应用的开发力度,因此Android人才的就业前景也非常广泛。
综上所述,在这样的背景下,安卓有很强的生命力。
同时,作为一个新生的系统,其应用程序目前并不多,安卓应用程序的需求还是很迫切的,安卓研发人才的缺口还很大。
这些都促进了我们学习开发安卓应用程序。
1.2开发环境安卓应用程序开发环境如下:①JDK 5 or JDK 6 (JRE alone is not sufficient)②Eclipse 3.3 (Europa), 3.4 (Ganymede)③Android SDK④ADT 0.8.0⑤Eclipse安装ADT 插件二安卓应用程序开发理论与方法1、Activity的相关知识简单理解Activity 代表一个用户所能看到的屏幕,Activity 主要是处理一个应用的整体性工作。
Activity是最基本的Android 应用程序组件,应用程序中,一个活动通常就是一个单独的屏幕。
每一个活动都被实现为一个独立的类,并且从活动基类中继承而来,活动类将会显示由视图控件组成的用户接口,并对事件做出响应。
大多数的应用是由多个屏幕显示组成,因而要用到多个Activity。
(1)Activity的相关方法及相关函数:A、void onCreate(Bundle)首次启动时调用,接受参数:Null or savedInstanceState(保存的以前某些状态信息)B、void onStart()说明了将要显示给用户的活动C、void onRestart()将处于停止状态的活动重新显示给用户D、void onResume()用户可以开始与活动进行交互时调用。
如动画播放和音乐播放。
E、void onPause()活动将要进入后台运行时调用。
(此时前台启动了另一个活动)F、void onStop()不需要某个活动了,就调用G、void onDestroy()销毁活动(2)多个Activity之间的跳转:通过Intent类实现屏幕之间的跳转(包括没有参数关系和需要传递参数两种情况)。
(3)两个Activity之间进行数据交换:startActivity() 只有Intent一个参数。
public void startSubActivity(Intent intent, int requestCode)(requestCode:用来标识某一个调用,一般定义一个常量。
)传过去:函数原型为: public Intent setData(ContentURI data) 然后,参数带到新的Activity后,同样用Activity.getIntent()函数可得到当前过来的Intent 对象,然后用getData()就取到参数了。
传回来:函数原型为: public final void setResult(int resultCode, String data) 2、Intent的相关知识Intent 是描述应用想要做什么。
Android 使用了Intent 这个特殊类,实现在屏幕与屏幕之间移动。
Intent 数据结构两个最重要的部分是动作和动作对应的数据。
Intent类绑定一次操作,它负责携带这次操作所需要的数据以及操作的类型等。
3、Layout用于用户界面设计。
包含AbsoluteLayout, FrameLayout,GridView, LinearLayout,ListLayout, RadioGroup, TableLayout等等。
在本程序中用到的有:(1)线性布局LinearLayout垂直:android:orientation="vertical“水平:android:orientation="horizontal"(2)相对布局RelativeLayout让子元素指定它们相对于其他元素的位置(通过ID 来指定)或相对于父布局对象。
在RelativeLayout布局里的控件包含丰富的排列属性:Layout above:控件在指定控件的上方Layout below:控件在指定控件的下方Layout to left of……三小游戏应用程序的设计与实现3.1 拟解决的问题及目标本游戏上手简单,主旨在让人在紧张的生活中,获得游戏的乐趣,程序要实现的目标有如下几个:(1)界面流畅(2)有当前得分(3)有最高得分(4)后点击界面重新开始游戏3.2 总体设计1、游戏的操作流程点击屏幕即可开始,当出现游戏界面是,通过点击屏幕控制圆点的高度,使得圆点触碰不到上下两边的长方形。
3.3 详细设计与编码实现1、游戏界面开始界面,点击屏幕圆点自动向前移动当前得分0,点击屏幕控制圆点高度触碰到长方形,游戏结束,点击屏幕重新开始2、核心代码如下:GameBirdActivity类public class GameBirdActivity extends Activity {public static GameBirdActivity instance;private LinearLayout gameView;public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);instance = this;this.getWindow().setFlags(youtParams.FLAG_FULLSCREEN, youtParams.FLAG_FULLSCREEN);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(yout.content_view);//gamegameView = (LinearLayout)this.findViewById(R.id.game_view);gameView.addView(new GameBirdSurfaceView(this));}public void showMessage(int level){saveSettingData(level);Intent intent = new Intent(this, LoadingActivity.class);intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);startActivity(intent);}public static final String GameBirdSettingsFile = "GameBird_Settings";public static final String Settings_LevelLast = "LevelLast";public static final String Settings_LevelTop = "LevelTop";private void saveSettingData(int level) {SharedPreferences gb_settings = getSharedPreferences(GameBirdSettingsFile, 0);gb_settings.edit().putInt(Settings_LevelLast, level).commit();int top = gb_settings.getInt(Settings_LevelTop, 0);if(level>top){gb_settings.edit().putInt(Settings_LevelTop, level).commit();}}}GameBirdSurfaceView类public class GameBirdSurfaceView extends SurfaceView implements Callback, Runnable {private SurfaceHolder sfh;private Paint paint;private Thread th;private boolean flag;private Canvas canvas;private static int screenW, screenH;private static final int GAME_MENU = 0;private static final int GAMEING = 1;private static final int GAME_OVER = -1;private static int gameState = GAME_MENU;private int[] floor = new int[2];private int floor_width = 15;private int speed = 3;private int[] level = new int[2];private int level_value = 0;private int[] bird = new int[2];private int bird_width = 10;private int bird_v = 0;private int bird_a = 2;private int bird_vUp = -16;private ArrayList<int[]> walls = new ArrayList<int[]>();private ArrayList<int[]> remove_walls = new ArrayList<int[]>(); private int wall_w = 50;private int wall_h = 100;private int wall_step = 30;public GameBirdSurfaceView(Context context) {super(context);sfh = this.getHolder();sfh.addCallback(this);paint = new Paint();paint.setColor(Color.WHITE);paint.setAntiAlias(true);paint.setTextSize(50);paint.setStyle(Style.STROKE);setFocusable(true);setFocusableInTouchMode(true);this.setKeepScreenOn(true);}public void surfaceCreated(SurfaceHolder holder) {screenW = this.getWidth();screenH = this.getHeight();initGame();flag = true;th = new Thread(this);th.start();}private void initGame() {if (gameState == GAME_MENU) {floor[0] = 0;floor[1] = screenH - screenH/5;level[0] = screenW/2;level[1] = screenH/5;level_value = 0;bird[0] = screenW/3;bird[1] = screenH/2;walls.clear();floor_width = dp2px(15);speed = dp2px(3);bird_width = dp2px(10);bird_a = dp2px(2);bird_vUp = -dp2px(16);wall_w = dp2px(45);wall_h = dp2px(100);wall_step = wall_w*4;}}private int dp2px(float dp){int px = Math.round(TypedValue.applyDimension(PLEX_UNIT_DIP, dp, getResources().getDisplayMetrics()));return px;}public void myDraw() {try {canvas = sfh.lockCanvas();if (canvas != null) {//clearcanvas.drawColor(Color.BLACK);//backgroundint floor_start = floor[0];while(floor_start<screenW){canvas.drawLine(floor_start, floor[1], floor_start+floor_width, floor[1], paint);floor_start += floor_width*2;}//wallfor (int i = 0; i < walls.size(); i++) {int[] wall = walls.get(i);float[] pts = {wall[0],0,wall[0],wall[1],wall[0],wall[1]+wall_h,wall[0],floor[1],wall[0]+wall_w,0,wall[0]+wall_w,wall[1],wall[0]+wall_w,wall[1]+wall_h,wall[0]+wall_w,floor[1],wall[0],wall[1], wall[0]+wall_w, wall[1],wall[0],wall[1]+wall_h, wall[0]+wall_w, wall[1]+wall_h};canvas.drawLines(pts, paint);paint);floor[1], paint);}//birdcanvas.drawCircle(bird[0], bird[1], bird_width, paint);//levelcanvas.drawText(String.valueOf(level_value), level[0], level[1], paint);}} catch (Exception e) {} finally {if (canvas != null)sfh.unlockCanvasAndPost(canvas);}}public boolean onTouchEvent(MotionEvent event) {if(event.getAction() == MotionEvent.ACTION_DOWN){switch (gameState) {case GAME_MENU:gameState = GAMEING;//bird_v = bird_vUp;//break;case GAMEING:bird_v = bird_vUp;break;case GAME_OVER://bird downif(bird[1] >= floor[1] - bird_width){gameState = GAME_MENU;initGame();}break;}}return true;}public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) {GameBirdActivity.instance.finish();System.exit(0);return true;}return super.onKeyDown(keyCode, event);}private int move_step = 0;private void logic() {switch (gameState) {case GAME_MENU:break;case GAMEING://birdbird_v+=bird_a;bird[1] += bird_v;if(bird[1] > floor[1] - bird_width){bird[1] = floor[1] - bird_width;gameState = GAME_OVER;}//top//if(bird[1]<=bird_width){//bird[1]=bird_width;//}//floorif(floor[0] < -floor_width){floor[0] += floor_width*2;}floor[0] -= speed;//wallremove_walls.clear();for (int i = 0; i < walls.size(); i++) {int[] wall = walls.get(i);wall[0] -= speed;if(wall[0]<-wall_w){remove_walls.add(wall);}elseif(wall[0]-bird_width<=bird[0]&& wall[0]+wall_w+bird_width>=bird[0] &&(bird[1]<=wall[1]+bird_width||bird[1]>=wall[1]+wall_h-bird_width)){gameState = GAME_OVER;}int pass = wall[0]+wall_w+bird_width-bird[0];if(pass<0 && -pass<=speed){level_value++;}}//out of screenif(remove_walls.size()>0){walls.removeAll(remove_walls);}//new wallmove_step += speed;if(move_step>wall_step){int[] wall = new int[]{screenW, (int)(Math.random()*(floor[1]-2*wall_h)+0.5*wall_h)};walls.add(wall);move_step = 0;}break;case GAME_OVER://birdif(bird[1] < floor[1] - bird_width){bird_v+=bird_a;bird[1] += bird_v;if(bird[1] >= floor[1] - bird_width){bird[1] = floor[1] - bird_width;}}else{GameBirdActivity.instance.showMessage(level_value);gameState = GAME_MENU;initGame();}break;}}public void run() {while (flag) {long start = System.currentTimeMillis();myDraw();logic();long end = System.currentTimeMillis();try {if (end - start < 50) {Thread.sleep(50 - (end - start));}} catch (InterruptedException e) {e.printStackTrace();}}}public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {}public void surfaceDestroyed(SurfaceHolder holder) {flag = false;}}LoadingActivity类public class LoadingActivity extends Activity {public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);this.getWindow().setFlags(youtParams.FLAG_FULLSCREEN, youtParams.FLAG_FULLSCREEN);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(yout.loading);final TextView gameStart = (TextView)findViewById(R.id.game_start);AdView adView = (AdView)findViewById(R.id.adView);adView.setAdListener(new AdListener() {public void onReceiveAd(Ad arg0) {gameStart.setVisibility(View.VISIBLE);}public void onPresentScreen(Ad arg0) {// TODO Auto-generated method stub}public void onLeaveApplication(Ad arg0) {// TODO Auto-generated method stub}public void onFailedToReceiveAd(Ad arg0, ErrorCode arg1) {// TODO Auto-generated method stub}public void onDismissScreen(Ad arg0) {// TODO Auto-generated method stub}});View gameMessage = findViewById(R.id.GameMessage);int[] data = getSettingData();TextView levelMessage = (TextView)findViewById(R.id.level_Message);levelMessage.setText("SCORE: "+data[0]+"\nBEST: "+data[1]);gameMessage.setOnClickListener(new View.OnClickListener() {public void onClick(View arg0) {Intent intent = new Intent(LoadingActivity.this, GameBirdActivity.class);intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);startActivity(intent);finish();}});}private int[] getSettingData() {SharedPreferences gb_settings = getSharedPreferences(GameBirdActivity.GameBirdSettingsFile, 0);int last = gb_settings.getInt(GameBirdActivity.Settings_LevelLast, 0);int top = gb_settings.getInt(GameBirdActivity.Settings_LevelTop, 0);return new int[]{last, top};}public boolean onKeyDown(int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_BACK) {try{GameBirdActivity.instance.finish();}catch(Exception e){}finish();System.exit(0);return true;}return super.onKeyDown(keyCode, event);}}四总结在本次开发过程中,我对开发环境进一步的熟悉,基本上可以熟练运用这个环境,也基本掌握了安卓的开发方法及基本流程。