Android我爱编程

Android基础知识——完善

2016-05-17  本文已影响2808人  布鲁马

疯狂Android摘要,Android基础知识好乱好乱,一团浆糊。配合自己过去在CSDN写的这下应该是全了吧...

1.编码之前

<1>.Android运行时由ART和Android核心库集组成,由于Dalvik虚拟机采用 JIT(Just-in-time)解释器进行动态编译,导致App运行比较慢。ART模式 :是用户安装App时进行编译(Ahead-of=time,简称AOT )从而减少动态编译上的开销,提升Android中应用的运行效率。另外ART还支持ARM、x86、MIPS架构,并且完全兼容64位操作系统

<2>.Android建立在Linux2.6之上

<3>.android.bat工具

<4>.Montior面板使用进行调试

<5>.Ant工具,是一个简洁易用的项目生成工具。下载点:【http:\ant.apache.org/bindownload.cig 】需要配置
Java_Home和Ant_Home环境变量

<6>.R文件 是由AAPT工具根据应用中的资源文件自动生成的,就是Android应用的资源字典

<7>.应用签名

<8>.手动签名步骤(注:JDK中自带签名工具 keytool.exe )

步骤一:手动生成签名文件:keytool -genkeypair -alias doing -keyalg RSA -validity 400 -keystore doing.jks

步骤二:生成一个未签名的apk文件通过AS,并且未签名文件是【app-release-unaligned.apk】

步骤三:手动签名应用:jarsigner -verbose -keystore doing.jks -signedjar HelloWorld_doing.apk app-release-unaligned.apk doing

2.布局组件

<1>.ViewGroup.LayoutParams(布局管理器参数)一般控件通过setLayoutParam()设置布局参数,位置参数通过这个类来设置,如width、height、weight、gravity等

android:layout_height : 指定该子组件的布局高度
android:layout_width : 指定该子组件的布局宽度

<2>.ViewGroup.MarginLayoutParams(组件四周的留白)

android:marginBottom、marginLeft、marginTop、marginRight        setMargins(int,int,int,int);    指定该组件的外边距

<3>.布局管理器

布局参数

android:baseLineAligned-->setBaseLineAligned(boolean)-->该属性设为false,将会阻止该布局管理器与它的子元素的基线对齐
android:divider-->setDividerDrawable(Drawable)-->设置垂直布局时两个按钮之间的分隔条
android:gravity-->setGravity(int)-->设置布局管理器内组件的对其方式。该属性支持top、bottom、left、right、center_vertical、fill_vertical、center_horizontal、fill_horizontal、center、fill、clip_vertical、clip_horizontal。可以指定多种对齐方式,如left|clip_vertical,代表在屏幕左边,并且上下居中,内容太长超出父容器会裁剪
android:measureWithLargestChild-->setMessureWithLargestChildEnabled(boolean)    -->当该属性为true时,所有带权重的子元素都会具有最大子元素的最小尺寸
android:orientation-->setOrientation(int)-->设置布局管理器内组件的排列方式,horizontal、vertical

LinearLayout.LayoutParams

android:gravity             指定该子元素在LinearLayout中的对其方式
android:layout_weight        指定该子元素在LinearLayout中的所占的权重

布局参数

android:collapseColoumns    setColumnCollapsed(int,boolean)        设置需要被隐藏列的序号,多个列号之间用逗号隔开
android:shrinkColumns        setShrinkAllColumns(boolean)        设置允许被收缩列的序号,多个列序号之间用逗号隔开
android:strechColumns        setStrtchAllColumns(boolean)        设置允许被拉伸列的序号,多个列序号之间用逗号隔开

布局参数

android:foreground                setForeground(Drawable)            设置该帧布局容器的前景图像
android:foregroundGravity        setForegroundGravity(int)        定义绘制前景图像的gravity属性

布局参数

android:gravity             setGravity(int)                设置该布局容器内各子组件的对齐方式
android:ignoreGravity        setIgnoreGravity(int)        设置哪个组件不受gravity属性的影响

RelativeLayout.LayoutParams

android:layout_centerHorizontal            控制该子组件是否位于布局容器的水平居中(boolean)
android:layout_centerVertical            控制该子组件是否位于布局容器的垂直居中(boolean)
android:layout_centerInParent            控制该子组件是否位于布局容器的中央位置(boolean)
android:layout_alignParentBottom        控制该子组件是否位于布局容器底端对齐(boolean)
android:layout_alignParentLeft             控制该子组件是否位于布局容器左边对齐(boolean)
android:layout_alignParentRight         控制该子组件是否位于布局容器右边对齐(boolean)
android:layout_alignParentTop            控制该子组件是否位于布局容器顶端对齐(boolean)
android:layout_toRightOf                控制该子组件位于给出ID组件的右侧(int 类型ID值)
android:layout_toLeftOf                    控制该子组件位于给出ID组件的左侧(int 类型ID值)
android:layout_above                    控制该子组件位于给出ID组件的上方(int 类型ID值)
android:layout_below                    控制该子组件位于给出ID组件的下方(int 类型ID值)
android:layout_alignTop                 控制该子组件与给出ID组件的上边界对齐(int 类型ID值)
android:layout_alignBottom                 控制该子组件与给出ID组件的下边界对齐(int 类型ID值)
android:layout_alignLeft                 控制该子组件与给出ID组件的左边界对齐(int 类型ID值)
android:layout_alignRight                 控制该子组件与给出ID组件的右边界对齐(int 类型ID值)

布局参数

