一、说明
笔记主要是《Android开发艺术探索》的阅读笔记和自己的理解,笔记中部分内容引自《Android开发艺术探索》。
因此需要着重感谢任玉刚先生和他所著的《Android开发艺术探索》;然后感谢任玉刚先生授权我使用小部分《Android开发艺术探索》原文。
推荐Android开发者购买正版《 Android开发艺术探索》,该书是初级Android开发者进阶的必备良品!
由于本人水平有限,其中出现的错误或者不合理的地方望各位读者多多包含,并指出其中不合理和错误的地方,以便我来修正。谢谢!
二、笔记时间
2018年10月12日
三、简述
本文主要记录《Android开发艺术探索》中第5、6、7、8、9、10、11、12、14章中的重要知识点,其中包含Drawable、
WindowManager、Bitmap、缓存等一些重要知识细节。
文中加入了一些个人理解,可能有一些说明不合理或者错误之处,望各位读者指出错误的地方,以便我来修改错误,避免误导读者。谢谢!
四、详情
1、RemoteViews
RemoteViews表示的是一个View结构,它可以在其他进程中显示,由于它在其他进程中显示,为了能够更新它的界面,RemoteViews提供了一组基础的操作用于跨进程更新它的界面。RemoteViews通常用于通知栏和桌面小部件两种场景。
2、Drawable
1)BitmapDrawable:BitmapDrawable表示的就是一张图片。在实际开发中,可以直接用原始的图片,但是也可以通过XML的方式来描述它,通过XML来描述的BitmapDrawable可以设置更多的效果。
2)ShapeDrawable:ShapeDrawable可以理解为通过颜色来构造的图形,它既可以是纯色的图形也可以是具有渐变效果的图形。
3)LayerDrawable:LayerDrawable表示一种层次化的Drawable集合,对应的XML标签是<layer-list>。
4)StateListDrawable:StateListDrawable也表示Drawable集合,对应的XML标签是<selector>。
5)LevelListDrawable:LevelListDrawable也表示Drawable集合,对应的XML标签是<level-lsist>。
6)TransitionDrawable:TransitionDrawable用于实现两个Drawable之间的淡入淡出效果,对应的XML标签是<transition>。
7)InsetDrawable:InsetDrawable可以将其他Drawable内嵌到自己当中,并可以在四周留出一定的距离,对应的XML标签是<inset>。
8)ScaleDrawable:ScaleDrawable根据自己的等级(level)将指定的Drawable缩放到一定比例,对应的XML标签是<scale>。
9)ClipDrawable:ClipDrawable根据自己当前的等级(level)来裁剪另一个Drawable,裁剪方向通过android:clipOrientation和android:gravity这两个属性来共同控制,对应的XML标签是<clip>。
10)自定义Drawable:通过重写Drawable的draw方法来自定义Drawable。通常没必要自定义Drawable,因为自定义Drawable不能在XML中使用。
3、Android动画
1)View动画:View动画的作用对象是View,它支持4种动画效果,分别是平移动画、缩放动画、旋转动画、透明度动画。其实帧动画也是属于View动画的一种。
2)属性动画:属性动画是API11新加入的特性,和View动画不同,它对作用对象进行来扩展,属性动画可以对任何对象做动画,甚至还可以没有对象。除了作用对象进行来扩展以为外,属性动画的效果也得到了加强,不再像View动画那样只支持四种简单动画。属性动画中有ValueAnimator、ObjectAnimator和AnimatorSet等,通过他们可以实现绚丽的动画。
注:
1)OOM:这个问题主要出现在帧动画中,当图片数量较多且图片较大时就容易出现OOM,因此应尽量避免使用帧动画。
2)内存泄露:当动画是一个无限循环的动画时,需要在Activity退出时及时停止(View动画不存在这个问题)。
3)兼容性问题:动画在3.0以下的系统上存在兼容性问题,在某些特殊场景下可能无法正常工作。
4)View动画问题:View动画是对View的影像做动画,并不是真正地改变View的状态,因此有时候会出现动画完成后View无法隐藏的现象,即setVisibility(View.GONE)失效了,这时候只要调用view.clearAnimatiln()清除View动画即可。
5)不要使用px:尽量使用dp,使用px会导致在不同设备上有不同的效果。
6)动画元素的交互:在Android 3.0以前的系统,View移动后,新位置上不能触发点击事件,而旧位置上仍然可以触发点击事件。Android 3.0以后,属性动画的单击事件触发位置为移动后的位置,但是View动画仍然在原位置。
7)硬件加速:建议开启硬件加速,这样可以提高动画的流畅性。
4、Android中的缓存
1)LruCache:LurCache是Android 3.1提供的一个缓存类,通过support-v4兼容包可以兼容到早期的Android版本。建议使用support-v4兼容包中提供的LruCache,而不要直接用Android 3.1提供的LruCache。
2)DiskLruCache:用于实现存储设备缓存(磁盘缓存),它通过把缓存对象写入文件系统而实现缓存的效果。
3)ImageLoader:ImageLoader是具备图片处理、缓存的工具。它具备以下功能:1、图片的同步加载;2、图片的异步加载;3、图片压缩;4、内存缓存;5、磁盘缓存;6、网络拉取。
网友评论