Android学习笔记(二)



Android Cloud to Device Messaging(C2DM)服务为开发人员提供了一种根据服务器推送创建事件驱动
应用程序的有效机制。


每个Android应用程序都运行在他自己的Dalvik实例的一个进程中,他把内存管理和进程管理的所有工作
都交给了Android运行时进行处理,Android运行时在必要的时候会暂停或关闭进程,从而有效管理资源。


Android软件栈就是通过一个应用程序框架提供一个Linux内核和c/c++函数库,而该应用程序库框架为运行
时和应用程序提供服务,并对他们进行管理。
Linux内核 核心服务:包括硬件驱动程序、进程和内存管理、安全、网络和电源管理。
库 在内核之上,Android包含了各种C/C++核心库
Android运行时 核心库和Dalivik虚拟机
应用程序框架
应用层


Android应用程序的类型:
前台应用程序:只能运行在前台的应用程序,当他不可见时会被挂起
后台应用程序:
间歇式应用程序:
Widget和Live Wallpaper
installLocation属性,制定是否允许将应用程序安装到外部存储器。
uses-feature要求支持兼容设备上的可选任意硬件
supports-screen:屏幕要求
supports-gl-texture用于声明应用程序能够提供以一种特定的Gl纹理压缩格式压缩纹理资源
users-permisson声明应用程序需要。
permission应用程序组件也可以创建权限来限制对共享应用程序组件的访问。
instrumentation类提供了一个测试框架,用来在应用程序运行时测试应用程序组件。
application一个manifest只能包含一个application节点。开发时debuggable设置true
uses-library用于指定该应用程序需要的共享库。


试图动画:存储在res/anim文件夹下的XML,alpha,scale,translate,rolate
duration:
startOffse动画开始之前的延迟
fillBeforeture:在动画开始之前应用动画变形
fillAfterture在动画开始之后用用动画变形
interpolator用来设置这种效果随时间改变的速度。


?android: 在当前主题中引用样式。
android:configChanges属性说明希望对哪些配置更改进行处理
添加此属性可以阻止由于特定配置改变而造成的重启,并触发Activity中的onConfigurationChanged处理程序。


Application:
对Android运行时广播的应用程序级事件(如低内存)做出响应
在应用程序组件之间传递对象
管理和维护多个应用程序组件使用的资源


重写方法:
oncreate:
onLowMemory:
onTrimMemory:
onConfigurationChanged:与Activity不同,在配置改变时,应用程序对象不被终止或重启。


onRestoreInstanceState在onCreate方法完成后调用,用于恢复UI状态。
onSaveInstanceState如果进程被运行时终止并被重启,那么这个Bundle将被传递给onCreate和
onRestoreInstanceState


onStop应该用来暂停或停止动画线程传感器监听器GPS查找定时器Service或者其他用于更新用户界面的进程


MapActivity:支持MapViewWidget所要求的资源处理
ListActivity:Activity包装类,他将一个ListView绑定到了一个数据源,从而作于一个主UI元素,并提供了列表现
选择的事件处理程序。
ExpandaleListActivity:与ListActivity类似,但他支持了ExpandableListView




merge标签:再被添加到另一个布局时,该布局的merge节点会被删除,而该节点的子View会被直接添加到新
的父布局中。通常结合include标签一起使用。


fragmentTransaction.addToBackStack(tag)按下back键时,之前的fragment transaction将会回滚


DispalyMetrics :getWindowManager.getDefaultDisplay.getMetrics(metrics);
得到是屏幕的绝对像素


overridePendingTransition:两个Activity切换时的画面,在startActivity或finish之后调用




onInterceptEvent()适用于处理事件,并改变事件的传递方向,也就是决定是否允许Touch事件继续向下
即子控件传递,一旦返回True(代表事件在当前的viewgroup中会被处理),则向下传递之路被截断,所有
子控件将没有机会参与Touch事件,同时把事件传递给当前控件的onTouchEvent处理,返回false,则把事件
交给子控件的onInterceptTouhEvent


onTouchEvent用于处理事件,返回值决定当前控件是否消费了这个事件,也就是说在当前控件处理完Touch
事件后,是否允许Touch事件向上传递,一旦返回True,则父控件不处理Touch事件。
如果没有消费Action_Down,那么系统认为Action_Down没有发生过,所有Action_Move和Action_up就不能
被捕获。


转换度量单位
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, res.getDisplayMetrics());TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, res.getDisplayMetrics());


//绘制自己孩子,分发给子组件进行绘制,viewgroup没有背景是直接调用dispatchDraw,
//onDraw绘制本身,onDraw方法里包含dispatchDraw方法

//getMeasuredWidth getMeasureHeight表示view的大小,getWidth,getHeight表示屏幕的大小