android:alignmentMode             setAlignmentMode(int)                设置该布局管理器采用的对齐方式
android:columnCount                setColumnCount(int)                    设置该网格的列数量
android:columnOrderPreserved    setColumnOrderPreserved(boolean)    设置该网格容器是否保留列序号
android:rowCount                setRowCount(int)                    设置给网格的行属性
android:rowOrderPreserved        setRowOrderPreserved(boolean)        设置该网格容器是否保留行序号
android:useDefaultMargins        setUseDefaultMargins(boolean)        设置该布局管理器是否使用默认的页边距

GridLayout.LayoutParams

android:layout_column                            设置该子组件在GridLayout的第几列
android:layout_columnSpan                        设置该子组件在GridLayout横向上跨几行
android:layout_gravity        setGravity(int)        设置该子组件采用何种方式占据该网络的空间
android:layout_row                                设置该子组件在GridLayout的第几行
android:layout_rowSpan                             设置该子组件在GridLayout纵向上跨几行

示例代码:(计算器页面实现)

<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:rowCount="6"        //6行
    android:columnCount="4"        //4列
    android:id="@+id/root"
    />
    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_columnSpan="4"        //横跨4列
        android:textSize="50sp"
        android:layout_marginLeft="2dp"
        android:layout_marginRight="2dp"
        android:padding="3dp"
        android:layout_gravity="right"
        android:background="#eee"
        android:textColor="#000"
        android:text="0"
    />
    <Button
        android:layout_widht="match_parent"
        android:layout_height="wrap_content"
        android:layout_columnSpan="4"
        android:text="清除"
    />
</GridLayout>

public class MainActvity extends Activity{

    String[] chacBuf = new String[]{"7","8","9","÷","4","5","6","x","1","2","3","-",".","0","=","+"};

    public void onCreat(Bundle saveInstanceState){
        super.onCreat(savedInstanceState);
        setContentView(R.layout.main);
        GridLayout gridLayout = (GridLayout)findViewById(R.id.root);
        for(int x=0; x<chacBuf.length ; x++){
            Button btn = new Button(this);
            btn.setText(chacBuf[x]);
            btn.setTextSize(40);
            btn.setPadding(5,35,5,35);
            //设置按钮的位置,第一列第几行,通过LayoutParams设置给该按钮
            GridLayout.Spec columnSpec = GridLayout.spec(i % 4);
            GridLayout.Spec rowSpec = GridLayout.spec(i / 4 + 2);
            GridLayout.LayoutParams params = new GridLayout.LayoutParams(rowSpec,columnSpec);
            params.setGravity(Gravity.FILL);
            gridLayout.addView(btn,params);
        }
    }
}

3.UI组件

习惯把变化小,行为比较固定的组件放在XML布局文件中管理;而那些变化多行为控制比较复杂的组件泽交给Java代码来管理。

2.TextView体系详解.jpg

<1>.Switch

android:checked                    setChecked(boolean)                设置该开关是否被选中
android:switchMinWidth            setSwitchMinWidth(int)                设置快关的最小宽度
android:switchPadding            setSwitchPadding(int)                    设置开关与标题文本之间的空白
android:switchTextAppearance    setSwitchTextAppearance(Context,int)    设置该开关图标上的文本样式
android:textOff                    setTextOff(CharSequence)                设置该开关的状态关闭时显示的文本
android:textOn                    setTextOn(Charsequence)                    设置该快关的状态打开时显示的文本
android:textStyle                setSwitchTypeFace(Typeface)                设置开关的文本风格
android:thumb                    setThumbResource(int)                    指定使用自定义Drawable绘制该开关的开关按钮
android:track                     setTrackResource(int)                    指定使用自定义Drawable绘制该开关的开关轨道
android:typeface                 setSwitchTypeface(TypeFace)                设置开关的文本的字体风格

<2>.TextClock

android:format12Hour    setFormat12Hour(Charsequence)    设置该时钟的12小时制的格式字符串
android:format23Hour    setFormat24Hour(Charsequence)    设置该时钟的24小时制的格式字符串
android:timeZone        setTimeZone(String)                设置该时钟的时区

<3>.AnalogClock

android:dial             设置该模拟时钟的表盘使用的图片
android:hand_hour        设置该模拟时钟的时针使用的图片
android:hand_minute        设置该模拟时钟的分针使用的图片

<4>.Chronometer

setBace(long base)             设置计时器的起始时间
setFormart(String format)    设置显示时间的格式
start()                        开始计时
stop()                        停止计时
setOnChronometerTickListener(Chronometer.OnChronometerTickListener listener)     为计时器绑定事件监听器,当计时器改变时触发该监听器

<5>.ImageView

3.ImageView体系详解.jpg
android:adjustViewBounds    setAdjustViewBounds(boolean)    设置ImageView是否调整自己的边界来保持所显示图标的长宽比
android:cropToPadding        setCropToPadding(boolean)        如果将该属性设置为true,改组件将会被裁剪到保留该ImageView的padding
android:maxHeight            setMaxHeight(int)                设置ImageView最大高度
android:maxWidth            setMaxWidth(int)                设置ImageView最大宽度
android:src                 setImageResource(int)            设置ImageView所显示的Drawable对象
android:scaleType            setScaleType(ImageView.ScaleType)    设置显示的图片如果缩放或者移动来适应的ImageView的边界

<6>.AbsListView

