您的位置:首页 > 移动开发 > Android开发

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>

#消息推送#
》客户端被动接收服务器数据, 都可以用上消息推送机制
》应用场景 广告 及时通信
》 极光推送

#语音识别技术#
》科大讯飞语音云

#友盟统计#
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: