27
2017
09

Android群英传小总结

看书的总结参考资料(Android群英传)

1.自定义控件

1.1控件架构

Activity-PhoneWindow-DecorView(TitleView,ContentView)

1.2View的测量

1)OnMeasure()方法
2)MeasureSpec类是一个32位int值,高2位是测量模式,低30是测量大小
3)测量模式有EXACTLY(精确模式)、AT_MOST(最大值模式)、UNSPECIFIED(未定义大小,一般用于自定义View)
获取模式例如:int specMode = MeasureSpec.getMode(measureSpec);
判断模式例如:specMode == MeasureSpec. EXACTLY

1.3View 的绘制

1)OnDraw()
2)onFinishInflate():从XML加载完组件后调用
3)onSizeChanged():组件大小改变时调用
4)如果是ViewGroup还有布局方法onLayout()

1.4自定义属性

1)创建attr.xml文件
2)代码获取上面布局文件,并给控件设置属性
例如:TypedArray ta=context.obtainStyleAttributes(attrs,R.styleable.name);
mBg = ta.getDrawable(R.styleable.name_propertyName,0);
mButton.setBackground(mBg);
3)自定义接口
4)引用文件
注意指定名字空间
xmln:android=http://schemas.android.com/apk/res/android

1.5事件拦截机制

例如A-B-C
完整流程是:A的dispatchTouchEvent—A 的onInterceptTouchEvent
B的dispatchTouchEvent—B 的onInterceptTouchEvent
C的dispatchTouchEvent—C 的onTouchEvent
B的onTouchEvent-C的onTouchEvent
只要onTouchEvent没有返回true就会执行下一个的onTouchEvent直到结束

2.ListView的使用技巧

2.1常规技巧

ViewHolder/ convertView
android:divider=”@android:color/darker_gray” 设置分割线
android:scrollbars=”none” 隐藏滚动条
listView.setSelection(N) 指定显示第N条item
mAdapter.notifyDataSetChanged(); 动态更新
listView.setEmptyView(empty_view); 注意empty布局和listview在一起。

2.2ListView的监听事件

1)OnTouchListener(down/move/up事件);
2)onScrollListener其中onScrollStateChanged(SCROLL_STATE_IDLE
停止/SCROLL_STATE_ITOUCH_SCROLL滑动/SCROLL_STATE_IFLING用手指滑动离开时的惯性滑动状态);onScroll()滚动时一直调用

2.3LisView的特殊方法

1)overScrollBy:重写它可以设置listview下拉距离
2)getItemViewType():判断加载不同布局样式的表标识

3.Scroll分析

3.1获取坐标的方法

这里写图片描述

3.2实现滑动的方法

1)onLayout(通过原坐标+偏移量)
2)offsetLeftAndRight(offsetX)和offsetTopAndBottom(offsetY)根据偏移量调用该方法
3)LayoutParams(动态修改布局位置)
4)ScrollTo(x,y)表示移动到摸个具体的坐标;ScrollBy(offset,offsetY)表示移动的增量也就是偏移量.注意以上两个方法移动是数瞬间完成的
5)Scroller可以平滑的移动
6)属性动画
7)ViewDragHelper

4.绘图技巧

4.1屏幕的一些概念

1)分辨率、DPI(每英寸像素)、px和dp的转换、px和sp的转换
2)canvas画线、形状等
3)XML绘图标签、标签、标签(类似于PS图层)、(不同事件获得不同状态)
4)surfaceView(使用场景频繁刷新或者刷新时数据处理较大可以考虑使用)

5.动画

5.1tween(补间动画)

Alpha(透明)、Rotate(旋转)、Translate(位移)、Scale(缩放)、AnimationSet(动画集合)

5.2frame(帧动画)

5.3Object(属性动画)

通过静态工厂的方式返回一个objectAnimator对象;PropertyValuesHolder(实现动画集合);
AnimatorSet(实现动画集合);

5.4自定义动画

(applyTransformation(float interpolatedTime,Transformation t))

5.5 Android5.X SVG矢量动画

6.Activity

6.1状态

Running Paused Stopped Killed

6.2生命周期(七种)

OnCreate onStart (可见)onResume(获得焦点) onPause(失去焦点) onStop(不可见) onDestory onRestart

6.3启动模式

standard singleTop singleTask singleInstance

7.性能优化

7.1布局优化

7.2内存优化

静态存储:编译的时候就存在的,一般是static
栈:一般存放基本数据类型和对象的引用,对象本身存储在堆中
堆:用来存放用new创建的对象和数组

7.3使用工具分析、优化

1)Bitmap的优化:使用适当的分辨率图片,及时回收,使用缓存
2)代码优化:使用静态方法、static修饰常量、减少不必要的成员变量、对资源注意回收解注册等、避免使用IOC框架、尽量使用视图缓存、使用surfaceView替换View进行频繁的绘图。

上一篇:Please change caller according to com.intellij.openapi.project.IndexNotReadyException documentation 下一篇:asp.net c# 打开新页面或页面跳转