4.AdapterView体系结构.jpg 5.Adapter体系结构.jpg
android:choiceMode                                                设置AbsListView的选择行为。none:不显示任何选中项;singleChoice:允许单选;multipleChoice:允许多选
android:drawSelectorOnTop    setDrawSelectorOnTop(boolean)        如果该属性设置为true,选中的列表项将会显示在上边
android:fastScrollEnabled                                        设置是否允许快速滚动。如果该属性设置为true,将会显示滚动图标,并允许用户拖动该滚动图标进行快速滚动
android:listSeletor            setSelector(int)                    指定被选中的列表项绘制的Drawable
android:scrollingCache                                            如果设置为ture,该组件在滚动时将会使用绘制缓存
android:smoothScrollbar        setSmoothScrollbarEnable(boolean)    如果设置为false,则不在headerView之后绘制分隔条
android:stackFromBotton                                            设置是否从底端开始排列列表项
android:textFilterEnable                                        设置是否对列表项进行过滤。当该AbsListView对应的Adapter实现了Filter接口时该属性才会起作用
android:transcriptMode                                            设置该组件的滚动模式。disable:关闭滚动,这是默认值;normal:当该AbsListView收到数据改变通知,且租后一个列表项可见时,该AbsListView将会滚动到低端;alwaysScorll:该AbsListView总会自动滚动到低端

<7>ListView

android:divider                     设置List列表项的分隔条(可以使用颜色或则Drawable对象)
android:dividerHeight                设置分隔条的高度
android:entries                        指定一个数组资源,Android 将根据该数组资源来生成ListView
android:footerDividersEnable        如果设置为false,则不在footer view之间绘制分隔条
android:headerDividersEnable        如果设置为false,则不在header view之间绘制分隔条

<8>.GridView

android:columnWidth            setColumnWidth(int)            设置列的宽度
android:gravity             setGravity(int)             设置对其方式
android:horizontalSpacing    setHorizontalSpacing(int)    设置个元素之间的水平间距
android:numColumns            setNumColunms(int)            设置列数
android:stretchMode            setStretchMode(int)            设置拉伸模式。NO_STRETCH:不拉伸;STRETCH_SPACING:仅拉伸元素之间的间距;STRETCH_SPACING_UNIFORM:表格元素本身、元素之间的间距一起拉伸;STRETCH_COLUMN_WIDTH:仅拉伸表格元素本身
android:verticalSpacing        setVerticalSpacing(int)        设置各元素之间的垂直间距

<9>.AutoCompleteTextView:提示文本框

android:completionHint            setCompletionHint(Charsequence)        设置下拉菜单中的提示标题
android:completionHintView                                            设置下拉菜单中提示标题的视图
android:completionThreshold        setThreshold(int)                    设置用户至少输入几个字符才会显示提示
android:dropDownAnchor            setDropDownAnchor(int)                设置下拉菜单的定位"锚点"位置,如果没有指定该属性,将使用该TextView本身作为"锚点"组件
android:dropDownHeight            setDropDownHeight(int)                设置下拉菜单的高度
android:dropDownHorizontalOffset                                    设置下拉菜单与文本框之间的水平偏移,默认与文本框左对齐
android:dropDownVerticalOffset                                        设置下来菜单与文本框之间的垂直偏移,默认紧跟文本框
android:dropDownWidth            setDropDownWidth                    设置下拉菜单的宽度
android:popupBackGround            setDropDownBackgroundResource(int)    设置下来菜单的背景

<10>.ExpandableListView

6.ExpandableListAdapter体系结构.jpg
android:childDivider        指定各组内个子列列表项之间的分隔条
android:childIndicator        显示在子列表项旁边的Drawable对象
android:groupIndicator        显示在组列表项旁边的Drawable对象

<11>.Spinner

android:entries                                                            使用数组资源设置该下拉列表框的列表项
android:dropDownHorizontalOffset    setDropDownHorizontalOffset(int)    设置列表选择框的水平偏移距离
android:dropDownVerticalOffset        setDropDownVerticalOffset(int)        设置列表选择框的垂直偏移距离
android:dropDownWidth                 setDropDownWidth(int)                设置列表选择框的宽度
android:popupBackGround                setPopupBackGround                    设置列表选择框的背景色
android:prompt                                                            设置该列表选择框的提示信息

<12>.AdapterViewAnimator

8.ViewAnimator体系结构.jpg
android:animateFirstView            设置显示该组件的第一个View时是否使用动画
android:inAnimation                    设置组件显示时使用的动画
android:loopViews                    设置循环到最后一个组建后是否自动转动到第一个组件
android:outAnimation                设置组件隐藏式使用的动画

<13>.AdapterViewFilpper

android:autoStart        startFlipping()            设置显示该组件是否自动播放
android:flipInterval    setFlipInterval(int)    设置自动播放的时间间隔
7.ProgressBar体系结构.jpg

<14>.ProgressBar

android:max                         设置该进度条的最大值
android:progress                     设置该进度条已完成的进度值
android:progressDrawable            设置该进度条的轨道对应的Drawable对象(可配置<layer-list>Xml 文件)
android:indeteminate                该属性为true,设置进度条不精确显示进度
android:indeteminateDrawable        设置绘制不显示进度的进度条的Drawable对象
android:indeteminateDuration        设置不精确显示进度的持续时间

<15>.

CalendarView:日历视图
DatePicker:日期选择器
TimePicker:时间选择器
NumberPicker:数值选择器

<16>.自定义UI组件