图片:
  bitmap:位图,BitmapDrawable里封装的图片就是一个bitmap
  
  创建bitmap对象的方法:
  createBitmap(bitmap,x,y,width,height)
  createScaledBitmap(bitmap,width,height,bool)创建一个缩放的bitmap
  createBitmap(bitmap,x,y,width,height,matrix,bool)
  
 BitmapFactory是一个工具类
 
 isRecycled()bitmap对象是否已经回收自己
 recycle()强制立即回收自己
 
 Canvas的绘制方法:
 
 drawArc:绘制弧
 drawBitmap
 drawCircle:绘制圆
 drawLine:绘制线
 drawLines:多条线
 drawOval:绘制椭圆
 drawPath:绘制指定的线
 drawPoint:绘制点
 drawPoints绘制多点
 drawRect:绘制矩形
 drawRoundRect:绘制带圆角的矩形
 drawText:绘制字符
 drawTextOnPath:沿着路径绘制字符串
 clipRect:剪切一个矩形
 clipRegion:剪切指定区域
 
 rotate()旋转
 scale()缩放
 skew()倾斜变换
 translate()移动
 
 Paint的常用方法:
 setARGB:设置颜色
 setAlpha:设置透明度
 setAntiAlias:设置是否抗锯齿
 setColor:设置颜色
 setPathEffect(PathEffect)设置绘制路径时的路径效果
 setShader(shader)设置画笔的填充效果
 setShadowLayer设置阴影
 setStrokeJoin(Paint.Join join)设置画笔转弯处的连接风格
 setStrokeWidth设置画笔的笔触宽度
 setStyle(Style style)设置Paint的填充风格
 setTextAlign(Paint.Align align)设置绘制文本时的文字对齐方式
 setTextSize()设置绘制文本时的字体大小
 
 双缓冲技术:当程序需要在指定View上进行绘制时,程序不直接绘制到View组件上,而是先绘制到一个内存
 中的Bitmap图片上,等到内存中的Bitmap绘制好之后,在一次性将Bitmap绘制到View组件上。
 
 
 android:fadingEdge设置滚动该组件时组件边界是否使用淡出效果
 android:fadingEdgeLength设置淡出边界的长度
 android:isScrollContainer设置该组件是否作为可滚动容器使用
 android:keepScreenOn设置该组件是否会强制手机屏幕一直打开
 android:saveEnabled如果设置为false,那当该组件被冻结时不会保存他的状态
 android:scrollbarAlwaysDrawHorizontalTrack设置组件是否总是显示水平滚动条的轨道
 android:scrollbarAlwaysDrawVerticalTrack设置该轨道是否总是显示垂直滚动条的轨道
 android:scrollbarDefaultDelayBeforeFade设置滚动条在淡出隐藏之前延迟多少毫秒
 android:scrollbarFadeDuration设置滚动条淡出隐藏过程需要多少秒
 android:scollbarSize设置垂直滚动条和水平滚动条的高度
 android:scrollbarThumbHorizontal设置该组件的水平滚动条的滑块所对应的drawable对象
 
 Drawable是android提供的一个抽象基类,他代表了可以被绘制出来的某种东西,drawable包括大量子类,
 bitmapdrawable代表位图drawable,colordrawable代表颜色drawable,shapedrawable代表几何形状drawable
 
 onFinishInflate:这是一个回调方法,当应用从XML布局文件加载该组件并利用他来构建界面之后,该方法将会被调用
 onMeasure(int,int)调用该方法来检测View组件及它所包含的所有组件的大小
 onLayout(boolean,int,int,int,int)当该组件需要分配其子组件的位置大小时调用
 onSizeChange(int,int,int,int)
 onDraw(canvas)
 onKeyDown(int,KeyEvent)
 onKeyUp(int,KeyEvent)
 onTraceballEvent(MotionEvent)当发生轨迹球事件时触发该方法
 onTouchEvent()
 onWindowFocusChange()
 onAttachedToWindow()当把该组件放入某窗口时触发
 onDetachedFromWindow()当把该组件从某个窗口上分离时触发该方法
 onWindowVisibilityChanged(nt)当包含该组件的窗口的可见性发生改变时触发该方法
 
 
 LinearLayout:
   android:gravity设置布局管理器内组件的对齐方式
   android:measureWithLargestChild当该属性为true时,所有带权重的子元素都会具有最大子元素的最小尺寸
   LinearLayout中的子元素
   android:layout_gravity指定该子元素在LinearLayout中的对齐方式
   
 TableLayout:
   tableRow就是一个表格行。
   Shrinkable:如果某列被设为shrinkable,那么该列的所有单元格的宽度可以被收缩,以保证该表格能适应
   父容器的宽度
   strechable:如果某个列被设为strechable,那么该列的所有的单元格宽度可以被拉伸,以保证该组件能
   完全填满表格空余空间
   collapsed:该列的所有单元格会被隐藏
   
 FrameLayout:
   android:foreground:设置该帧布局容器的前景图像
   android:foregroundGravity:定义绘制前景图像的gravity属性
   
 RelativaLayout:
   android:gravity
   android:igonreGravity:设置哪个组件不受gravity属性的影响
   
 GridLayout:
   android:alignmentMode:设置该布局管理器采用的对齐模式
   android:columnCount:设置该网格的列数量
   android:columnOrderPreserved:设置该网格容器是否保留列序号
   android:rowCount:设置行数量
   android:rowOrderPreserved
   android:useDefaultMargins:设置是否使用默认的页边距
   
TextView:
   android:autoLink:是否将符合指定格式的文本转换为可单击的超链接形式
   android:autoText:控制是否将URL EMAIL地址等链接自动转换为可单击的链接
   android:capitalize:控制是否将输入的文本转换为大写字母
           none:
           sentences:每个句子的首字母大写
           words:每个单词首字母大写
           characters:每个字母都大写
   android:digits:设为true,则文本框对应一个数字输入法
   android:ellipsize:设置文本超过TextView的长度时如何处理
           none:
           start:在文本开始处截断,并显示省略号
           middle:在文本中间处截断
           end:在文本结尾处截断
           marquee:使用marquee滚动动画显示文本
   android:hint:设置文本框内容为空时,默认显示的提示文本
   android:imeActionId:当该文本关联输入法时,为输入法提供EditorInfo.actionId值
