Android智慧北京项目总结

这个是一个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 , 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) ;
}

}


//纯文本的选择器 有获取焦点和没有获取焦点时候
android :color= "#f00" android :state_enabled= "true" >
android :color= "#fff" >

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

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

#友盟统计#


















你可能感兴趣的:(Android基础知识)