onFinishInflate() : 这是一个回调方法,当应用从XML布局文件加载该组件并利用它重构界面之后,该方法被回调。
onMeasure(int,int) : 调用该方法来检测View组件及其所包含的所有子组件大小
onLayout(boolean,int,int,int,int) : 当该组件需要分配其子组件的位置、大小时,该方法会被回调
onSizeChanged(int,int,int,int) : 当该组件的大小被改变是回调该方法
onDraw(Canvas) : 当该组件将要绘制他的内容时回调该方法进行绘制,会被invalidate()触发。
onKeyDown(int,keyEvent) : 当某个键被按下时触发该方法
onKeyUp(int,keyEvent) : 当松开某个键时被触发
onTrackballEvent(MotionEvent) : 当发生轨迹球事件时触发该方法(貌似轨迹球是过去手机的按键)
onTouchEvent(MotionEvent) : 当发生触摸屏事件时触发该方法
onFocusChanged(boolean gainFocus,int direction,Rect previouslyFocusedRect) : 当该组件焦点发生改变时触发该方法
onWindowFocusChanged(boolean) : 当包含该组件的窗口失去或得到焦点是触发该方法
onAttachedToWindow() : 当把该组件放入某个窗口是触发该方法
onDetachedFromWindow() : 当把该组件从某个窗口上分离时触发该方法
onWindowVisbilityChanged(int) : 当包含该组件的窗口的可见性发生改变时触发该方法

<17>.事件传递机制

<18>.超零碎知识点

<18>.手势识别

使用方法:

GestureDetector.OnGestureListener---接口

boolean onDown(MotionEvent e);——当触碰事件按下时触发该方法
boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY);——当用户手指在触摸屏上“拖过”是触发该方法,其中velocityX,volecityY表示“拖过”动作的的速度
void onLongPress(MotionEvent e);——当用户手指在屏幕上长按时触发该方法
onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY);——当用户手指在屏幕上“滚动”时触发该方法
void onShowPress(MitonEvent e);——当用户手指在屏幕上按下,而且还为移动或者松开时触发该方法
boolean onSingleTapUp(MotionEvent e);——用户手指在触摸屏上轻击事件将会触发

GestureDetector.OnDoubleTapListener---接口,双击

onDoubleTap(MotionEvent e);——双击事件
onDoubleTapEvent(MotionEvent e);——双击间隔中发生的动作。指触发onDoubleTap以后,在双击之间发生的其他动作,包含down、move、up
onSingleTapConfirmed(MotionEvent e);——单击事件。用来判断是单机而不是双击,双击时不触发

GestureDetector.SimpleOnGestureListener---类,实现了以上连个接口

ScaleGestureDetector--缩放手势识别,不是GestureDetector的子类

onScale(ScaleGestureDetector detector);——缩放中
onScaleBegin(ScaleGestureDetector detector);——缩放开始,返回ture才会触发之后的onScale()方法
onScaleEnd(ScaleGestureDetector detector);——缩放手势结束

ScaleGestureDetector.SimpleOnScaleGestureListener---类

博文推荐: 用户手势检测-GestureDetector使用详解


3.Big组件

9.Acitvity体系结构.jpg

<1>.组件启动模式的科学说法(过去自己描述的好白痴...)

<2>.Fragment作用:对UI组件进行分组、模块化管理,我们可以更方便的在运行过程中动态更新Activity用户界面。我们可以把模块的UI组件抽取到不同Fragment中,然后再平板和手机中做不同的组合来达到适配效果,减少代码的逻辑。

<3>.Fragment的onDetach()生命周期方法在Fragment被替换亦是remove()后,不过加入了addOnBackStack()中,那么不会触发。如果只是hide()

<4>.FragmentManager中方法————popBackStack()、addOnBackStackChangeListener()

<5>.屏幕的适配

<6>.Intent中可以配置的属性(可以根据以下前三组数据开启Activity)

Component属性:就是包名(Context)和开启的字节码文件对象

Action、Category:只是普通的任意字符串数据,每一个Intent中都存放了一个默认的

Data:存放数据,接受一个Uri对象,数据格式为【scheme://host:port/path

Type:指定该Data中Uri数据的MIME类型,格式为【abc/xyc】

注意:如果给Intent单独设置data和type,后设置的会覆盖先设置的。需要同时设置data和type需要使用setDataAndType()方法

在清单文件中设置Data属性通过

<data android:mimeType="" android:scheme="" android:host="" android:port="" android:path="" android:pathPrefix="" android:pathPattern="">

Extra属性:就是存储一个Bundle对象
Flag属性:

FLAG_ACTIVITY_BROUGHT_TO_FRONT:如果启动的Activity已经存在,下次再次启动时,将只是把该Activity带到前台。例如Activity——A,B,C。B 是以这种模式打开,A 打开 B,B 启动 C、D,然后 D 中又启动 B
                                这时直接把Activity栈中的 B 带到前台。此时的Activity栈中情形是 A、C、D、B
FLAG_ACTIVITY_CLEAR_TOP:该Flag相当于加载模式中的singleTask。会弹出目标Activity之上的所有Activity
FLAG_ACTIVITY_NEW_TASK:默认的启动标志,控制重新创建一个新的Activity
FLAG_ACTIVITY_NO_ANIMATION:该标志启动的Activity不会使用过渡动画
FLAG_ACTIVITY_NO_HISTORY:该标志启动的Activity不会保留在Activity栈中
FLAG_ACTIVITY_SINGLE_TOP:相当去启动模式的SingleTop
FLAG_ACTIVITY_REORDER_TO_FRONT:控制已有Activity,直接将该Activity带到前台

<7>.BroadcastReceiver:可实现不用应用程序之间的通信,是一个全局的监听器,实现不同组件之间的通信。通过sendBroadcast()sendOrderedBroadcast()来启动指定的BroadcastReceiver

<8>.Service服务