android:imeActionLabel:
android:imeOptions
android:inputMethod:为该文本框指定特定的输入法,该属性值为输入法的全限定类名
android:inputType:
   
 CheckedTextView:可勾选的文本框
 
 DigitalClock:继承了TextView,他本身是文本框,只是他里边显示的内容总是当前时间
 AnalogClock:继承View组件,他重写了View的OnDraw方法,他在View上会模拟时钟
    android:dial:设置表盘使用的图片
    android:hand_hour:时针使用的图片
    android:hand_minute:分针使用的图片
 
 Chronometer:计时器
 
 ImageView:
    android:adjustViewBounds:是否调整自己的边界来保持所显示图片的长宽比
    android:cropToPadding:设置该属性true,该组件将会被裁剪到保留该ImageView的padding
    
 ZoomButton:代表放大缩小按个按钮,默认提供了btn_minus btn_plus两个Drawable资源
 ZoomControls:相当于同时组合了放大缩小两个按钮
 
 AbsListView:
    android:choiceMode:选择行为
        none:
        singleChoice:允许单选
        multipleChoice
        multipleChoiceModal:
    android:drawSelectorOnTop:设为true,选中的列表项将会显示在上面
    android:fastScrollEnabled:设置是否允许快速滚动
    android:listSelector:指定选中的列表项绘制的Drawable
    android:scrollingCache:使用绘制缓存
    android:smoothScrollbar:如果设置为false,则不再header view之后绘制分割线
    android:stackFromBottom:是否是从底端开始排列列表项
    android:textFilterEnabled:是否对列表项进行过滤
    android:transcriptMode:设置滚动模式
         disabled:
         normal:当收到数据改变通知,且最后一个列表项可见时,将会滚动到底端
         alwaysScroll:总会自动滚动到底端
    
 AutoCompleteTextView:
    android:completionHint:设置下拉菜单中的提示标题
    android:completionHintView:设置下拉菜单中提示标题的试图
    android:completionThreshold:设置用户至少输入几个字符才会显示提示
    android:dropDownAnchor:设置下拉菜单的定位锚点
    android:dropDownHeight:设置下拉菜单的高度
    android:dropDownhorizontalOffset:设置下拉菜单与文本框之间的水平偏移
    android:dropDownVerticalOffset
    android:dropDownWidth
    android:popupBackground
 GridView:
    android:columnWidth
    android:gravity
    android:horizontalSpacing
    android:numColumns
    android:stretchMode:设置拉伸模式
    android:verticalSpacing
    
    拉伸模式:
      no_stretch
      stretch_spacing:仅拉伸元素之间的间距
      stretch_spacing_uniform:表格元素本身元素之间的间距一起拉伸
      stretch_column_width:仅拉伸元素表格元素本身
      
    
    ExpandableListView:
       ExpandableListAdapter
       
       android:childDivider指定各组内各子列表项之间的分割条
       android:childIndicator显示在子列表项旁边的Drawable对象
       android:groupIndicator显示在组列表现旁边的Drawable对象
       
 
Spinner:
   android:prompt设置该列表选择框的提示信息
   
Gallery:
   显示的是一个水平的列表选择框,允许用户通过拖动来查看上一个下一个列表现
   android:animationDuration设置图片切换时的动画持续时间
   android:gravity
   android:spacing
   android:unselectedAlpha设置没有选中图片的透明度
   
AdapterViewFlipper:
 继承了AdapterViewAnimator,它也会显示Adapter提供的多个View组件,但他每次只能显示一个
 View组件,程序可通过showPrevious和showNext方法控制该组件显示上一个和下一个组件
 android:animateFirstView设置显示该组件的第一View时是否使用动画
 android:inAnimation设置组件显示时使用的动画
 android:loopViews:设置循环到最后一个组件后是否自动转头到第一个组件
 android:outAnimation设置是否隐藏时使用的动画
 android:autoStart
 android:flipInterval:设置自动播放的时间间隔
 
ProgressBar:
 风格:
   @android:style/Widget.ProgressBar.Horizontal:水平进度条
   @android:style/Widget.ProgressBar.Inverse:普通大学的环形进度条
   @android:style/Widget.ProgressBar.Large:大环形进度条
   @android:style/Widget.ProgressBar.Large.Inverse
   @android:style/Widget.ProgressBar.Small
   @android:style/Widget.ProgressBar.Small.Inverse
   
   android:max
   android:progress:设置该进度条已完成的进度值
   android:progressDrawable
   android:indeterminate:设为true,进度条不精度显示进度
   android:indeterminate:持续时间
   
 SeekBar:
   android:thumb:指定一个Drawable对象,该对象将作为自定义滑块
   
 CalendarView:
    android:dateTextAppearance:设置日历视图的日期文字的样式
    android:firstDayOfWeek设置每周的第一天
    android:focusedMouthDateColor:设置获得焦点的日期文字的颜色
    android:maxDate
    android:minDate
    android:selectedDateVerticalBar
    
 Notification:
   Notification.Builder:
     setDefaults()设置通知LED灯音乐震动
     setAutoCancel()设置点击通知后,状态栏自动删除通知
     setContentTitle
     setContentText
     setSmallCon
     setLargeIcon
     setTick()提示文本
     setContentIntent()
     
 android:theme="@android:style/Theme.Dialog"
 
 PopupDialog:
 DatePickerDialog:
 TimePickerDialog:
 
委派式事件处理方式:普通组件将整个事件处理委托给特定的对象;当该事件源发生指定的事件时,
就通知所委托的事件监听器,由事件监听器来处理这个事件。
 
