目录
一、 详细设计 1
【需求分析】 1
五类地方旅游类App下载量分布图 1
六大商店地方旅游类App下载量分布图 2
【可行性分析】 2
【用例建模】 3
【流程图】 4
【系统分析】 4
【时序图】 5
【ER图】 5
【数据库设计】 7
二、关键技术说明 8
三、模块测试 9
【可行性分析】
经济可行性:
设备
服务器:Linux系统的阿里云服务器
PC机:开发电脑3台
数据库:MySQL。
建模工具:Rotational Rose 2003
技术可行性:
版本控制系统:SVN
前端:Bootstrap框架、Html5+CSS3、JavaScript、Ajax
后台:Struts2框架、Hibernate框架、Spring框架
设计模式:拟采用单例模式、适配器和外观模式
算法:AES加密算法、MD5加密算法、路径规划算法
社会因素可行性分析:
所有软件都选用正版.
所有技术资料都由提出方保管。
合同制定确定违约责任.
用户使用可行性分析
二、关键技术说明
说明:将项目使用到的关键技术,本文转载自http://www.biyezuopin.vip/onews.asp?id=15211核心算法进行说明,可以配少量的代码进行说明。
版本控制系统:SVN
前端:Bootstrap框架、Html5+CSS3、JavaScript、Ajax
后台:Struts2框架、Hibernate框架、Spring框架
设计模式:拟采用单例模式、适配器和外观模式
算法:AES加密算法、MD5加密算法、路径规划算法
package com.tsc.view;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ListView;
public class MyListView extends ListView {
boolean allowDragTop = true; // 如果是true,则允许拖动至底部的下一页
float downY = 0;
boolean needConsumeTouch = true; // 是否需要承包touch事件,needConsumeTouch一旦被定性,则不会更改
public MyListView(Context arg0) {
this(arg0, null);
}
public MyListView(Context arg0, AttributeSet arg1) {
this(arg0, arg1, 0);
}
public MyListView(Context arg0, AttributeSet arg1, int arg2) {
super(arg0, arg1, arg2);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
downY = ev.getRawY();
needConsumeTouch = true; // 默认情况下,listView内部的滚动优先,默认情况下由该listView去消费touch事件
allowDragTop = isAtTop();
} else if (ev.getAction() == MotionEvent.ACTION_MOVE) {
if (!needConsumeTouch) {
// 在最顶端且向上拉了,则这个touch事件交给父类去处理
getParent().requestDisallowInterceptTouchEvent(false);
return false;
} else if (allowDragTop) {
// needConsumeTouch尚未被定性,此处给其定性
// 允许拖动到底部的下一页,而且又向上拖动了,就将touch事件交给父view
if (ev.getRawY() - downY > 2) {
// flag设置,由父类去消费
needConsumeTouch = false;
getParent().requestDisallowInterceptTouchEvent(false);
return false;
}
}
}
// 通知父view是否要处理touch事件
getParent().requestDisallowInterceptTouchEvent(needConsumeTouch);
return super.dispatchTouchEvent(ev);
}
/**
* 判断listView是否在顶部
*
* @return 是否在顶部
*/
private boolean isAtTop() {
boolean resultValue = false;
int childNum = getChildCount();
if (childNum == 0) {
// 没有child,肯定在顶部
resultValue = true;
} else {
if (getFirstVisiblePosition() == 0) {
// 根据第一个childView来判定是否在顶部
View firstView = getChildAt(0);
if (Math.abs(firstView.getTop() - getTop()) < 2) {
resultValue = true;
}
}
}
return resultValue;
}
}
本文含有隐藏内容,请 开通VIP 后查看