startService()启动会触发onCreat()onStartCommand(),并且onCreat()只有第一次创建时被触发,多次调用startService()方法只会触发onStartCommand()方法

bindService(Intent service, ServiceConnection conn, int flags);

混合开启服务的意义:在于 startService()开启服务,bindService()建立联系,unBindService()断开联系 bundService()再次建立联系,重写Service中onUnBind()让其放回return true;这样onReBind()会触发。
unBindService()只会断开联系,不会关闭服务。只有stopService()才可以。因为Service是通过startService()建立的

Service存在的问题:

<8>.IntentService:内部封装了线程池的Service,可以处理耗时操作

使用方法:IntentService只需要复写该方法——onHandleIntent(),在该方法中处理耗时的操作。

优势:

<9>.超杂乱知识点


4.资源

<1>.Resources:可以获取程序的实际资源的类

resources.getXml(int id);可获取到Xml文档,并且返回XmlPullParser解析器对象
resources.openRawResource(int id);获取资源文件的输入流

<2>.样式与主题

样式:style作用于一个控件

主题:style作用于指定或者所有Activity,查找系统所有内置主题可以输入 android.R.style.任意主题,然后ctrl+左键点进去就能看到了
启用Material主题:给系统主题设置为android:Theme.Material.Xxx这种即可

<3>.BitmapDrawable,图片资源的Drawable

<4>.StateListDrawable,就是选择器<selector/>。选择器可以设置Drawable图片资源或者Color颜色资源。可以个EditText设置颜色选择器来让其有无焦点显示不同颜色

<5>.LayerDrawable,是<layer-list>可以把多个drawable图片资源合并为一个资源,通过android:top|bottom等控制子图片的位置。还可以为Seekbar设置背景,如

    <layer-list>
          <item android:id="@android:id/background" android:drawable="">
          <item android:id="@android:id/progress" android:drawable="">
    </layer-list>

<6>.ShapeDrawable,完整语法格式如下

    <shape>
        <!-- 定义几何图形四个角的弧度 -->
        <corners 
            android:radius="int" 
            android:topLeftRadius="int" 
            android:topRightRadius="int" 
            android:bottomLeftRadius="int" 
            android:bottomRightRadius="int"/>

        <!-- 定义使用颜色渐变填充 -->
        <gradient 
            android:angle="int" 
            android:centerX="int"
            android:centerY="int"
            android:centerColor="int"
            android:endColor="int"
            android:gradientRadius="int"
            android:startColor="int"
            android:type="linear | radial | sweep"
            android:usersLevel="true | false"/>

        <!-- 定义几何形状的内边距 -->
        <padding android:left|top|right|bottom="int"/>

        <!-- 定义几何图形的大小 -->
        <size 
            android:width="int"
            android:color="color"
            android:dashWidth="int"
            android:dashGap="int" />

        <!-- 定义使用单重颜色填充 -->
        <solid android:color="color" />

        <!-- 定义几何形状绘制边框 -->
        <stroke
            android:width="int"
            android:color="color"
            android:dashWidth="int"
            android:dashGap="int" />
    </shape>

<7>.ClipDrawable,位图上截取一个图片片段显示。此对象通过setLevel()开控制截取的范围,如果是clip.setLevel(0)则不截取,如果是clip.setLevel(10000)时为截取整张图片

    <clip
        android:drawable=""——截取的图片资源
        android:clipOrientation="horizontal | vertacal"——截取的方向
        android:gravity="top | bottom | left | right | center..." ——截取后的对其方式/>

<8>.AnimationDrawable,逐帧动画资源,可以为每一个动画标签设置<android:interpolator="linear_interpolator | accelerate_interpolator | decelerate_interpolator"/>匀速、加速、减速变换可以为每一个动画标签设置<android:fillAfter="true | false"/>动画执行完毕是否保留控件的变换效果


5.绘画、动画

<1>.Bitmap

createBitmap(Bitmap source, int x, int y, int width, int height);从源位图source的指定坐标点开始,挖取指定宽高的一个新的Bitmap对象
createBitmap(Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter);如上,不过会按照Matirx进行变换
createScaledBitmap(Bitmap src, int destWidth, int height);对源位图进行缩放,缩放成指定宽高
boolean isRecycled();返回给Bitmap对象是否已被回收
void recycle();强制一个Bitmap对象立即回收自己

<2>.Canvas,相当于画布

drawArc(RectF oval, float startAngle, float startAngle, float sweepAngle, boolean useCenter, Paint paint);——绘制弧
drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint);——从指定点绘制从源位图中“挖去”的一块
drawBitmap(Bitmap bitmap, float left, float top, Paint paint);——在指定点绘制位图
drawCircle(float cx, float cy, float radius, Paint paint);——在指定点绘制一个圆
drawLine(float startX, float startY, float stopX, float stopY, Paint paint);——绘制多条直线
drawOval(RectF oval, Paint paint);——绘制椭圆
drawPath(Path path, Paint paint);——沿着指定Path绘制任意形状
drawPoint(float x, float y, Paint paint);——绘制一个点
drawPoints(float[] pts, float offset, int count, Paint paint)——绘制多个点
drawRect(float left, float top, float right, float bottom, Paint paint);——绘制矩形
drawRoundRect(RectF rect, float rx, float ry, Paint paint);——绘制圆角矩形
drawText(String text,int start, int end, Paint paint);——绘制字符串
drawTextOnPath(String text, Path path, float hOffset, float vOffset, Paint paint)——沿着路径绘制字符串,画出各种不规则排列的字符
clipRect(float left, float top, float right, float bottom);——剪切一个矩形区域
clipRegion(Region region);——剪切指定区域
rotate(float degress, float px, float py);——对Canvas执行旋转变换
scale(float sx, float sy, float px, float py)——对Canvas执行缩放变换
skew(float sx, float sy);——对Canvas执行倾斜变换
translate(float dx, float dy);——移动Canvas,向右移动dx,向下移动dy