几乎所有基于回调的事件处理方法都有一个boolean类型的返回值,该返回值用于标识该处理方法是否
能完全处理该事件
如果处理事件的回调方法返回true,表示该处理方法已经完全处理该事件,该事件不会传播出去
如果处理事件的回调方法返回false,表示该处理方法并未完全处理该事件,该事件会传播出去。

Configuration:专门用于描述手机设备上的配置信息。
public float fontScale:获取当前用户设置的字体的缩放因子
public int keyboard:获取当前设置所关联的键盘类型。返回值:
  keyboard_nokeys  keyboard_qwerty(普通电脑键盘) keyboard_12key(只有12个键的小键盘)
public int keyboardHidden:返回一个boolean值用于标识当前键盘是否可用
public Locale locale:获取用户当前的locate
public int mcc:获取移动信号的国家码
public int mnc:获取移动信号的网络码
public int navigation:判断系统上方向导航设备的类型。返回值:
  navigation_nonav(无导航) navigaiton_dpad (dpad导航) navigation_trackball(轨迹球导航)
  navigation_wheel(滚动导航)
public int orientation:系统屏幕的方向,返回值:orientation_landscape(横向屏幕)
  orientation_portrait(竖向屏幕) orientation_square(方形屏幕)
public int touchscreen:获取系统触摸屏的触摸方式。返回值:
  touchscreen_notouch  touchscreen_stylus(触摸笔式的触摸) touchscreen_finger(手指)
  
为了能监听屏幕方向更改的事件,需要在配置Activity时指定android:configChanges属性
 
  
Message:handler接受和处理的消息对象
Looper:每个线程只能拥有一个Looper,他的loop方法负责读取MessageQueue中的消息,读到信息之后
就把消息交个发送该消息的handler进行处理
MessageQueue:消息队列,他采用先进先出的方式来管理Message。
  
handler:它的作用有两个--发送消息和处理消息,程序使用handler发送消息,被handler发送的消息
必须被发送到指定的MessageQueue.也就是说,如果希望handler正常工作,必须在当前线程中有一个
MessageQueue,否则消息就没有MessageQueue进行保存。
  UI线程中,系统已经初始化了一个Looper对象。
  自己启动的子线程必须创建一个Looper对象,并启动他。
 
线程中使用handler的步骤:
  调用Looper的prepair()方法为当前线程创建Looper对像。
  有了Looper后,创建handler
  调用Looper的loop方法启动Looper
  
AsyncTask<Params,Progress,Result>是一抽象类
 params:启动任务执行的输入参数的类型 doInBackground(params)中参数的类型
 progress:后台任务完成的进度值的类型  onProgressUpdate(progress)中参数的类型
 result:后台执行任务完成后返回结果的类型、onPostExecute(result)中参数的类型
 
 
  Intent:
    Action:代表intent要完成的一个抽象动作
    Category:用于为Action增加额外的附加类别信息
    利用Action和Category来刷选要启动的Activity
  系统提供的Action:
    android.intent.action.MAIN:应用程序入口
    android.intent.action.VIEW:显示指定数据
    android.intent.action.ATTACH_DATA:指定某块数据被附加到其他地方
                         .EDIT:编辑指定数据
                         .PICK:从列表中选择某块,并返回所选的数据
                         .CHOOSE:显示一个Activity选择器
                         .GET_CONTENT:让用户选择数据,并返回所选数据
                         .DIAL:显示拨号面板
                         .CALL:直接向指定用户打电话
                         .SEND:向其他人发送信息
                         .SENDTO:向其他人发送消息
                         .ANSWER:应答电话
                         .INSERT:插入数据
                         .DELETE:删除数据
                         .RUN:运行数据
                         .SYNC:执行数据同步
                         .PICK_ACTIVITY:用于选择Activity
                         .SEARCH:执行搜索
                         .WEB_SEARCH:执行web搜索
                         .FACTORY_TEST:工厂测试的入口
   Category:
      android:intent.category.DEFAULT
      android.intent.category.BROWSABLE:指定该Activity能被浏览器安全调用
      android.intent.category.TAB指定Activity作为tabActivity的tab页
      android.intent.category.LAUNCHER:Activity显示顶级程序列表中
      android.intent.category.INFO:用于提供包信息
      android.intent.category.HOME:设置该Activity随系统启动而运行
      android.intent.category.PREFERENCE:给Activity是参数面板
      android.intent.category.TEST:测试
      android.intent.category.CAR_DOCK
      android.intent.category.DEST_DOCK
      android.intent.category.CAR_MODE
      
   Data:用于向Action属性提供操作的数据。接受一个Uri对象
   Type:用于指定该Data所指定Uri对应的MIME类型,这种MIME类型可以是任何自定的MIME类型。
   如果先设置Data属性,后设置Type属性,那么Type属性会覆盖Data属性
   反之亦然
   如果希望既有Data,也有Type,使用setDataAndType()方法
   
 Data的属性:
   mimeType:
   scheme:
   host:
   port:
   path:
   pathPrefix:
   pathPattern:用于声明该组件所能匹配的Intent的Data属性的path字符串模板
系统提供的组合:
   Action_View+content://com.android.contacts/contacts/1
   Action_Edit  content://com.android.contants/contants/1
   Action_Dial  content://com.android.contants/contants/1
   Action_View  tel:123
   Action_Dial  tel:123
   Action_View  content://contants/people/显示所有联系人列表的信息。
   
   
Flag:
   flag_activity_brought_to_front:下次再启动时,将该Activity带到前台
   flag_activity_clear_top:
   flag_activity_new_task
   flag_activity_no_animation:不使用过度动画
   flag_activity_no_history:不会保留在栈中
   flag_activity_peorder_to_front:如果已有Activity,则直接带到前台 
   flag_activity_single_top
   
   
