Android 学习
定制视图
Android界面在自定义控件时,经常需要使用canvas、paint等类,在canvas类中,绘画基本都是靠drawXXX()方法来完成的,在这些方法中,很多时候都需要用到paint类型的参数,本文先对paint类常用的一些设置做个简单总结
Canvas类就是表示一块画布,你可以在上面画你想画的东西。当然,你还可以设置画布的属性,如画布的颜色/尺寸等。
Canvas提供了如下一些方法:
- Canvas():创建一个空的画布,可以使用setBitmap()方法来设置绘制的具体画布;
- Canvas(Bitmap bitmap):以bitmap对象创建一个画布,则将内容都绘制在bitmap上,bitmap不得为null;
- Canvas(GL gl):在绘制3D效果时使用,与OpenGL有关;
- drawColor:设置画布的背景色;
- setBitmap:设置具体的画布;
- clipRect:设置显示区域,即设置裁剪区;
- isOpaque:检测是否支持透明;
- rotate:旋转画布;
Color类定义了多个颜色代码字段,以及用于创建和转换颜色int的方法。
而Paint类代表了Canvas上的画笔、画刷、颜料等等,其常用方法有:
图形绘制相关:
- set(Paint src) 根据已有画笔的属性进行赋值
- setColor(int color) 设置颜色
- setAlpha(int alpha) 设置透明度,alpha为透明度,取值范围为0~255,数值越小越透明
- setARGB(int a, int r, int g, int b) 设置透明度和颜色,a代表透明度,r,g,b代表颜色值
- setAntiAlias(boolean aa) 设置是否使用抗锯齿功能,比较耗资源,减慢绘制速度
- setDither(boolean dither) 设定是否使用图像抖动,如true,绘制出来的图片颜色更饱满、清晰
- setStyle(android.graphics._Original_Paint.Style style) 设置画笔的样式,为FILL,FILL_OR_STROKE,或STROKE
文字绘制相关:
- setTextSize(float textSize) 设置文字大小
- setTextScaleX(float scaleX) 设置文字x轴的缩放比例,可以实现文字的拉伸效果
- setTextSkewX(float skewX) 设置文字倾斜弧度
- setUnderlineText(boolean flag) 设置文字下划线效果
- setStrikeThruText(boolean flag) 设置删除线效果
- setTypeface(Typeface typeface) 设置字体风格
- setTextAlign(android.graphics._Original_Paint.Align align) 设置文字的对齐方向
片段
Android 在 Android 3.0(API 级别 11)中引入了片段,主要是为了给大屏幕(如平板电脑)上更加动态和灵活的 UI 设计提供支持。由于平板电脑的屏幕比手机屏幕大得多,因此可用于组合和交换 UI 组件的空间更大。利用片段实现此类设计时,无需管理对视图层次结构的复杂更改。 通过将 Activity 布局分成片段,可以在运行时修改 Activity 的外观,并在由 Activity 管理的返回栈中保留这些更改。
Fragment 表示 Activity 中的行为或用户界面部分。我们可以将多个片段组合在一个 Activity 中来构建多窗格 UI,以及在多个 Activity 中重复使用某个片段。可以将片段视为 Activity 的模块化组成部分,它具有自己的生命周期,能接收自己的输入事件,并且在 Activity 运行时添加或移除片段(有点像在不同 Activity 中重复使用的“子 Activity”)。
片段必须始终嵌入在 Activity 中,其生命周期直接受宿主 Activity 生命周期的影响。 例如,当 Activity 暂停时,其中的所有片段也会暂停;当 Activity 被销毁时,所有片段也会被销毁。 不过,当 Activity 正在运行(处于已恢复生命周期状态)时,我们可以独立操纵每个片段,如添加或移除它们。 当执行此类片段事务时,我们也可以将其添加到由 Activity 管理的返回栈 — Activity 中的每个返回栈条目都是一条已发生片段事务的记录。 返回栈让用户可以通过按返回按钮撤消片段事务(后退)。
要想创建片段,我们必须创建 Fragment 的子类(或已有其子类)。Fragment 类的代码与 Activity 非常相似。它包含与 Activity 类似的回调方法,如 onCreate()、onStart()、onPause() 和 onStop()。实际上,如果要将现有 Android 应用转换为使用片段,可能只需将代码从 Activity 的回调方法移入片段相应的回调方法中。
通常,我们至少应实现以下生命周期方法:
- onCreate() 系统会在创建片段时调用此方法。您应该在实现内初始化您想在片段暂停或停止后恢复时保留的必需片段组件。
- onCreateView() 系统会在片段首次绘制其用户界面时调用此方法。 要想为您的片段绘制 UI,您从此方法中返回的 View 必须是片段布局的根视图。如果片段未提供 UI,您可以返回 null。
- onPause() 系统将此方法作为用户离开片段的第一个信号(但并不总是意味着此片段会被销毁)进行调用。 您通常应该在此方法内确认在当前用户会话结束后仍然有效的任何更改(因为用户可能不会返回)。
大多数应用都应该至少为每个片段实现这三个方法,但您还应该使用几种其他回调方法来处理片段生命周期的各个阶段。 处理片段生命周期部分对所有生命周期回调方法做了更详尽的阐述。
此外还有以下几个扩展子类:
- DialogFragment 显示浮动对话框。使用此类创建对话框可有效地替代使用 Activity 类中的对话框帮助程序方法,因为您可以将片段对话框纳入由 Activity 管理的片段返回栈,从而使用户能够返回清除的片段。
- ListFragment 显示由适配器(如 SimpleCursorAdapter)管理的一系列项目,类似于 ListActivity。它提供了几种管理列表视图的方法,如用于处理点击事件的 onListItemClick() 回调。
- PreferenceFragment 以列表形式显示 Preference 对象的层次结构,类似于 PreferenceActivity。这在为您的应用创建“设置” Activity 时很有用处。
动画
属性动画(Property Animation)是在 Android 3.0(API 11)后才提供的一种全新动画模式。其通过,在一定时间间隔内,不断对值进行改变,并不断将该值赋给对象的属性,从而实现该对象在该属性上的动画效果。
ValueAnimator类
这属性动画机制中 最核心的一个类,其通过不断控制 值 的变化,再不断 手动 赋给对象的属性,从而实现动画效果。
ValueAnimator类中有3个重要方法:
- ValueAnimator.ofInt(int values)将初始值以整型数值的形式过渡到结束值;
- ValueAnimator.ofFloat(float values)将初始值以浮点型数值的形式过渡到结束值;
- ValueAnimator.ofObject(int values)将初始值以对象的形式过渡到结束值;
ObjectAnimator类
该类直接对对象的属性值进行改变操作,从而实现动画效果,如直接改变 View的 alpha 属性 从而实现透明度的动画效果,其本质原理是通过不断控制值的变化,再不断自动赋给对象的属性,从而实现动画效果。
ObjectAnimator与 ValueAnimator类的区别:
- ValueAnimator 类是先改变值,然后手动赋值给对象的属性从而实现动画;是间接对对象属性进行操作;
- ObjectAnimator 类是先改变值,然后自动赋值给对象的属性从而实现动画;是直接对对象属性进行操作;