drawBimtapMesh(Bitmap bitmap, int meshWidht, int meshHeight, float[] verts, int vertOffset, int[] colors, int colorOffset, Paint paint)——扭曲图片
1.bitmap:指定要扭曲的源位图
2.meshWidth:该参数控制在横向上吧该源位图划分成多少格
3.meshHeight:该参数控制在纵向上吧该源位图划分为多少格
4.verts:

<3>.Painter(画笔)

setRGB(int a, int g, int b);——设置颜色
setColor(int color);——设置颜色
setAlpha(int a);——设置透明度
setAntiAlias(boolean aa);——设置是否抗锯齿
setPathEffect(PathEffect effect);——设置绘制路径时的路径效果
setShader(Shader shader);——设置画笔的填充效果,能够设置渐变效果,通过Shader对象,如LinearGradient
setShadowLayer(float radius, float dx, float dy, int color);——设置阴影
setStrokeWidth(float width);——设置画笔的笔触宽度
setStrokeJoin(PaintJoin join);——设置画笔转弯处的连接风格
setStyle(Paint.Style style);——设置Paint的填充风格
setTextALign(Paint.Align align);——设置绘制文本是的文字对齐方式
setTextSize(float textSize);——设置绘制文本时的文字大小

<4>.Path类——路径类,可以自定义任意路径来拼凑出任意图形,通过Canvas来绘制

moveTo(float x, float y);设置起始点
lineTo(float x, float y);
quadTo(float previousX, float previousY, float x, float y)

<5>.PathEffect类——路径效果类,定义各种绘制路径的效果
ComposePathEffect、CornerPathEffect、DashPathEffect、DiscretePathEffect、PathDashPathEffect、SumPathEffect——分别对应6中效果,都需要初始化一些数值。什么虚线、破折线等等

<6>.Matrix,是一个矩形工具类。本身并不能对图形或组件进行变换,需要与其他API结合来控制图形

setTranslate(float dx, float dy);——控制Matrix进行平移
setSkew(float kx, float ky, float px, float py);——控制Matrix以px、py为轴心进行倾斜,kx、ky为X、Y方向上的倾斜距离
setSkew(float kx, float ky);——控制Matrix进行倾斜。kx、ky为X、Y方向上的倾斜距离
setRotate(float degress);——控制Matrix进行旋转,degress控制旋转的角度
setRotate(float degress, float px, float py);——设置以px、py为轴心进行旋转,degress控制旋转的角度
setScale(float sx, float sy);——设置Matrix进行缩放,sx、sy控制X、Y 方向上的缩放比例
setScale(float sy, float sy, float px, float py);——设置Matirx以px、py为轴心进行缩放,sx、sy控制X、Y 方向上的缩放比

$使用时可以靠drawBitmap(Bimtmap bitmap, Matrix matirx, Paint paint)来让绘制Bitmap按照你的Matirx进行变换了

<7>.Shader,填充图形。配合Painter一起使用

BitmapShader:使用位图平铺的渲染效果
LinearGradient:使用线性渐变来填充图形
RadialGradient:使用圆形渐变来填充图形
SweepGradient:使用角度渐变来填充图形
ComposeShader:使用组合渲染效果来填充图形

<8>.逐帧动画(Frame),设置每一帧图片,<animation-list>,这个可以作为AnimationDrawable

<9>.补间动画(Tween),同Flash

<10>.Interpolater(插值器:控制补间动画的变化速度,是一个接口,需要实现getInterpolation(float input)方法)

LinearInterpolator:匀速插值器
AccelerateInterpolator:动画开始地方变化较慢,然后开始加速
AccelerateDecelerateInterpolator:在动画开始和结束的地方变化均较慢,在中间时加速
CycleInterpolator:动画循环播放特定次数,变化速度按照正弦曲线改变
DecelerateInterpolator:在动画开始的地方变化较快,然后逐渐减速

定义补间动画的<set>中可以设置android:interpolator=""来支持Android默认的插值器,如
@android:anim/linear_interpolator
@android:anim/accelerate_interpolator
@android:anim/accelerate_decelerate_interpolator

<11>.自定义补间动画

Animation类

applyTransformation(float interpolatedTime, Transformation t);
interpolatedTime:表示动画时间进行比,不管动画持续时间如何,在动画播放时,该参数总是自动从0变到1
Transformation:代表了补间动画在不同时刻对图形或者组件的变形程度

自定义动画时就是在不同interpolatedTime时刻,来动态计算动画的变形程度即可。
Transformation 封装了Matrix对象,可对图形进行变形,通过getMetrix()获取。如果是进行三维空间上的变换,可以通过Camera类来控制,这是一个空间变换工具。

Camera类

getMatrix(Matirx matrix);——将Camera所做的变换应用到指定的matirx上
rotateX(float deg);——使目标组件沿X轴旋转
rotateY(float deg);——使目标组件沿Y轴旋转
rotateZ(float deg);——使目标组件沿Z轴旋转
translate(float x, float y, float z);——使目标组件在三维空间里进行位移变换
applyToCanvas(Canvas canvas);——在Camera所在的变换应用到Canvas上
save();——最好每次applyTransformation被调用是save()一次变换

<11>.补间动画与属性动画的区别