ShapeDrawable:
     rectangle:
     oval:
     line:
     ring;
        corners:定义几何图形的四个角的弧度
        gradient:敌营使用渐变颜色填充
        padding:定义几何形状的内边距
        size:定义几何形状的大小
        solid:定义使用单种颜色填充
        stroke:定义为几何形状绘制边框
        
   ClipDrawable:从其他位图上截取的一个图片片段
   
   AnimationDrawable:代表一个动画,xml放在anmi下
  补间动画:
   alpha:
   scale:
   translate:
   rotate:旋转   
AnimationUtils.loadAnimation(context,int)取得Animation对象
 
 
属性动画:
  Animator代表一个属性动画,是抽象类,其子类有:
    AnimatorSet,ValueAnimator,ObjectAnimator,TimeAnimator
 
XmlResourceParse getXml(int)返回XML文档,并使用一个XmlPullParse解析XML文档。android内置了
pull解析。  

原始资源:
位于/res/raw目录下,android会再R清单类中为该目录下的资源生成一个索引项
位于/assets/目录下,该目录下的资源是更彻底的原始资源,android应用需要使用AssetManager来管理
 


values-语言代码-r国家代码  实现国际化

SharedPreferences是一个接口,只能通过context.getSharedPreferences(String name,int mode)获取
Mode的参数:
  Context.MODE_PRIVATE:只能被本应用程序读取
  Context.MODE_WORLD_READABLE:能被其他程序读,但不能写
  Context.MODE_WORLD_WRITEABLE:能被其他程序读写

创建其他应用程序的Context
context=createPackageContext(包名,Context.CONTEXT_IGNORE_SECURITY);

Android为路径绘制提供了PathEffect来定义绘制效果,PathEffect的子类:
   ComposePathEffect:
   CornerPathEffect:
   DashPathEffect
   DiscretePathEffect
   PathDashPathEffect
   SumPathEffect
   
drawTextOnPath(String,Path,hOffset,vOffset,paint):沿着Path绘制文本

逐帧动画:AnimationDrawable
animation-list:
  android:oneshot;是否循环播放,true,不会循环播放。
     
AnimationDrawable:
  start()
  stop()
  
补间动画 Tween:
  Animation:代表抽象的动画类,他包括如下几个子类:
      AlphaAnimation:透明度,0-1
      ScaleAnimatino:大小缩放的动画,需要指定缩放动画时的缩放中心坐标pivotX,povitY
      TranslateAnimation:位移变化的动画。
      RotateAnimation:旋转动画,需要指定旋转中心pivotX,pivotY
      
 Interpolator是一接口,他定义了所有Interpolator都需要实现的方法:float getInterpolation
     LinearInterpolator
     AccelerateInterpolator
     AccelerateDecelerateInterpolator
     CycleInterpolator
     DecelerateInterpolator
 
 定义补间动画需要继承Animation,需要重写applyTransformation(float interpolatedTime,Transformation t)
     interpolatedTime:代表了动画的时间进行比。不管动画实际的持续时间如何,当动画
     播放时,该参数总是自动从0变化到1
     Transformation:代表了补间动画在不同时刻对图形或组件的变形程度
 Camera:空间变形工具,类似于Matrix
    getMatirx(Matrix)将camera所做的变形应用到指定matrix上
    rotateX(float)
    rotateY
    rotateZ
    translate(x,y,z)在三位空间进行移位变形
    applyToCanvas(canvas)把camera所做的变形应用到canvas上
    
View绘图机制存在的缺陷:
    View缺乏双缓冲机制
    当程序需要更新View上的图像时,程序必须重绘View上的整张图片
    新线程无法直接更新View组件
SurfaceView绘制机制:
    SurfaceView一般会与SurfaceHolder结合使用,SurfaceHolder用于向与之关联的surfaceView
    上绘图,调用surfaceview的getHolder方法即可获取surfaceview的surfaceholder
SurfaceHolder提供了获取canvas的方法:
    lockCanvas()锁定整个surfaceview对象,获取该surface上的canvas
    lockCanvas(Rect)锁定SurfaceView上Rect划分的区域,获取该canvas
    
 unlockCanvasAndPost(canvas)


手势:
 GestureDector类:创建时需要传入一个GestureDetector.OnGestureListener实例。
    onDown(MotionEvent e):当触碰事件按下时触发
    onFling(MotionEvent,MotionEvent,float velocityX,float velocityY)当用户在屏幕上拖过
    时触发,velocityX velocityY代表拖过动作在横向和纵向的速度
    abstract void onLongPress(MotionEvent)长按时触发
    onScroll(MotionEvent,MotionEvent,float distanceX,float distanceY)在屏幕上滚动式触发该方法
    onShowPress(MotionEvent e)当用户在触摸屏上按下,而且还未移动和松开时触发
    onSingleTagUp(MotionEvent e)轻击事件将会触发
    
android使用GestureLibrary代表手势库,提供了静态方法从不同的位置加载手势库
    GestureLibrary fromFile(String path)
                   fromFile(File file)
                   fromPrivateFIle(Context,string name)从程序数据文件夹中name文件中加载
                   fromRawResource(Context,int resourceId)


  addGesture(String entryName,Gesture gesture)
  getGestureEntries()
  getGestureEntries(name)
  recognize(Gesture)从当前手势库中识别与gesture匹配的全部手势
  removeEntry(Strin entryname)
  removeGestrue(string entryName,Gesture gestrue)
  save()
  
android.gesture.GestureOverlayView话手势

