Android智慧北京项目总结
2017-03-27 00:13
337 查看
这个是一个Fragment被创建出来的生命周期
# 智慧北京黑马74期笔记 #
#项目角色#
1产品经理(产品狗,产品汪)
2程序猿
//负责开发
Android 开发工程师
IOS开发工程师
服务器开发工程师JavaEE
UI设计师
测试
营销
#闪屏页的开发#
--旋转动画
--缩放动画
--渐变动画
#库项目Library#
#侧边栏#
SlidingMenu
droid Touch事件传递机制解析
touch机制好好看了一下,呵呵。。
android系统中的每个ViewGroup的子类都具有下面三个和TouchEvent处理密切相关的方法:
1)public boolean dispatchTouchEvent(MotionEvent ev) 这个方法用来分发TouchEvent
2)public boolean onInterceptTouchEvent(MotionEvent ev) 这个方法用来拦截TouchEvent
3)public boolean onTouchEvent(MotionEvent ev) 这个方法用来处理TouchEvent
旋转动画示例
//前面两个参数是旋转的角度 后面四个参数是旋转的参照物和旋转的中心
//rotateAnimation
=
new
RotateAnimation(0,
360,
Animation.RELATIVE_TO_SELF,
0.5f,
Animation.RELATIVE_TO_SELF,
0.5f);
//一个缩放动画缩放动画前面四个个分别是是x和y缩放的开始大小到结束 后面两个是开始的参照物和开始的中心
ScaleAnimation scaleAnimation =
new
ScaleAnimation(0,
1,
0,
1,
Animation.RELATIVE_TO_SELF,
0.5f,
Animation.RELATIVE_TO_SELF,
0.5f);
//这个是透明度的变化从0到1表示从无到有
AlphaAnimation alphaAnimation =
new
AlphaAnimation(0,
1);
//一个动画的集合用一个控件去启动加载一个动画
AnimationSet set =
new
AnimationSet(true);
set.addAnimation(rotateAnimation);
set.addAnimation(scaleAnimation);
set.addAnimation(alphaAnimation);
rl.startAnimation(set);
//一种动画的一个监听事件
set.setAnimationListener(new
Animation.AnimationListener() {
@Override
//动画开始的时候调用
public
void onAnimationStart(Animation animation) {
}
//动画结束的时候调用
@Override
public
void onAnimationEnd(Animation animation) {
boolean
is_first_enter = PrefUtils.getBoolean(getApplicationContext(),
"is_first_enter", true);
if
(is_first_enter){
//新手引导页
Intent
intent = new
Intent(getApplicationContext(),
GuideActivity.class);
startActivity(intent);
}else{
//主页面
Intent
intent = new
Intent(getApplicationContext(),
MainActivity.class);
startActivity(intent);
}
finish();
}
//动画重复的时候调用
@Override
public
void onAnimationRepeat(Animation animation) {
}
});
//最简单的ViewPager的数据适配器
class
GuideAdapter
extends
PagerAdapter{
@Override
public
int getCount() {
//拿到集合里面的图片的大小
return
mImageViewList.size();
}
//固定写法
@Override
public
boolean isViewFromObject(View view,
Object object) {
return
view==object;
}
//初始化的一个方法
@Override
public
Object
instantiateItem(ViewGroup container,
int position) {
ImageView view=mImageViewList.get(position);
container.addView(view);
return
view;
}
//固定写法
@Override
public
void destroyItem(ViewGroup container,
int position,
Object object) {
container.removeView((View) object);
}
}
//隐藏标题
requestWindowFeature(Window.FEATURE_NO_TITLE);
//这个是一个Fragment的一个事件机制把
FragmentManager fm = getSupportFragmentManager();
//开启一个事务
FragmentTransaction transaction = fm.beginTransaction();
// 将一个侧滑面板和一个LeftMenyFragment的一个类进行替换并打上标签
transaction.replace(R.id.fl_left_menu,new
LeftMenyFragment(),TAG_LEFT_MENU);
transaction.replace(R.id.fl_content,
new ContentFragemnt(),TAG_CONTENT);
//提交事务
transaction.commit();
> SlidingMenu
## 第三方分享平台: ShareSdk ##
#图片缓存#
//优先从内存中加载图片 速度最快,不浪费流量
其次从本地加载图片,速度快,不浪费流量
最后从网络下载图片速度慢,浪费流量
//内存溢出,无论Android的设备有内存多大,都只给每个app 分配16M的内存 一旦超过了16M就会内存溢出
引用
//默认是强引用,垃圾回收器不会回收
-软引用 垃圾回收器会考虑回收SoftReference
-若引用 垃圾回收器更加考虑引用WeakReference
-虚引用 垃圾回收器会最优先回收PhantomReference
#屏幕适配#
》养成练好的开发习惯 多用dp sp 不用px 多用线性布局,不用绝对布局 代码如果必须设置像素的话将dp转化成px进行设置
-图片适配
ldpi 240*320 像素密度0.75
mdpi 320-240 ----------1
hdpi 480*800 ---------------1.5
xhpi 1280*720 ----------------2
xxhdpi 1920*1080 ------------3
常规做法: 做一套图 1280*720 切图, 放在hdpi或xhdpi下. 如果某个屏幕出了问题, 再针对该屏幕, 对相关出问题的图片进行替换.
- 布局适配(不太常用)
layout-800x480:专门针对480*800屏幕适配的布局文件, 一般只调整位置和大小, 不建议对控件类型和个数进行调整
- 尺寸适配(很常用)
//dp 和 px
//dp = px/设备密度
//values-1280x720/dimens.xml
- 权重适配
android:weightSum="3"
- 代码适配
//异步加载
/**
* 三个泛型意义: 第一个泛型:doInBackground里的参数类型 第二个泛型: onProgressUpdate里的参数类型 第三个泛型:
* onPostExecute里的参数类型及doInBackground的返回类型
*
*
@author
Kevin
*
@date
2015-10-24
*/
class
BitmapTask
extends
AsyncTask<Object,
Integer,
Bitmap> {
private
ImageView
imageView;
private
String
url;
//
1.预加载, 运行在主线程
@Override
protected
void onPreExecute() {
super.onPreExecute();
//
System.out.println("onPreExecute");
}
//
2.正在加载, 运行在子线程(核心方法), 可以直接异步请求
@Override
protected
Bitmap
doInBackground(Object... params) {
//
System.out.println("doInBackground");
imageView
= (ImageView) params[0];
url
= (String) params[1];
imageView.setTag(url);//
打标记, 将当前imageview和url绑定在了一起
// 开始下载图片
Bitmap
bitmap = download(url);
//
publishProgress(values) 调用此方法实现进度更新(会回调onProgressUpdate)
return
bitmap;
}
//
3.更新进度的方法, 运行在主线程
@Override
protected
void onProgressUpdate(Integer... values) {
//
更新进度条
super.onProgressUpdate(values);
}
//
4.加载结束, 运行在主线程(核心方法), 可以直接更新UI
@Override
protected
void onPostExecute(Bitmap result) {
//
System.out.println("onPostExecute");
if
(result !=
null) {
//
给imageView设置图片
// 由于listview的重用机制导致imageview对象可能被多个item共用,
// 从而可能将错误的图片设置给了imageView对象
// 所以需要在此处校验, 判断是否是正确的图片
String
url = (String) imageView.getTag();
if
(url.equals(this.url))
{// 判断图片绑定的url是否就是当前bitmap的url,
// 如果是,说明图片正确
imageView.setImageBitmap(result);
System.out.println("从网络加载图片啦!!!");
//
写本地缓存
mLocalCacheUtils.setLocalCache(url,
result);
//
写内存缓存
mMemoryCacheUtils.setMemoryCache(url,
result);
}
}
super.onPostExecute(result);
}
}
//纯文本的选择器 有获取焦点和没有获取焦点时候
<item
android:color="#f00"
android:state_enabled="true"></item>
<item
android:color="#fff"
></item>
#消息推送#
》客户端被动接收服务器数据, 都可以用上消息推送机制
》应用场景 广告 及时通信
》 极光推送
#语音识别技术#
》科大讯飞语音云
#友盟统计#
# 智慧北京黑马74期笔记 #
#项目角色#
1产品经理(产品狗,产品汪)
2程序猿
//负责开发
Android 开发工程师
IOS开发工程师
服务器开发工程师JavaEE
UI设计师
测试
营销
#闪屏页的开发#
--旋转动画
--缩放动画
--渐变动画
#库项目Library#
#侧边栏#
SlidingMenu
droid Touch事件传递机制解析
touch机制好好看了一下,呵呵。。
android系统中的每个ViewGroup的子类都具有下面三个和TouchEvent处理密切相关的方法:
1)public boolean dispatchTouchEvent(MotionEvent ev) 这个方法用来分发TouchEvent
2)public boolean onInterceptTouchEvent(MotionEvent ev) 这个方法用来拦截TouchEvent
3)public boolean onTouchEvent(MotionEvent ev) 这个方法用来处理TouchEvent
旋转动画示例
//前面两个参数是旋转的角度 后面四个参数是旋转的参照物和旋转的中心
//rotateAnimation
=
new
RotateAnimation(0,
360,
Animation.RELATIVE_TO_SELF,
0.5f,
Animation.RELATIVE_TO_SELF,
0.5f);
//一个缩放动画缩放动画前面四个个分别是是x和y缩放的开始大小到结束 后面两个是开始的参照物和开始的中心
ScaleAnimation scaleAnimation =
new
ScaleAnimation(0,
1,
0,
1,
Animation.RELATIVE_TO_SELF,
0.5f,
Animation.RELATIVE_TO_SELF,
0.5f);
//这个是透明度的变化从0到1表示从无到有
AlphaAnimation alphaAnimation =
new
AlphaAnimation(0,
1);
//一个动画的集合用一个控件去启动加载一个动画
AnimationSet set =
new
AnimationSet(true);
set.addAnimation(rotateAnimation);
set.addAnimation(scaleAnimation);
set.addAnimation(alphaAnimation);
rl.startAnimation(set);
//一种动画的一个监听事件
set.setAnimationListener(new
Animation.AnimationListener() {
@Override
//动画开始的时候调用
public
void onAnimationStart(Animation animation) {
}
//动画结束的时候调用
@Override
public
void onAnimationEnd(Animation animation) {
boolean
is_first_enter = PrefUtils.getBoolean(getApplicationContext(),
"is_first_enter", true);
if
(is_first_enter){
//新手引导页
Intent
intent = new
Intent(getApplicationContext(),
GuideActivity.class);
startActivity(intent);
}else{
//主页面
Intent
intent = new
Intent(getApplicationContext(),
MainActivity.class);
startActivity(intent);
}
finish();
}
//动画重复的时候调用
@Override
public
void onAnimationRepeat(Animation animation) {
}
});
//最简单的ViewPager的数据适配器
class
GuideAdapter
extends
PagerAdapter{
@Override
public
int getCount() {
//拿到集合里面的图片的大小
return
mImageViewList.size();
}
//固定写法
@Override
public
boolean isViewFromObject(View view,
Object object) {
return
view==object;
}
//初始化的一个方法
@Override
public
Object
instantiateItem(ViewGroup container,
int position) {
ImageView view=mImageViewList.get(position);
container.addView(view);
return
view;
}
//固定写法
@Override
public
void destroyItem(ViewGroup container,
int position,
Object object) {
container.removeView((View) object);
}
}
//隐藏标题
requestWindowFeature(Window.FEATURE_NO_TITLE);
//这个是一个Fragment的一个事件机制把
FragmentManager fm = getSupportFragmentManager();
//开启一个事务
FragmentTransaction transaction = fm.beginTransaction();
// 将一个侧滑面板和一个LeftMenyFragment的一个类进行替换并打上标签
transaction.replace(R.id.fl_left_menu,new
LeftMenyFragment(),TAG_LEFT_MENU);
transaction.replace(R.id.fl_content,
new ContentFragemnt(),TAG_CONTENT);
//提交事务
transaction.commit();
> SlidingMenu
## 第三方分享平台: ShareSdk ##
#图片缓存#
//优先从内存中加载图片 速度最快,不浪费流量
其次从本地加载图片,速度快,不浪费流量
最后从网络下载图片速度慢,浪费流量
//内存溢出,无论Android的设备有内存多大,都只给每个app 分配16M的内存 一旦超过了16M就会内存溢出
引用
//默认是强引用,垃圾回收器不会回收
-软引用 垃圾回收器会考虑回收SoftReference
-若引用 垃圾回收器更加考虑引用WeakReference
-虚引用 垃圾回收器会最优先回收PhantomReference
#屏幕适配#
》养成练好的开发习惯 多用dp sp 不用px 多用线性布局,不用绝对布局 代码如果必须设置像素的话将dp转化成px进行设置
-图片适配
ldpi 240*320 像素密度0.75
mdpi 320-240 ----------1
hdpi 480*800 ---------------1.5
xhpi 1280*720 ----------------2
xxhdpi 1920*1080 ------------3
常规做法: 做一套图 1280*720 切图, 放在hdpi或xhdpi下. 如果某个屏幕出了问题, 再针对该屏幕, 对相关出问题的图片进行替换.
- 布局适配(不太常用)
layout-800x480:专门针对480*800屏幕适配的布局文件, 一般只调整位置和大小, 不建议对控件类型和个数进行调整
- 尺寸适配(很常用)
//dp 和 px
//dp = px/设备密度
//values-1280x720/dimens.xml
- 权重适配
android:weightSum="3"
- 代码适配
//异步加载
/**
* 三个泛型意义: 第一个泛型:doInBackground里的参数类型 第二个泛型: onProgressUpdate里的参数类型 第三个泛型:
* onPostExecute里的参数类型及doInBackground的返回类型
*
*
@author
Kevin
*
@date
2015-10-24
*/
class
BitmapTask
extends
AsyncTask<Object,
Integer,
Bitmap> {
private
ImageView
imageView;
private
String
url;
//
1.预加载, 运行在主线程
@Override
protected
void onPreExecute() {
super.onPreExecute();
//
System.out.println("onPreExecute");
}
//
2.正在加载, 运行在子线程(核心方法), 可以直接异步请求
@Override
protected
Bitmap
doInBackground(Object... params) {
//
System.out.println("doInBackground");
imageView
= (ImageView) params[0];
url
= (String) params[1];
imageView.setTag(url);//
打标记, 将当前imageview和url绑定在了一起
// 开始下载图片
Bitmap
bitmap = download(url);
//
publishProgress(values) 调用此方法实现进度更新(会回调onProgressUpdate)
return
bitmap;
}
//
3.更新进度的方法, 运行在主线程
@Override
protected
void onProgressUpdate(Integer... values) {
//
更新进度条
super.onProgressUpdate(values);
}
//
4.加载结束, 运行在主线程(核心方法), 可以直接更新UI
@Override
protected
void onPostExecute(Bitmap result) {
//
System.out.println("onPostExecute");
if
(result !=
null) {
//
给imageView设置图片
// 由于listview的重用机制导致imageview对象可能被多个item共用,
// 从而可能将错误的图片设置给了imageView对象
// 所以需要在此处校验, 判断是否是正确的图片
String
url = (String) imageView.getTag();
if
(url.equals(this.url))
{// 判断图片绑定的url是否就是当前bitmap的url,
// 如果是,说明图片正确
imageView.setImageBitmap(result);
System.out.println("从网络加载图片啦!!!");
//
写本地缓存
mLocalCacheUtils.setLocalCache(url,
result);
//
写内存缓存
mMemoryCacheUtils.setMemoryCache(url,
result);
}
}
super.onPostExecute(result);
}
}
//纯文本的选择器 有获取焦点和没有获取焦点时候
<item
android:color="#f00"
android:state_enabled="true"></item>
<item
android:color="#fff"
></item>
#消息推送#
》客户端被动接收服务器数据, 都可以用上消息推送机制
》应用场景 广告 及时通信
》 极光推送
#语音识别技术#
》科大讯飞语音云
#友盟统计#
相关文章推荐
- android项目智慧北京开发完整步骤:第三天
- 智慧北京项目总结
- 黑马66期Android_智慧北京_学习总结
- Android 项目实战:智慧北京(黑马)
- android项目智慧北京开发完整步骤:第一天
- Android项目-智慧北京:02(三种技术设计主页面及源码分析点击事件传递的机制及Json数据传递的使用)
- 黑马66期Android_智慧北京_学习总结
- android项目智慧北京开发完整步骤:第二天
- 智慧北京项目总结
- Android 项目实战:智慧北京(黑马)
- 总结了近百个Android优秀开源项目,覆盖Android开发的每个领域
- 安卓巴士总结了近百个Android优秀开源项目
- Android项目技术总结:项目中选择任务的联系人引出android的spinner的监听问题
- 安卓巴士总结了近百个Android优秀开源项目,覆盖Android开发的每个领域
- Android新浪微博-项目整理总结 二[使用WebView获取OAuth验证码]
- Android项目技术总结:获取状态栏和标题栏并计算长宽来限制绘制浮动窗口活动范围
- Android企业应用项目开发总结
- Android项目总结(软键盘管理)
- Android项目技术总结:项目中选择任务的联系人android版的解决方案
- Android app项目开发步骤总结