这个是一个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"
>
#消息推送#
》客户端被动接收服务器数据, 都可以用上消息推送机制
》应用场景 广告 及时通信
》 极光推送
#语音识别技术#
》科大讯飞语音云
#友盟统计#