ContentProvider:
    ContentProvider以某种Uri的形式对外提供数据,允许其他应用程序访问或修改数据,其他应用程序
    使用ContentResolver根据Uri去访问操作指定的数据
开发ContentProvider的步骤:
    定义ContentProvider类,继承ContentProvider基类
    注册:<provider android:name="" android:authorities="" android:exported="true"/>
    
    String String getType(Uri rui)用于返回当前Uri所代表的数据的MIME类型,多条数据vnd.android.cursor.dir/
    一条数据vnd.android.cursor.item/
    
Uri:
content//:org.crazyit.provider.dictprovider/words

content://协议
org.crazyit.provider.dictprovider是ContentProvider的authority。
words:资源部分

Uri.parse(String)将string转换成Uri
UriMatch:处理Uri
   void addURI(String authority,String path,int code)向UriMatch注册Uri。code则代表该Uri所对应的标识码
   int match(Uri uri)根据前面注册的Uri来判断指定Uri对应的标志码,若找不到,返回-1
   
ContentUris工具类:操作Uri字符串的工具类
   withAppendedId(uri,id)为路径加上ID部分
   parseId(uri)用于从指定Uri中解析出所包含的ID值
   
android系统对联系人管理ContentProvider的几个Uri
   ContactsContract.Contracts.CONTENT_URI:管理联系人的URI
   ContactsContract.CommonDataKinds.Phone.CONTENT_URI:管理联系人的电话号码
   contactsContract.CommonDataKinds.Email.CONTENT_URI:管理联系人的EMail
   需要注册读写联系人的权限android.permission.READ_CONTACTS android.permission.WRITE_CONTACTS
   
android为多媒体提供的ContentProvider的Uri:
   MediaStore.Audio.Media.EXTERNAL_CONTENT_URI:存储在外部存储器上的音频内容
   MediaStore.Audio.Media.INTERNAL_CONTENT_URI:存储在内部存储器上的音频内容
   MediaStore.Images.Media.EXTERNAL_CONTENT_URI
   MediaStore.Images.Media.INTERNAL_CONTENT_URI
   MediaStore.Video.Media.EXTERNAL_CONTENT_URI
   MediaStore.Video.Media.INTERNAL_CONTENT_URI
      
ContentObserver:监听器
   registerContentObserver(Uri,boolean,ContentObserver)
     uri:
     boolean:如果参数是true,uri为conten://abc,那么uri为conten//abc,content//:abc/xyz都会
     触发
     ContentObserve:监听器
     
Service:
   startService()启用Service,访问者与service没有关联,即使访问者退出了,service扔会运行
   bindService(),访问者与service绑定在一起,访问者退出,service也终止
   
   
  当Activity调用bindService()绑定一个已启动的service时,系统只是把service内部IBinder传递给Activity
  并不会把service生命周期绑定到该Activity,因此当Activity调用unBindSerice()方法取消时,也只是
  切断Activity与service之间的关联,不能停止该service
  