补充:动画这里说的极其不清楚,更多详尽可以去鸿洋大神博客去看,请看一下链接:

Android 属性动画(Property Animation) 完全解析 (上)

Android 属性动画(Property Animation) 完全解析 (下)

Android 属性动画 源码解析 深入了解其内部实现

<12>.SurfaceView

View 绘图的缺陷

使用:SurfaceView一般与SurfaceHolder结合使用,SurfaceView 通过getHolder()方法即可获取其关联的 SurfaceHolder

SurfaceHolder类

Canvas lockCanvas();——锁定整个SurfaceView对象,获取SurfaceView上的Canvas
Canvas lockCanvas(Rect dirty);——锁定Rect中的区域,获取该SurfaceView上的Canvas,此方法更新Canvas只更新Rect圈出来的区域
unlockCanvasAndPost(canvas);——提交所绘制的新的Canvas

注意:当调用SrufaceHolder的unlockCanvasAndPost(canvas)方法之后,该方法之前所绘制的图形还处于缓冲区中,下一次lockCanvas()方法锁定的区域可能会“遮挡”

-- 双缓冲demo:应该是你的demo那个博客

-- 双缓冲理解: 分析SurfaceView源码

-- 双缓冲与单缓冲区别

-- 双缓冲与但缓冲动画绘制区别demo

SurfaceView.Callback接口

使用场景:一般我们自定义SurfaceView时会继承 SurfaceView 和实现 SurfaceHolder.Callback 接口,从而得到SurfaceView创建后三个生命周期方法

void surfaceChanged(SurfaceHolder holder, int format, int widht, int height);——当一个SurfaceView的格式或大小发生改变时回调该方法
void surfaceCreated(SufaceHolder holder);——当SurfaceView被创建时回调该方法
void surfaceDestroyed(SurfaceHolder holder);——当SurfaceView将要被销毁时回调该方法

6.数据存储(知识点超小,都不想记了....)

<1>.SharePreferences 的读取权限,初始化通过context.getShareedPreferences(String name, int mode),自己过去对这个权限有些错误认识

Android 4.2以后不推荐使用后两种权限,因为其他应用读取SP数据可能会出现安全漏洞,官方推荐使用ContentProvider

<2>.SD卡添加文件写入数据需要权限支撑

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />SD 中创建于删除文件权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />向 SD 卡写入数据权限

<3>.splite3工具常用命令,支持运行各种DDL、DML

.databases:查看当前数据库
.tables:查看当前数据库里的数据表
.help:查看sqlite3支撑的命令

7.系统服务,Manager

<1>.TelephonyManager——电话管理器,提供了大量getXxx()方法获取电话网络、SIM 卡相关信息;还提供了一个listen(PhoneStateLintener listener, int events)来监听通话状态

<2>.SmsManager——短信管理器,提供了一系列sendXxxMessage()方法用于发送短信。

<3>.AudioManager——音频管理器,调整手机音量或者直接让其静音,提供各种调制各种声音的方法

<4>.Vibbrator——振动器,只有三个方法来控制手机的震动

<5>.AlarmManager——用途开发手机闹钟,本质是一个全局定时器,其可在指定时间指定周期启动其他组件

<6>.WallpaperManager——系统壁纸管理的服务,通过WallpaperManager.getInstance(Context)来初始化

<7>.AssetManager——资源管理器,通过Context.getAsset()来初始化。可获取文件的Descriptor指示器

<8>.CameraManager——照相管理器

<9>.MediaProjectionManager——屏幕捕捉管理器,Android 5.0 新增

<10>.SensorManager——系统的传感器管理服务,getSystemService(Comtext.SENSOR_SERVICE);进行初始化

getDefaultSensor(int type);——获取指定类型的传感器
rigisterLintener(SensorEvnetListener listener, Sensor sensor, int rate);——为指定传感器注册监听器,通常在Activity中的onResume()中调用。listener:监听器对象;sersor:穿管器对象;rate:获取传感器数据的频率,可取值如下所示:
            SensorManager.SNESOR_DELAY_FASTEST:最快,延迟最小。只有依赖传感器数据的应用使用此频率。耗电量大
            SensorManager.SENSOR_DELAY_GAME:适合游戏的频率。实时性要求的应用适合此频率
            SersorManager.SENSOR_DELAY_MORMAL:正常频率。不要求实时性可以使用此频率
            SensorManager.SNESOR_DELAY_UI:适合普通用户界面的频率,比较省电,延迟较大                                                                                                    
unRegisterListener(SersorEventListener listener);——解绑监听器

SersorEventListener

onSensorChanged(SensorEvent event);——当传感器的值发生改变时触发该方法
Sensor.TYPE_ORIENTATION            方向传感器 event.values();    values[1]:手机围绕Z轴旋转的角度,就是手机旋转的角度,取值范围为【0-360】
                                                            values[2]:手机围绕X轴旋转的角度,当手机屏幕朝上放在桌子上时【0】。手从屏幕上端开始翻起,翻转手机屏幕直到朝下【0-(-180)】
                                                                                                                     手从屏幕下端开始翻起,翻转手机屏幕直到朝下【0-180】
                                                            values[3]:手机围绕Y轴旋转的角度,当手机屏幕朝上放在桌子上时【0】,手从屏幕左侧开始翻起,翻转手机屏幕直到朝下【0-(-90)】
                                                                                                                     手从屏幕右端开始翻起,翻转手机屏幕直到朝下【0-90】