Service存在的两个问题:
   Service不会专门启动一条单独的线程,Service与它所在的应用位于同一进程中
   Service也不是专门一条线程,因此不能直接处理耗时任务
   
 IntentSerivce:
    IntentService会创建单独的worker线程来处理所有的Intent请求
    IntentService会创建单独的worker线程来处理onHandleIntent()方法实现的代码,无需处理多线程问题
    当所有请求处理完后,IntentService会自动停止。
    为onBind,onStartCommand提供了默认实现
 创建service时只需要继承此类就行,在onHandlerIntent(intent)处理操作
 
 TelephonyManager:是一个管理手机状态、电话网络信息的服务类
 PhoneStateListener是一个通话状态监听器,用于对TelephonyManager进行监听
 teleManager.listenr(PhoneStateListener,PhoneStateListener.LISTEN_CALL_STATE);
 还需要注册权限android.permission.READ_PHONE_STATE
 
 SmsManager是短信管理器,调用sendTextMessage()可发送短信
 PendingIntent是对Intent的包装,一般通过PendingIntent的getActivity,getService,getBroadcastReceiver
 静态方法来获取PendingIntent对象,与intent对象不同的是PendingIntent通常会传给其他应用组件,从而
 其他应用程序来执行pendingintent所包装的Intent
 权限;android.permission.SEND_SMS
 
 AudioManager:音频管理
   adjustStreamVolume(int streamType,int direction,int flag)调整手机指定类型的声音。streamType接受
   的声音类型:
        STREAM_ALERT:闹铃
        STREAM_DTMF:DTMF音调的声音
        STREAM_MUSIC:手机音乐
        STREAM_NOTIFICATION:系统提示音
        STREAM_RING:手机铃声
        STREAM_SYSTEM:手机系统的声音
        STREAM_VOICE_CALL:语音电话的声音
     第二个参数指定对声音进行增大还是减小。第三个参数是调整声音时的标志
     
    setMicrophoneMute(boolean on)设置是否让麦克风静音
    setMode(int mode)设置声音模式,有normal,ringtone,in_call
    setRingerMode(int ringerMode)设置手机的电话铃声的模式。
          RINGER_MODE_NORMAL:正常
          RINGER_MODE_SILENT:静音
          RINGER_MODE_VIBRATE手机震动
          
    setSpeakerphoneOn(boolean on)是否打开扩音器
    setStreamMute(int streamType,boolean state)将手机的指定类型的声音调整而我静音。
    setStreamVolume(int streamType,int index,int flags)直接设置手机的指定类型的音量值
   
   Vibrator:震动管理器
       vibrate(long milliseconds)震动多少秒
       vibrate(long[] pattern,int repeat)指定手机以pattern指定的模式震动
       cancel()
   权限:android.permission.VIBRATE
   
   AlarmManager:手机闹钟服务,他本质是一个全局的定时器,alertmanager可在指定时间或指定周期启动
   其他组件
   
      set(int type,long triggerAtTime,PendingIntent operation)
        type:
           elapsed_realtime:指定从现在开始过了一定时间后启动operation对应的组件
           elapsed_realtime_wakeup:指定从现在过了一定时间后启动opertion所对应的组件,即使系统关机
           rtc:指定当系统调用System.currentTimeMillis方法返回值与triggerAtTime相等时启动
           rtc_weakup:
      setInexactRepeating(int type,long triggerAtTime,long interval,PendingIntent operation)
      设置一个非精确的周期性任务
      setRepeating(int,long,long,pendingIntent)设置一个周期性执行的定时服务
      cancel(pendingintent)取消
      
   WallpaperManager:壁纸管理
       setBitmap(bitmap)
       setResource(int)
       setStream(inputStream)
       clear()
       权限:android.permission.SET_WALLPAPER
       
  BroadcastReceiver:本质上是一系统级监听器
    IntentFilter filter=new IntentFilter();
    registerReceiver();
    或者在配置文件中配置
    
   Normal Broadcast(普通广播):是完全异步的,可以在同一时刻被所有接受者收到,消息传递的效率比较
   高。但是缺点是接受者不能讲结果传递给下一个接受者,并且无法终止Broadcast intent的传播
   Ordered Broadcast(有序广播):有序广播的接受者将按预先声明的优先级依次接收Broadcast.优先级声明
   在<intent-filter>元素的android:priority属性中,数越大优先级越高,取值范围-1000-1000,优先级
   也可以调用setPriority设置。接收者可以终止Broadcast intent的传播,一旦终止,后边的就无法接收到
   另外,接受者可以将数据传递给下一个接受者
     setResultExtras(Bundle)将结果存入broadcast
     getResultExtras(true)获取结果
          
   系统广播:
     action_time_changed:系统时间被改变
     action_date_changed:系统日期被改变
     action_timezone_changed:系统时区被改变
     action_boot_completed:系统启动完成
     action_package_added:系统添加包
     action_package_changed:系统的包改变
     action_package_removed:系统包被删除
     action_package_restarted:系统的包被重启
     action_package_data_cleared:系统的包数据被清空
     action_battery_changed:系统电量改变
     action_battery_low:系统电量低
     action_power_connected:系统连接电源
     action_power_disconnected:系统与电源断开
     action_shutdown:系统被关闭
     action.provider.Telephony.SMS_RECEIVED接收短信
    访问系统开机事件,还需增加权限:
       android.permission.recceive_boot_completed
   
   MediaPlayer:
     start()
     stop()
     pause()
     static MediaPlayer create(Context context,Uri uri)从指定Uri来装载音频文件
     static MediaPlayer create(Context,int)从资源ID装载音频文件
  如果需要循环播放多个音频文件:
    setDataSource(String path)
    setDataSource(FileDescriptor fd,long offset,long length)
    setDataSource(FileDescriptor)
    setDataSource(Context ,Uri)
    使用上边的方法后,并未真正的装载,还需调用prepair()方法去准备
    
  播放应用的原始资源文件:
    调用getAssets()获取AssetManager
    调用AssetManager对象的openFd(String name)返回AssetFileDescriptor对象
    调用AssetFileDescriptor的getFileDescriptor getStartOffset getLength方法
    setDataSource()
    prepare()
    start pause stop
 播放外部存储器上的音频文件:
   setDataSource(String path)
 播放来自网络的音频文件
   create() setDataSource()
   
 URLConnection:
    通过调用URL对象openConnection()方法来创建URLConnection
    设置URLConnection的参数和普通请求属性
    如果只是发送get请求,使用connect方法建立和远程资源之间的实际连接即可。如果发送post请求,需要
    获取URLConnection实例对应的输出流来发送请求参数
    远程资源变为可用,程序可以访问远程资源的头文件,或通过输入流读取远程资源的数据
 设置头字段:
    setAllowUserInteraction:设置allowUserInteraction请求头子段的值
    setDoInput:
    seDoOutput:
    seIfModifiedSince
    setUseCache:
    setRequestProperty(String key,String value)
    addRequestProerty()
 当远程资源可用之后,程序可以使用以下方法用于访问字段和内容
    getContent()
    getHeaderField(String name)
    getInputStream
    getOutputStream()
 HttpURLConnectio:继承了URLConnection:
    int getResponseCode():获取服务器的响应代码
    String getResponseMessage():获取服务器的响应消息
    String getRequestMethod():获取发送请求的方法
    void setRequestMethod(String method)设置发送请求的方法
          
HttpClient:
    创建HttpClient对象
    如果需要发送get请求,创建HttpGet,如果需要发送Post请求,创建HttpPost请求
    如果需要发送请求参数,可调用setParams(HttpParmas),对HttpPost,也可调用setEntity(HttpEntity)
    调用HttpClient对象的execute(HttpUriRequest)发送请求,返回HttpResponse
    调用HttpResponse的getAllHeaders()getHeaders(String name) getEntity()
 通过HttpClient来访问被保护页面,程序同样需要使用HttpClient来登录系统,只要应用程序
 使用同一个HttpClient发送请求,HttpClient会自动维护与服务器之间的Session状态,也就是说
 程序第一次使用HttpClient登录系统后,接下来使用HttpClient即可访问被保护的页面了
         
WebView:
   getBack()
   getForward()
   loadUrl(String url)加载指定URL对应的网页
   boolean zoomIn()放大网页
   boolean zoomOut()缩小网页
   loadData(String data,String mimeType,Strng encoding)用于加载并显示HTML代码,有一个问题
   就是加载包含中文的HMTL内容时,webview会显示乱码
   loadDataWithBaseURL(String baseUrl,String data,String mimeType,String encoding,String historyUrl)
   与loaData类似,但不会产生乱码
       data:指定需要加载的HTML代码
       mimeType:指定html代码的MIME类型,对于HTML代码可指定为text/html
       encoding:指定HTML代码编码所用的字符集
  webview中的JavaScript调用android方法:
       调用web view关联的WebSettings的setJavaScriptEnabled(true)启用JavaScript功能
       调用webView的addJavaScriptInterface(Object,String)将object暴漏给JavaScript
       在JavaScript脚本中通过刚才暴漏的name调用android的方法
       
  Web Service:
      web service平台主要涉及的技术有soap wsdl uddi
   SOAP:Simple Object Access Protocol简单对象访问协议,是一种具有可扩展性的XML消息协议
   SOAP允许一个应用程序向另一个应用程序发送XML消息,SOAP消息是从SOAP发送者传至SOAP接收者
   的单路消息,任何应用程序均可作为发送者或者接受者。SOAP仅定义消息结构和消息处理的协议
   与底层的传输协议独立,因此SOAP协议能通过HTTP,JMS或SMTP协议传输
   XML文档:
     必须的<Envelope .../>根元素,SOAP消息对应的XML文档以该元素作为根元素
     可选的<Header > 包含SOAP消息的头信息
     必须<Body ../>包含所有的调用和响应信息
   WSDL:web service description language,web service描述语言,使用XML描述service,包括访问和
   使用web service所必须的信息,定义该web service的位置、功能及如何通信等描述信息
   一般来说,只要调用者能够获取web service对应的wsdl,就可以从中了解他的服务及如何调用web service
    what部分:
    how部分:
    where部分:  
 UUID:universal description,Description and Integration,统一描述、发现和整合协议。是一套信息
 注册规范。有以下特点:
    基于web
    分布式
    UDDI包括一组允许企业向外注册web service以使其他企业发现访问的实现标准。UDDI的核心组件时
    UDDI注册中心,他使用XML文件来描述企业及其提供的web service.
    通过使用UDDI,web service提供者可以对外注册web service,从而允许其他企业来调用该企业注册的
    web service.web service提供者通过UDDI注册中心的web界面,将他所提供的web service的信息假如
    UDDI注册中心。该web service就可以被发现和调用。
    web servicce 使用者也通过UDDI注册中心查找发现自己所需要的服务。当web service使用者找到自己所需的服务后
    可以将自己绑定到指定的web service提供者,在根据该web service对应的WSDL文档来调用对方的服务
    
    ksoap2-android,谷歌提供的jar包
    
   传感器:
        调用Context的getSystemService(Context.SENSOR_SERVICE)方法获取SensorManager对象,SensorManager
        对象代表系统的传感器管理服务
        调用sensorManager的getDefaultSensor(int type)方法获取指定类型的传感器
        通常选在在Activity的OnResume()方法调用SensorManager的registerListener()未指定的传感器注册
        监听即可
        registerListener(SensorEventListener listener,Sensor sensor,int rate)
        listener:
        sensor:
        rate:指定获取传感器数据的频率
        SensorManager.SENSOR_DELAY_FASTEST:最快,延迟最小,只有特别依赖于传感器数据的应用
        推荐采用这种频率 
        SensorManager.SENSOR_DELAY_GAME:适合游戏的频率,在一般实时性要求的应用上适合使用
        SensorManager.SENSOR_DELAY_NORMAL:正常频率,一般是实现要求不是特别高的应用上适合这种频率
        SensorManager.SENSOR_DELAY_UI:适合普通用户界面的频率。这种模式比较省电,而且系统开销
        也很小,但延迟较大,因此只适合在普通小程序中使用
        SensorEventListener接口:
          onSensorChanged()当传感器的值放生改变时触发该方法
          onAccuracyChanged()当传感器的精度发生改变时触发该方法
          sensorEvent对象的values()方法来获取传感器的值。不同的传感器所返回的值的个数是不同的
        传感器的坐标系统与屏幕坐标系统不同,传感器坐标系统的x轴沿屏幕向左,y轴则沿屏幕向上,
        z轴则垂直于屏幕向里。
      GPS:
        LocationManager类,所有GPS定位相关的服务,对象都将由该对象产生。
  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使鱼香肉丝与图片居中对齐,可以对LinearLayout进行一些调整。请使用以下代码替换你提供的代码: ```xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:paddingLeft="5dp" android:paddingRight="5dp" android:paddingTop="-90dp" android:paddingBottom="10dp" android:weightSum="1" > <!-- 菜品布局 --> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:layout_marginLeft="10dp" android:gravity="center" > <ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:scaleType="centerCrop" android:src="@drawable/recipe_defult_img" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:gravity="center_horizontal" > <TextView android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="50dp" android:singleLine="false" android:text="鱼香肉丝" android:textColor="@color/black" android:textSize="12sp" /> </LinearLayout> </LinearLayout> ``` 在内部的LinearLayout中,我们添加了一个`android:gravity="center"`属性来使ImageView居中对齐。同时,在外层的LinearLayout中,我们添加了`android:gravity="center_horizontal"`属性来使TextView水平居中对齐。这样,鱼香肉丝与图片就会居中对齐了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值