Sensor.TYPE_ACCELEROMETER        加速度传感器 event.values()    values[1]:X轴方向的加速度,values[2]:Y轴方向的加速度,values[3]:Z轴方向的加速度
Sersor.TYPE_GYROSCOPE            陀螺仪传感器 event.values()    values[1]:手机绕X轴旋转的角速度,手机绕Y轴旋转的角速度,手机绕Z轴旋转的角速度
Sersor.TYPE_MAGNETIC_FIELD        磁场传感器 event.values()        values[1]:X轴磁场强度,values[2]:Y轴磁场强度,values[3]:Z轴磁场强度;单位是[μT]
Sersor.TYPE_GARVITY             重力传感器 event.values()        values[1]:X轴重力,values[1]:Y轴重力,values[3]:Z轴重力
Sensor.TYPE_LINEAR_ACCELERATION    线性加速度传感器 event.values()    加速度传感器 = 重力传感器  +  线性加速度传感器
Sensor.TYPE_AMBIENT_TEMPERATURE    温度传感器 event.values()        values[1]:代表手机周围温度,单位是摄氏度
Sensor.TYPE_LIGHT                光传感器 event.values()        values[1]:代表手机周围光的强度,单位是勒克斯[lux]
Sensor.TYPE_PRESSURE            压力传感器 event.values()        values[1]:手机所处环境压力的大小

onAccuracyChanged(Sensor sensor, int accuracy);——当传感器精度发生改变时触发该方法

Android 5.0 新增心率传感器

//还缺少好多,以后补上


8.多媒体

<1>.MediaPlayer:播放音频

缺点:

API说明

prepare();——    准备播放
prepareAsync();——异步的准备,不阻塞主线程
start();——开始播放
stop();——停止播放
pause();——暂停播放
static MediaPlayer create(Context context, Uri uri);——从指定Uri来转载音频文件
static MediaPlayer create(Context context, int resid);——从resid资源ID对应的资源文件中转载音频文件
setDataSource(String path);——指定转载path路径所代表的文件
setDataSource(FileDescriptor fd, long offset, long length);——指定装载fd所代表的文件中,从offset开始,长度为length的文件内容
setDataSource(FileDescriptor fd);——指定装载fd所代表的文件
setDataSource(Context context,Uri uri);——指定装载uri所代表的文件
setOnCompletionListener(Media.OnCompletionListener listener);——为MediaPlayer的播放完成事件绑定事件监听器
setOnErrorLister(MediaPlayer.OnErrorListener listener);——为MediaPlayer的播放错误事件绑定事件监听器
setOnPreparedListener(MediaPlayer.setOnPreparedListener listener);——当MediaPlayer调用prepare()方法时触发该监听器
setOnSeekCompleteListener(MediaPlayer.onSeekCompleteListenrer listener);——当MediaPalyer调用seek()方法触发该监听器

<2>.AudioEffect:音乐特效

AcousticEchoCanceler:取消回声控制器
AutomaticGainControl:自动增益控制器
NoiseSuppressor:噪音压制控制器
BassBoost:重低音控制器
Equalizer:均衡控制器
PresetReverb:预设音场控制器
Visualizer:示波器

<3>.SoundPool 用来播放音效,资源占用量低,反应延迟小。MediaPlayer不适合播放短促的音效

SoundPool.Bunider 来初始化构造这个对象
int load(Context context, int resId, int priority);——从resId所对应的资源加载声音,返回值就是音效对应的Id
int load(FileDescriptor fd, long offset, long length, long priority);——加载fd所对应的文件,从指定位置开始
int load(AssetFileDescriptor afd, int priority);——从afd所对应的文件中加载声音
int load(String path, int priority);——从path对应的文件中加载声音
int play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate);——leftVolume,rightVolume指的是左右声道的音量;priority表示优先级;loop表示是否循环,0表示不循环,-1表示循环;rate表示播放比率,数值可从0.5到2,1位正常比率

<4>.VideoView

setVideoPath(String path);——加载path所代表的视频
setVideoURI(Uri uri);——加载Uri所对应的视频
setMediaController(MediaController controller);——设置VideoView的友好操作界面
start()、stop()、pause()

可使用 MediaPlayer + SurfaceView 来共同工作播放视频,不过较为复杂,推荐使用VideoView播放视频

<5>MediaRecorder可以录制音频和视频

<6>.Android 5.0 新增了Camera V2拍照,更多的功能,能够RAW照片输出,能够调整照片的对焦模式、曝光模式、快门等


9.网络

<1>.用户登录状态HttpClient会自动保存,就是SessionId不用做处理,剩下第三方框架有待试一试!

<2>.Android 自带的浏览器是使用开源的WebKit实现的

<3>.WebView,Android 5.0增强了WebView,基于Chromium M37

boolean zoomIn();——放大网页
boolean zoomOut();——缩小网页
loadData(String data, String mimeType, String encoding);——用于加载并显示Html代码,中文可能会显示乱码
loadData(String baseUrl, String data, String mimeType, String encoding, String historyUrl);——url传入null,mimeType可指定为"text/html",字符集随需求了,不显示乱码
getSettings();——获取WebSetting工具类

WebSettings 可以让JavaScript脚本调用Android对象

setJavaScriptEnabled(boolean enable);——启动WebView中JavaScript脚本调用Android对象的功能
addJavaScriptInterface(Object object, String name);——object:要调用的Android对象;name:在JavaScript脚本中引用的名称

<4>.Android应用于远程服务器进行交互,可通过WebService。涉及技术:(这个现在还不明白,改天网上搜搜吧)


Android基础版图.jpg
上一篇 下一篇

猜你喜欢

热点阅读