Android-知识点归纳整理

  • android开发工具

  • API开发文档(不需要fq)

  • API开发文档(需要fq)

  • 15 个 Android 通用流行框架大全

  • android源代码

  • 如何获取系统中定义了那些权限

  • AndroidManifest.xml 最全详解

  • 玩转ADB命令

目录

文章目录

  • android四大组件,上下文,Fragment
  • 时间,延时,计时
  • 数据与数据存储,目录,文件
  • 系统
  • 测试 调试
  • 控件,布局,View
  • 对话框、弹框
  • 数据库
  • 线程,网络,消息,队列
  • 图片
  • 多媒体
  • 传感器
  • 动画-->帧动画,补间动画,属性动画,GIF
  • 动画
  • 手势识别动作
  • 意图
  • 三方框架
  • 别人的笔记


android四大组件,上下文,Fragment

  • Activity 活动
  • Service 服务
  • BroadcastReceive 广播
  • ContentProvider 内容提供者
  • Context 上下文
  • Fragment 碎片

时间,延时,计时

  • AlarmManager 报警/闹钟管理
  • SystemClock 系统时钟
  • TimerTask,Timer 计时器
TimerTask task = new TimerTask();
Timer timer = new Timer();
timer.schedule();		   //隔多长时间执行一次 [TimerTask];
  • Scroller延时变化坐标的类(模拟数据)
new Scroller(this)
startScroll()				开始模拟[开始模拟的X,开始模拟的Y,增量值X,增量值Y,时间(在给定的时间完成这个数据模拟)]
  • 条件变量
ConditionVariable         
	block 					等待进门
	close					关门
	open					开门
  • 同步
ReentrantLock    
synchronized  
       ↓
https://www.cnblogs.com/fanguangdexiaoyuer/p/5313653.html

数据与数据存储,目录,文件

  • ClipboardManager 剪贴板
//得到剪贴板
mClipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);  
//监听剪贴板的数据
addPrimaryClipChangedListener(newClipboardManager.OnPrimaryClipChangedListen) 
  • Context '上下文
//获取data/data/包名/的绝对路径(需要判断版本号)
String dataPath = android.os.Build.VERSION.SDK_INT >=android.os.Build.VERSION_CODES.N ?
context.getDataDir().getAbsolutePath() : context.getApplicationInfo().dataDir;

getFileDir()			当前包files目录的绝对路径(重要配置信息目录)
getCacheDir()			当前包Cache目录的绝对路径(缓存目录)
openFileOutput()		生成一个指定访问权限的文件流
  • SharedPreferences 'Map集合IO流用来保存信息,获取信息
edit()					得到文本编辑器对象(类似于创建输出对象)
getString()				通过键得到值
Editor	'文本编辑器
putString()				编辑字符串到SharedPreferences域里面去(类似于write)
commit()				提交(类似于关流)
  • Settings.System 全局保存键值对
Settings.System.getxxx()			
Settings.System.setxxx()
  • System.getProperties() 应用类
System.getProperties().getProperty()			
  • Bundle’容器
putxxx()				存储xxx
getxxx()				得到xxx
  • Environment SD卡类
getDataDirectory()				获得机身内存的(File)目录。
getExternalStorageDirectory()	获得外部存储媒体(File)目录。
getExternalStorageState()		获得当前外部储存媒体的以下状态。
MEDIA_BAD_REMOVAL				在没有挂载前存储媒体已经被移除。
MEDIA_CHECKING					正在检查存储媒体。
MEDIA_MOUNTED					存储媒体已经挂载,并且挂载点可读/写。
MEDIA_MOUNTED_READ_ONLY			存储媒体已经挂载,挂载点只读。
MEDIA_NOFS						存储媒体是空白或是不支持的文件系统。
MEDIA_REMOVED					存储媒体被移除。
MEDIA_SHARED					存储媒体正在通过USB共享。
MEDIA_UNMOUNTABLE				存储媒体无法挂载。
MEDIA_UNMOUNTED					存储媒体没有挂载。
getDownloadCacheDirectory()		获得下载缓存目录。
getRootDirectory()				获得android的根目录。
getExternalStoragePublicDirectory(String type)	可获取以下标准目录
				↓
DIRECTORY_ALARMS				系统提醒铃声存放的标准目录。
DIRECTORY_DCIM					相机拍摄照片和视频的标准目录。
DIRECTORY_DOWNLOADS				下载的标准目录。
DIRECTORY_MOVIES				电影存放的标准目录。
DIRECTORY_MUSIC					音乐存放的标准目录。
DIRECTORY_NOTIFICATIONS			系统通知铃声存放的标准目录。
DIRECTORY_PICTURES				图片存放的标准目录。
DIRECTORY_PODCASTS				系统广播存放的标准目录。
DIRECTORY_RINGTONES				系统铃声存放的标准目录。
  • File '文件类
getFreeSpace()					得到可用空间(最小要从9版本开始)
getTotalSpace()					得到总空间
  • Formatter 单位格式化器
//(自动转化单位:将byte-->合适的单位,android.text.format.Formatter;包里面的)
formatFileSize					自动转换单位
  • 文件的权限
600私有
666公开
664只读
662只写
777最高权限
  • XML
Xml 'XML工厂类
newSerializer()					得到序列化器{输出}
newPullParser()					得到解析器{输入}

XmlSerializer '序列化器{输出}
setOutput()						设置输出流的编码
startDocument()					文件开始
startTag()						开始标签
text()							文本
endTag()						结束标签
endDocument()					文件结束

XmlPullParser  '解析器{输入}
setInput()						设置输入流的编码
getEventType()					得到第一个事件的类型
next							得到下一个事件的类型
END_DOCUMENT					文本结束类型
START_TAG						标签开始类型
getName()						标签名称
nextText()						下一个事件的文本

系统

  • Application '整个应用的对象
  • Throwable '异常的超类
printStackTrace()		打印日志到控制台或者指定的流对象里面(无参:打印到控制台,有参:可以打印的指定的流)
  • Build '提取设备硬件和版本信息的类
内部类:
1、Build.VERSION 版本相关常量字符串
2、Build.VERSION_CODES 目前已知的版本代码的常量类

静态属性
1、BOARD 主板:The name of the underlying board, like goldfish.
2、BOOTLOADER 系统启动程序版本号:The system bootloader version number.
3、BRAND 系统定制商:The consumer-visible brand with which the product/hardware will be associated, if any.
4、CPU\_ABI cpu指令集:The name of the instruction set (CPU type + ABI convention) of native code.
5、CPU\_ABI2 cpu指令集2:The name of the second instruction set (CPU type + ABI convention) of native code.
6、DEVICE 设备参数:The name of the industrial design.
7、DISPLAY 显示屏参数:A build ID string meant for displaying to the user
8、FINGERPRINT 唯一识别码:A string that uniquely identifies this build. Do not attempt to parse this value.
9、HARDWARE 硬件名称:The name of the hardware (from the kernel command line or /proc).
10、HOST
11、ID 修订版本列表:Either a changelist number, or a label like M4-rc20.
12、MANUFACTURER 硬件制造商:The manufacturer of the product/hardware.
13、MODEL 版本即最终用户可见的名称:The end-user-visible name for the end product.
14、PRODUCT 整个产品的名称:The name of the overall product.
15、RADIO 无线电固件版本:The radio firmware version number. 在API14后已过时。使用 getRadioVersion()代替。
16、SERIAL 硬件序列号:A hardware serial number, if available. Alphanumeric only, case-insensitive.
17、TAGS 描述build的标签,如未签名,debug等等。:Comma-separated tags describing the build, like unsigned,debug.
  • Resources '资源
content.getResources()  得到 Resources 对象
getResources()			得到Resources资源
getString()				得到R文件里面的String资源
getDrawable()			将Drawable目录的id图片转化成Drawable对象
  • MessageDigest '信息加密
getInstance("md5");		得到信息加密对象["加密的方法比如md5"]
digest()				使用digest获取加密后的byte数组[byte]
update()				存储MessageDigest里面
  • AppWidgetManager '应用小窗台的管理类
getInstance()			得到应用小窗体的管理对象
updateAppWidget()		更新小窗体
  • RemoteViews '远程的view
new RemoteViews()		得到远程的view对象[]			[本应用的包名,得到的View控件]
setTextViewText()		给对应id的TextView设置文本		[设置控件的id,设置的值]
setImageViewResource()  给对应ID的ImageView设置图片		[设置控件的id,设置的值]
setOnClickPendingIntent 设置小窗体的点击事件			[设置控件的id,设置的值]
  • Runtime '运行时类
getRuntime()				得到对象
availableProcessors()		得到当前设备的可以用处理器
exec()						得到用代码实现adb脚本
```java
- **RunningTaskInfo '运行任务栈的信息**

topActivity() 得到任务栈顶的activity

- **ComponentName '组成的名称**

getPackageName() 得到包名

- **packageInfo '包的信息类**
```java
applicationInfo					应用程序信息类
  • RunningAppProcessInfo '正在运行的app进程
pid								得到app的pid
processName						得到正在运行的app进程的包名
  • ActivityManager.MemoryInfo '进程管理器存储信息的类
availMem						设备可用RAM
totalMem						设备总RAM
getTotalPrivateDirty()			得到得到全部进程的大小
  • Debug.MemoryInfo '调试存储信息的类
getTotalPrivateDirty()			得到得到全部进程的大小
  • PackageManager '安装包的管理对象
getPackageManager()			得到包的管理对象
getPackageInfo()			根据包名得到包信息对象
getInstalledPackages		获取设备所有应用[0(这是没有条件)]
getLaunchIntentForPackage	根据指定包名得到可以打开它的意图对象(startactivity调用这个意图就可以打开)
getPackageSizeInfo()		得到安装包大小的信息方法("这个方法是隐藏的,要用反射")
freeStorageAndNotify()		清除所有的缓存数据("这个方法是隐藏的,要用反射")
  • PackageStats '包的统计
cacheSize					得到缓冲大小
  • PackageInfo '安装包的信息类
applicationInfo()			得到应用程序信息类
packageName()			得到包类名
  • ApplicationInfo '应用程序信息类
uid						得到应用程序的uid
flags					得到应用程序的标记{flags&ApplicationInfo.FLAG_SYSTEM)!=0}
sourceDir				得到应用程序的位置(目录)
loadLabel()				得到应用程序名称
loadIcon()				得到应用程序图标
  • SmsManager '短信类
getDefault()			得到短信对象
sendTextMessage()		发短信["发给谁",显示自己发送,"发送内容",null,null]
createFromPdu()			根据协议创建一个短信对象
getMessageBody()		得到短信的
getOriginatingAddress() 得到发送人
  • android.os.Process '程序类
killProcess()			杀死一个进程

myUid()					得到自己的uid(uid就是安装包的id,app安装的时候分配的,pid是进程的id,是运行这个进程的时候分配的)

测试 调试

AndroidTestCase '测试类(要想测试就要继承这个类)**
getContext()					得到一个模拟的上下文Context对象

{在XML里面增加测试}
<instrumentation
        android:name="android.test.InstrumentationTestRunner"
        android:targetPackage="包名" >
</instrumentation>


<uses-library android:name="android.test.runner"/>

控件,布局,View

  • MeasureSpec '系统的测量工具类
AT_MOST							模式:对应的是wrap_content
EXACTLY							模式:对应的是match_parent,具体的值
UNSPECIFIED						表示未指定,一般不用,只在adapter的测量用到
makeMeasureSpec()				测量 //[测量的大小,测量的模式]
getSize()						得到控件的大小
getMode()						得到模式
/**
	 * widthMeasureSpec和heightMeasureSpec是父View帮我们计算好并且传给子View了
	 * 测量规则: MeasureSpec ,封装了size和mode
	 * size: 就是具体的大小值
	 * mode: 测量模式, 对应的是xml布局中的参数
	 * 		MeasureSpec.AT_MOST 对应的是wrap_content;
	 * 		MeasureSpec.EXACTLY 对应的是match_parent,具体的dp值
	 * 		MeasureSpec.UNSPECIFIED 表示未指定的,一般不用,只在adapter的测量用到
	 */
	@Override
	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
		//1.获取当前ImageView的宽度,
		//通过widthMeasureSpec来取出当前imageView的宽度
		int width = MeasureSpec.getSize(widthMeasureSpec);
		//2.根据宽高比,计算对应的高度
		if(ratio!=0){
			float height = width/ratio;//获取对应的高度
			//3.将高度设置给ImageView
			heightMeasureSpec = MeasureSpec.makeMeasureSpec((int) height,MeasureSpec.EXACTLY);
		}


		super.onMeasure(widthMeasureSpec, heightMeasureSpec);
	}

  • ViewParent '当前view的父类对象
requestDisallowInterceptTouchEvent()		请求所有的父控件已经祖父控件不要拦截(true为不拦截,反之)
  • ViewTreeObserver '树形结构的观察者
ViewTreeObserver viewTreeObserver = tvItemExplain2.getViewTreeObserver();
            viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {


                @Override
                public void onGlobalLayout() {
                    Log.e(TAG, "onGlobalLayout: "+tvItemExplain2.getWidth());
                    tvItemExplain1.setWidth(tvItemExplain2.getWidth());




                }
            });


addOnGlobalLayoutListener()		增加一个全部布局的监听(当前的布局的显示状态改变的时候回调)
removeGlobalOnLayoutListener()  删除一个全部布局的监听[this]
  • ViewCompat '重绘界面(V4包)
postInvalidateOnAnimation	重绘界面,这个和inValidate()一样,但是不会丢帧[子View所在的容器View]
  • ViewHelper 'View辅助类(nineoldandroids-2.4.0.jar)
setScaleX()					设置屏幕缩放的X值(兼容3.0以下)//[滚动的view,控件宽度的比例] {1.0为不缩放}
setScaleY()					设置屏幕缩放的Y值(兼容3.0以下)//[滚动的view,控件高度的比例] {1.0为不缩放}
setTranslationX()			设置平移动画的X值(兼容3.0以下)//[滚动的view,滚动的X轴] {0为不平移}
setTranslationY()			设置平移动画的Y值(兼容3.0以下)//[滚动的view,滚动的Y轴] {0为不平移}
setAlpha()					设置透明度动画//[滚动的view,透明度变化的比例] {1.0为不原始度}
  • TypeEvaluator '类型控制器
FloatEvaluator 'float控制的类(android 里面的)
evaluate()					根据(0-1.0)范围的比例,得到指定范围的比例//[0-1.0范围的比例,指定范围的开始,指定范围的结束范围]
ArgbEvaluator '颜色的控制类,颜色的渐变(android 里面的)
evaluate()					根据(0-1.0)范围的比例,得到指定范围的比例的颜色过度//[0-1.0范围的比例,指定范围的开始颜色,指定范围的结束颜色]
  • ViewConfiguration 'View的一个配置类
get(getContext())			得到View的一个配置类对象
gettouchslop();				得到判断可以上下左右滑动的基础值
  • Scroller '模拟数据(延时变化坐标的类)
new Scroller(this)
startScroller()				开始模拟[开始模拟的X,开始模拟的Y,增量值X,增量值Y,时间(在给定的时间完成这个数据模拟)]
getCurrX()					得到模拟变化过程中的X值
computScrollOffset()		如果没有模拟完成就返回true完成就返回fals
  • ViewDragHelper '视图拖拽辅助类
//辅助类的使用步骤
(1)在View的构造函数里创建辅助类:create()
(2)在View类里重写onInterceptTouchEvent()拦截事件:让辅助类帮我们判断是否拦截接触事件shouldInterceptTouchEvent()
(3)在View类里重写onTouchEvent()处理事件:让辅助类处理事件processTouchEvent()
(4)在创建时候的Callback类里面做拖拽的事件


create()					得到视图拖拽辅助类//[父控件(父容器),敏感度(越大越敏感一般1.0f),事件回调]
shouldInterceptTouchEvent()	让辅助类帮我们判断是否拦截接触事件//[MotionEvent对象]
processTouchEvent()			让辅助类处理事件
smoothSlideViewTo()			触发一个平滑的事件,设置滑到的位置//[那个View滑动,需要滑动到的X位置,需要滑动到的Y位置]当到达位置就返回false
continueSettling()			如果需要画下一贞//[在computeScroll方法里面一般为true]
Callback '拖拽事件回调
tryCaptureView()			回调:决定控件child是否可以被拖拽//[child(被用户拖拽的孩子),pointerId(多点触摸的手指id)]  true为可以,false为不可以
clampViewpositionHorizontal() 修正子View水平方向的位置,当有触屏事件的时候才会调用//[child(被用户拖拽的孩子),建议移动的位置(离0.0的),跟旧的位置相差的值  ]
getViewHorizontalDragRange() 返回拖拽的范围,返回一个大于0的值(一般在松手动画的时候,和有子孩子的时候起作用)
onViewPositionChanged()		当控件位置变化时调用,可以做:伴随动画,状态的更新,事件的回调(这个在高版本里面会自动调用刷新当前控件的方法,在低版本没有,所有不管要不要都要调用)//[变化的控件,左边的值,上边的值,左边的偏移量,上边的偏移量]
onViewReleased()			决定松手要做的事情,结束的动画//[被释放的子孩子,水平方向的速度,垂直方向的速度]

  • View '根控件类(所有的控件类的父类)
// 自定义控件 继承 View
setMeasureDimension()			设置控件的宽高,也是向父view申请宽高
measure()						量这个控件或者布局//[0,0]代表让系统框架帮我们测量布局的宽高
layou()							设置控件放置的位置//[左,上,右,下]{都是距离0.0这个为参照}
inValidate()					刷新当前控件,会引起onDraw方法调用()--->drawChild()--->每一个控件的child()方法--->computeScroll()这个方法是空实现
scrollTo()						以控件为参照物,让屏幕移动(不记录住左上角坐标,下一次调用为0.0+这次坐标)//[X坐标,y坐标]
scrollBy()						以控件为参照物,让屏幕移动(记录上次的左上角坐标,下一次调用为上次坐标+这次的坐标)//[X变化,y变化]
getScrollX()					得到屏幕滚动后屏幕左上角的X值
getScrollY()					得到屏幕滚动后屏幕左上角的Y值
offsetLeftAndRight()			设置left和right(左右的偏移量)
offsetTopAndBottom()			设置Top和Bottom(上下的偏移量)
getViewTreeObserver()			得到该树形结构的观察者ViewTreeObserver(就是绘制完成后的监听)
requestLayout()					让新的布局生效,  //也是刷新,这个回调用onlayout()方法   ,这样就会走onlayout-->onMeasure-->onDraw()
//生命周期回调
(1)onFinishInflate()				当布局被填充完毕的时候回调此方法(可执行找子控件的操作)
(2)onVisibilityChanged()			当布局显示完毕之后回调  //会调用两次  自己一次  onlayout会走一次
(3)onMeasure()						当前控件需要测量宽和高时,触发此方法//[当前父控件的宽度,当前父控件的高度] 只会触发一次
(4)onSiziChanged()					当控件尺寸变化的时候调用	会触发多次
(5)onLayout()						需要修改布局的位置的时候回调   //只会调用两次
(6)onDraw()							当控件需要绘制的时候调用(前提是有控件需要绘制)  //多次触发
(7)computeScroll()					刷新当前控件的时候回调,维持动画的继续,高频率调用的时候使用  //多次触发
//其他回调
overScrollBy()						滑动到listView两端才会被回调[int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent] deltaY(竖直方向滑动的瞬时变化量顶部下拉为-底部上拉为+),scrollY(竖直方向的滑动超出距离顶部-底部+),scrollRangeY(竖直方向滑动的范围),maxOverScrollY(竖直方向的最大的滑动位置),isTouchEvent( 是否是用户触摸拉动 , true表示用户手指触摸拉动, false 是惯性)


//事件分发
dispatchTouchEvent()			分发事件
onInterceptTouchEvent()			拦截事件
onTouchEvent()					处理事件


//查找资源
inflate()static					把资源layou文件目录的文件转化为View对象
findViewById()					得到布局里面控件的对象
//设置
setOnClickListener()			控件点击时的效果事件
setOnTouchListener()			控件注册一个触摸事件
setBackgroundResource()			将图片资源设置被背景图片
setVisibility					设置控件是否可见
setTag()						存值(Object)
setPadding()					设置字体的边距 //注意这个不能直接写负数,而是可以用一个变量来*-1
setLayouParams()				设置布局的参数(设置这个参数的对象将要添加到那个布局里面就要导那个包)
setEnabled()					设置是否获得焦点
setScaleX()						设置屏幕缩放的X值//[滚动的view,控件宽度的比例] {1.0为不缩放}
setScaleY()						设置屏幕缩放的Y值//[滚动的view,控件高度的比例] {1.0为不缩放}
setTranslationX()				设置平移动画的X值//[滚动的view,滚动的X轴] {0为不平移}
setTranslationY()				设置平移动画的Y值//[滚动的view,滚动的Y轴] {0为不平移}
setAlpha()						设置透明度动画//[滚动的view,透明度变化的比例] {1.0为不原始度}
//添加
addHeaderView()					在控件的头部增加一个View
addFooterView()					在控件的页脚(末尾)增加一个View
//获取
getMeasuredHeight()				获得一个测量后的高度,只有在measure方法被调用后才可以得到具体的高度
getId()							得到Button的id
getTag()						取值(Object)
getLocationInWindow()			获取View在Window中的位置[int[]]放到自定义的int数组里面去   //int[] location = new int[2];    view.getLocationInWindow(location);  Location[0]: x坐标   Location[1]: y坐标
getChildCount()					获得控件里面所有的子控件对象个数
getchildAt()					得到控件里面指定位置的子控件对象
getLatyoutParams()				得到控件的参数
getLaft()						得到左边的值
getBackground()					得到控件的drawable(图片)对象
getParent()						得到当前控件的父控件对象(ViewParent)
  • ViewGroup '可以有子孩子的控件.比如线性布局
bringChildToFront()				把任意布局调整到最上[布局]
  • LayoutParams '布局的参数
RelativeLayout.LayoutParams.WRAP_CONTENT;   包裹内容  -2
RelativeLayout.LayoutParams.MATCH_PARENT;	填充父窗体
leftMargin									设置左边距
  • Gravity '重力
TOP								顶部
LEFT							左边
  • Button '按钮
setOnClickListener()			控件点击时的效果
  • SpannableString’文本的包装器
1、BackgroundColorSpan 背景色
2、ClickableSpan 文本可点击,有点击事件
3、ForegroundColorSpan 文本颜色(前景色)
4、MaskFilterSpan 修饰效果,如模糊(BlurMaskFilter)、浮雕(EmbossMaskFilter)
5、MetricAffectingSpan 父类,一般不用
6、RasterizerSpan 光栅效果
7、StrikethroughSpan 删除线(中划线)
8、SuggestionSpan 相当于占位符
9、UnderlineSpan 下划线
10、AbsoluteSizeSpan 绝对大小(文本字体)
11、DynamicDrawableSpan 设置图片,基于文本基线或底部对齐。
12、ImageSpan 图片
13、RelativeSizeSpan 相对大小(文本字体)
14、ReplacementSpan 父类,一般不用
15、ScaleXSpan 基于x轴缩放
16、StyleSpan 字体样式:粗体、斜体等
17、SubscriptSpan 下标(数学公式会用到)
18、SuperscriptSpan 上标(数学公式会用到)
19、TextAppearanceSpan 文本外貌(包括字体、大小、样式和颜色)
20、TypefaceSpan 文本字体
21、URLSpan 文本超链接


使用方式
SpannableString spanText1 = new SpannableString("图");//添加图片到textview前面
Bitmap bitmap = ViewUtil.convertViewToBitmap(View.inflate(getActivity(), R.layout.item_text, null));
BitmapDrawable bd = new BitmapDrawable(bitmap);
bd.setBounds(0, 0, PhoneInfoUtil.dip2px(getActivity(), 24), PhoneInfoUtil.dip2px(getActivity(), 12));// 左上右下 控制图片大小
spanText1.setSpan(new ImageSpan(bd, DynamicDrawableSpan.ALIGN_BASELINE), 0, 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);// 替换0,1的字符
tvTitle.setText(spanText1);
tvTitle.append(" ");
//---
SpannableString spanText = new SpannableString("图");//添加图片到textview前面
Drawable d;//淘宝还是天猫
if (data.MallType == 0) {
d = getResources().getDrawable(R.drawable.ic_taobao);
} else {
d = getResources().getDrawable(R.drawable.ic_tianmao);
}
d.setBounds(0, 0, PhoneInfoUtil.dip2px(getActivity(), 12), PhoneInfoUtil.dip2px(getActivity(), 12));// 左上右下 控制图片大小
spanText.setSpan(new ImageSpan(d, DynamicDrawableSpan.ALIGN_BASELINE), 0, 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);// 替换0,1的字符
tvTitle.append(spanText);
tvTitle.append(" " + data.Title);
//使用详情地址  http://blog.csdn.net/u011494050/article/details/38460537
  • TextUtils '文本工具类
settext()						设置文本内容
gettext()						得到文本内容
isEmpty()						判断字符串是否为空
equals()						比较
  • CheckBox '单选控件
setOnCheckedChangeListener()	设置控件
isChecked()						判断是否选中
  • TextView '文本控件
isFocused()						控件判断获取焦点的方法
setText()						设置的文本值
getText()						返回TextView显示文本。
setBackgroundColor()			设置背景颜色
// 在代码里面设置drawableLeft等等
//这一步必须要做,否则不会显示.
drawable = content.getResources().getDrawable(R.drawable.outpatientdepartment);
drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());
// TextView(EditView)文字底部或者中间 加横线
tv = (TextView) this .findViewById(R.id. text_view ); 
中间加横线 
tv.getPaint().setFlags(Paint. STRIKE_THRU_TEXT_FLAG ); 
底部加横线: 
tv .getPaint().setFlags(Paint. UNDERLINE_TEXT_FLAG );


附:
TextVIew 的Html解析方法:
String htmlLinkText= "  +"://www.baidu.com/><u">http://www.baidu.com/>>我的CSDN博客 ";        
        tv.setText(Html.fromHtml(htmlLinkText));
  • EditText '文本输入
addTextChangedListener()		文本输入框内容变化的监听器.
setFilters(new InputFilter[]{new InputFilter.LengthFilter(maxLength)});   //代码设置输入的字数
setCursorVisible(false);		//可以理解为不可编辑
setFocusable(false);			//不可以触摸
setFocusableInTouchMode(false);	//不可以输入
requestFocusFromTouch();		//将光标移到当前控件上面
Selection.setSelection(getEditableText(), getText().length());  //选择光标到指定内容上面
//禁止长按和双击出来原来的复制粘贴
setCustomSelectionActionModeCallback(new ActionMode.Callback() {
            public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
                return false;
            }


            public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {
                return false;
            }


            public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
                return false;
            }


            public void onDestroyActionMode(ActionMode actionMode) {
            }
        });
setTextIsSelectable(false);		//双击出来原来的复制粘贴

  • ImageView '图片控件
setscaleType()					设置图片缩放的类型
setInmageResource()				设置图片
setBackgroundResource()			设置资源(item)设置给图片
getbackground()					获取资源对象(Drawable)
setimageBitmap()				根据位图(Bitmap)设置图片
setImageURI						根据路径(File)设置图片
getDrawable()					得到图片的Drawable对象
  • LinearLayout '线性布局
getChildAt()					返回指定位置的视图
getChildCount()					返回容器中的个数
addView	()						增加控件
removeAllViews()				清除控件的所有内容
  • SeekBar '单选框
setOnSeekBarChangeListener()	设置控件
  • ProgressBar '进度控件
getProgress()					得到进度
setProgress()					设置进度
  • RadioGroup '团体单选框
getCheckedRadioButtonId()		选中的ID
  • Listview '列表滚动布局
setAdapter()					设置控件适配器
setOnItemClickLihstener()		设置每个条目被点击监听器
setOnScrollListener()()			设置滚动的监听器
setDividerHeight()				设置分割线的高度
setVerticalScrollBarEnabled()	设置是否显示右侧垂直滑动条
setSelection()					设置显示到指定的位置(如果大于listview的总条目,就显示到最后的位置)
setSelector()					设置listView的状态选择器  //可以为android.R.color.transparent 为透明
smoothScrollToPosition()		平滑的到指定位置
setBackgroundResource()			设置背景

getItemAtPosition()				返回监听器getItem()方法返回的值
getFirstVisiblePosition()		得到listview第一个显示的条目的position(位置)
getLastVisiblePosition()		得到listview最后一个显示的条目的position(位置)
getCount()						得到一共有多个条目
  • OnScrollListener '滚动的监听器
onScrollStateChanged()			当滚动状态改变,触发此方法[,滚动的状态] 滚动的状态=OnScrollListener.SCROLL_STATE_IDLE(停滞状态)|SCROLL_STATE_TOUCH_SCROLL(手指触摸在屏幕上滑动)|SCROLL_STATE_FLING(手指快速的滑动一下)
onScroll()						当滚动时,触发此方法
ListAdapter(控制器)-->BaseAdapter-->ArrayAdapte,SinpleAdapter
  • BaseAdapter '滚动布局适配器
getCount()abstract				获取一共有多个条目(item)
getView()abstract				获得莫一个条目在可见屏幕显示的效果
getItem()						得到条目
getItemId()						得到条目的id
getItemViewType()				得到条目控件的类型
getViewTypeCount()				得到控件类型的数量
notifyDataSetChanged()			刷新适配器
  • CursorAdapter '游标适配器
getCursor().requery()			等同于notifyDataSetChanged刷新适配器
  • ArrayAdapte '文本适配器
SinpleAdapter '其他适配器
ScrollView	'竖直滚动的布局(可以让里面的控件滚动)
setVerticalScrollBarEnabled(false);		滚动条为隐藏的方法
  • BaseExpandableListAdapter '二级条目listview

  • GridView '可以多行条目的view

setNumColumns()					设置显示的行数
  • ScrollView '滚动的布局(可以让里面的控件滚动)

  • VideoView '视频播放器View

setVideoPath();					设置视频路径
start()							开始播放
setMediaController()			绑定控制器
  • SurfaceView '可以在子线程,大量多次更新ui的控件,单位时间内完成界面的大量多次更新
getHolder()						得到SurfaceView的控制器
SurfaceHolder 'Surface显示的控制器
addCallback()					控制器的监听
lockCanvas()					得到画板
unlockCanvasAndPost()			解除同步
  • ViewPager '图片滑动的控件(需要V4包,3.0的)
setOnpageChangeListener()		注册控件的滑动监听器
setAdapter()					注册一个适配器(pagerAdapter)
removeView()					移除一个控件
addView()						增加一个控件
setCurrentItem()				设置当前显示的条目
getCurrentItem()				得到当前显示的条目
getAdapter()					得到当前的适配器
pagerAdapter '适配器
getCount()						可以加载的数量
isViewFromObject()				判断是否使用缓存(当view对象和Object对象相同的时候就返回true)
instantiateItem()				增加View一个条目到ViewPager并返回到适配器里面
destroyItem()					销毁一个条目[,需要销毁的位置,需要销毁的View]
FragmentPagerAdapter 'fragment适配器  :这个不会销毁fragment里面的控件
getCount()						返回页面数量
getItem()						指定pager集合根据给定下标返回的页面
getPageTitle()					设置pager的指示器名字
FragmentStatePagerAdapter 'fragment适配器 :这个会销毁fragment,和fragment里面的控件
getCount()						返回页面数量
getItem()						指定pager集合根据给定下标返回的页面
OnpageChangeListener '滑动监听器
onPageScrolled()				当页面被滑动触发的方法
onPageSelected()				当页面被选中触发的方法
onPageScrollStateChanged()		当页面的状态发生变化的时候触发的方法

  • WebView '打开网页的view
getSettings();						得到设置对象
setWebViewClient()					设置webview的委托人
setWebChromeClient()				设置谷歌浏览器的委托人
goBack();							跳到上一个页面
goForward();						跳到下一个页面
canGoBack()							是否可以跳到上一个页面
canGoForward()						是否可以跳到下一个页面
setTextSize()						设置字体大小
  • WebSettings '设置的对象
setDisplayZoomControls(true);		支持缩放按钮
setUseWideViewPort(true);			支持双击功能
setJavaScriptEnabled(true);			支持js
  • WebViewClient ’ webview的委托人
onPageStarted()						开始加载页面的时候调用
onPageFinished()					当页面加载完毕的时候调用
shouldOverrideUrlLoading()			当链接需要跳转的时候调用(注意返回true处理这个事件)
  • WebChromeClient '谷歌浏览器的委托人
onProgressChanged()					加载进度发生变化的时候回调
onReceivedTitle()					得到网页标题的时候回调
onShowCustomView					播放网络视频时全屏会被调用的方法
onHideCustomView					视频播放退出全屏会被调用的
getDefaultVideoPoster				视频加载添加默认图标
getVideoLoadingProgressView			视频加载时进程loading
onReceivedTitle						网页标题
  • DrawerLayout '侧边菜单的控件
setDrawerListener()					设置actionBar和侧边菜单产生动画	//(只有设置这个监听才有动画)
isDrawerOpen()						菜单是否打开的  //这三个方法和 drawerToggle.onOptionsItemSelected(item);  //效果一样
closeDrawer()						关闭左边的菜单
openDrawer()						打开左边的菜单
  • ActionBar 标题栏
注意  ActionBar的id为:  android.R.id.home
setIcon();							设置图标
setTitle();							设置标题
setDisplayHomeAsUpEnabled(true)		显示home按钮
setDisplayShowHomeEnabled(true);	设置home按钮可以被点击
  • ActionBarDrawerToggle 'ActionBar和控件关联
 new ActionBarDrawerToggle(this, drawerLayout, R.drawable.ic_drawer_am, 0, 0);   将home按钮的返回箭头替换为汉堡包按钮
syncState()							同步ActionBar和DrawerLayout的状态
onOptionsItemSelected(item);		设置菜单点击的开关效果,如果打开就关闭

  • QNumberPicker '滑动选择
zuishao.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS);   // //设置不能修改
setDisplayedValues(zsStrings);
setMinValue(0);
setMaxValue(zsStrings.length - 1);
setValue(setvalue);
  • NestedScrollView 嵌套的ScrollView

对话框、弹框

  • AlertDialog.Builder '普通对话框工厂
setView()						设置一个自定义对话框(接受一个打气筒)
setTitle()						标题
setIcon()						设置图标
setMessage						内容
setCanceledOnTouchOutside(false);// 设置点击屏幕Dialog不消失
setCancelable()					是否可以自动取消true:可以
setPositiviButton()				增加一个确定按钮
setNegativeButton()				增加一个否定按钮
setSingleChoiceItems()			增加一个单选框
setMultiChoiceItems()			增加一个多选框
cerate()						创建一个对话框
show()							显示对话框
  • ProgressDialog '进度对话框(默认饼状)*
setTitle()						标题
setMessage() 					内容
setProgressStyle()				设置进度条的样式
STYLE_HORIZONTAL				进度条状的样式
setMax()						设置进度条的最大容量
setProgress()					显示进度
setCancelable()					是否可以取消 //默认可以取消,false为不可以取消
show()							显示对话框
setCancelable();
setCanceledOnTouchOutside();
setMessage();
setIndeterminate();
setProgress();
setProgressStyle();
setOnCancelListener();
setOnDismissListener();
dismiss()						关闭进度条
  • AlertDialog '对话框
show()							显示对话框
dismiss()						关闭对话框
  • PopupWindow 窗体的泡泡
new PopupWindow()		得到一个窗体的泡泡[控件,(-2为包裹内容),(-2为包裹内容)]
showAtLocation()		显示泡泡,并且设置显示泡泡的位置[父控件,重力(初始位置),相对于父控件位置的X偏移量,相对于父控件位置的Y偏移量]
showAsDropDown()		显示泡泡,并且设置泡泡的位置在哪个控件的下面[指定的控件,x偏移量,y偏移量]
setBackgroundDrawable	设置窗体的背景(注意没有背景颜色的泡泡窗体显示不出来,所有一定要有)[new BitmapDrawable()透明]
setOutsideTouchable()	设置窗体点击外部是否被关闭(需要有背景颜色才可以使用)
setFocusable()			设置窗体可以被点击
setOnDismissListener()	popupwindow关闭的监听器
dismiss()				关闭泡泡
实例代码:	popup = new PopupWindow(inflate, -2, -2);
            popup.setBackgroundDrawable(new ColorDrawable(0));
            popup.showAtLocation(parent, Gravity.TOP + Gravity.LEFT, 60, i[1]);

数据库

  • SQLiteOpenhelper '继承这个类就会成为数据库类
getWritebleDatabase()			得到一个可写的数据库流
getReadbleDatabase()			得到一个可读的数据库流
  • SQLiteDatabase '数据库流
--//编写Sql语句
OPEN_READONLY					flags 标记(只读)
execSQL()						编写SQ语句
rawQuery()						编写SQ语句(查询)
close()							关流
openDatabase()					打开已存在的数据库 [数据库的位置,null,标记]
--//面向对象的增删改查
insert()						增加数据//[]
delete()						删除数据
update()						修改数据
qurey()							查询元素
--//事物:保证一组操作同时成功,要么同时失败
beginTransaction()				开启事物
setTransaction()				设置事物执行成功
endTransaction()				判断事物执行成功了吗?如果没有执行成功那么,数据回滚,数据库恢复
  • ContentValues '数据
put()							添加元素
  • Cursor '游标(得到数据库信息的容器)
moveToNext()					游标指向下一个元素判断是否有值
getString()						得到游标所指向的值
getxxx()						得到游标所指向的值
close()							关流
getColumnIndex()				根据对应的名字得到索引
getCount()						得到游标里面的数量
moveToPosition()				指定游标指向的位置
  • 操作数据库
增加表格
"create table student(_id Integer primary key autoincrement,name carcha(20),age varcha(20))"
更改表格
"alter table 表名 add 字段 varcha(20)"

//增删改查普通方式
1.(db.execSQL(sql,Object[]{}))


		sql-->insert into 表名(字段1,字段2,...) values (?,?,...)
2.(db.execSQL(sql,Object[]{}))


		sql-->delete from 表名 where columnName=?
3.(db.execSQL(sql,Object[]{}))


		sql-->update 表名 set 要修改的字段 = ? where 条件 = ?
4.(db.rawQuery(sql,Object[]{}))


		sql-->select * from 表名 where 条件 = ?
5. 表中增加列  (db.execSQL(sql))
	alter table 表名 add 字段 varcha(20)




//增删改查API方式
1. 增		db.insert(表名,"",values);


2. 删		db.delete(表名,删除的条件,删除条件的数组);


3. 改		db.update(表名, values, 修改的条件, 修改条件的数组);


4. 查		db.query(表名, 需要查询的'列'名称数组, 查询的条件, 查询条件的数组, null, null,排序方式)
			参数解析
			String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit
			1 table			表名
			2 columns		需要查询的'列'名称数组,null代表查询全部列
			3 selection		查询的条件
			4 selectionArgs	查询条件的数组
			5 groupBy		一个过滤器声明如何组行,格式化为一个SQL group BY子句(不含集团本身)。通过零将导致行分组。  一般为null
			6 having		也是分组的  一般null
			7 orderBy		是否格式化排序(这个如果需要排序就排序,不需要就null)
			8 limit			限制查询返回的行数,格式化为限制条款(一般用不加这个参数的方法)

线程,网络,消息,队列

anr 开发者的保护模式,主要是主线程执行了耗时的操作导致的

  • Thread '线程类
currentThread()
setUncaughtExceptionHandler()		重写系统的异常处理器
  • ThreadPoolExecutor '线程池类
new ThreadPoolExecutor()		得到线程池对象//[int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler ]
								参数:1 corePoolSize //核心线程池数量,表示能够同时执行的任务数量
								参数:2 maximumPoolSize //最大线程池数量,其实是包含了核心线程池数量在内的
								参数:3 keepAliveTime //存活时间,表示最大线程池中等待任务的存活时间
								参数:4 unit	//存活时间的时间单位
								参数:5 workQueue //缓冲队列,超出核心线程池的任务会被放入缓存队列中等待
								参数:6 threadFactory //创建线程的工厂类
								参数:7 handler //当最大线程池也超出的时候,则拒绝执行
  • URL '网络路径
new URL();						得到路径资源
openConnection()				得到http路径连接的对象
  • HttpURLConnection 'http路径连接
setRequestMethod()				设置申请请求方式(GET)这个放必须在第一条
setConnectTimeout()				设置超时时间
setDoOutput()					设置是否可以给服务器写数据
getContenType()					服务器返回的数据类型
getResponseCode()				获得服务器的状态码 200ok 404打不开 503服务器错误
getInputStream()				得到服务器输入流对象(往服务器取数据)
getOutputStream()				得到服务器输出流对象(给服务器写数据)
getContentLength()				获得长度
setRequestProperty()			设置请求头的性质
(1)setRequestProperty("Content-Type", "application/x-www-form-urlencoded")	设置请求头的性质为Post请求
(2)setRequestProperty("Content-Length", "请求的长度的字符串")设置请求头性质需要的长度
(3)setRequestProperty("Range", "bytes="+startIndex+"-"+endIndex);设置请求头的性质只想下载资源的指定部分

  • Handler '消息处理器
sendMessage(Message)			发送消息
handlerMessage()<重写>			处理消息
post()							更新UI{Runnable}
postDelayed()					发送延时的消息
removeCallBacksAndMessages()	移除之前的延时操作[this]
removeCallbacksAndMessages(null)移除之前所有的消息
runOnUiThread()					更新UI{Runnable}
sendEmptyMessageDelayed(0,3000)	发送延时的消息
  • Looper '轮询器,(主线程启动就启动这个)
prepare()						创建轮训器//在子线程的时候,需要手动的创建,主线程会自定创建
loop()							开启轮询器
  • MessagQueue '消息队列

  • LinkedBlockingQueue 链接阻塞队列
    https://blog.csdn.net/chang_li/article/details/53886375

  • Message '消息

obj								将消息存到obj字段里面
what							给消息起名字
obtain()						得到Message的对象
getBody()						得到消息内容
  • JSONObject 'JSON对象
new JSONObject(JSON类型的字符串)		得到一个JSON对象
getString()							得到对应值的字符串
getJSONObjct()						得到对应值的JSON对象
getJSONArray()						得到对应值的JSON对象数组
toString()								得到字符串
JSONArray	'JSON数组
  • URLEncoder 'URL解码
encode(中文,编码)						把中文根据指定的编码级编码
注意:tomcat服务器用的是 iso-8859-1的编码
  • HttpClient '客户
new DefailtHttpClient()					打开浏览器
execute()								(敲回车)根据请求类型对象得到HttpResponse对象
getConnectionManager()					得到httpclient的管理
  • ClientConnectionManager 'httpclient的管理对象
closeExpiredConnections();				关闭闲置的链接,释放资源
  • HttpGet 'get请求类型
new HttpGet(path)						输入服务器地址
  • HttpPost 'post请求类型
new HttpPost(path)						输入服务器地址
setEntity()								设置需要发送的数据实体
  • HttpEntity—>UrlEncodedFormEntity '数据实体的子类
new UrlEncodedFormEntity(list<NameValuePair>,"编码");  创建一个数据实体
getContent()							得到输入流
  • HttpResponse '响应(携带所有信息)
getStatusLine()							得到状态栏
getEntity()								得到数据实体
  • StatusLine '状态栏对象
getStatusCode()							得到状态码  (一般200系列为成功)
  • NameValuePair---->BasicNameValuePair '键值对NameValuePair的子类
new BasicNameValuePair("键","值");
  • EntityUtils '数据实体工具类
toString()								将一个HttpEntity的类里面相应体的字符串
public static String get(String url){
		String result = "";
		HttpClient httpClient = new DefaultHttpClient();
		HttpGet httpGet = new HttpGet(url);
		LogUtil.e("HttpUtil", "请求的url:"+url);
		try {
			HttpResponse httpResponse = httpClient.execute(httpGet);
			if(httpResponse.getStatusLine().getStatusCode()==200){
				HttpEntity entity = httpResponse.getEntity();//获取响应体
				InputStream is = entity.getContent();//获取输入流
				ByteArrayOutputStream baos = new ByteArrayOutputStream();
				byte[] buffer = new byte[1024];//1k的缓存区
				int len = -1;
				while((len=is.read(buffer))!=-1){
					baos.write(buffer, 0, len);
				}
				//关闭流和链接
				is.close();
				httpClient.getConnectionManager().closeExpiredConnections();//关闭闲置的链接,释放资源


				result = new String(baos.toByteArray(),"UTF-8");
			}
		} catch (ClientProtocolException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		LogUtil.e("HttpUtil", "响应的数据:"+result);
		return result;
	}

  • TrafficStats '流量类
getMobileRxBytes();						总的移动网络下载流量
getMobileTxBytes();						总的移动网络上传流量
getTotalRxBytes();						总的下载流量
getTotalTxBytes();						总的上传流量
getUidRxBytes(int uid);					某个应用的下载流量(根据uid)
getUidTxBytes(int uid);					某个应用的上传流量(根据uid)

图片

  • Drawable '图片对象
new ColorDrawable()		得到颜色图片资源
setColorFilter()		设置颜色过滤器//[设置颜色,颜色混合的模式]
getIntrinsicHeight()	得到原始图片的高度
getIntrinsicWidth()		得到原始图片的宽度
  • PorterDuff.Mode '颜色混合模式
SRC_OUT					覆盖当前颜色
SRC_OVER				覆盖当前颜色
1.PorterDuff.Mode.CLEAR
  所绘制不会提交到画布上。
2.PorterDuff.Mode.SRC
   显示上层绘制图片
3.PorterDuff.Mode.DST
  显示下层绘制图片
4.PorterDuff.Mode.SRC_OVER
  正常绘制显示,上下层绘制叠盖。
5.PorterDuff.Mode.DST_OVER
  上下层都显示。下层居上显示。
6.PorterDuff.Mode.SRC_IN
   取两层绘制交集。显示上层。
7.PorterDuff.Mode.DST_IN
  取两层绘制交集。显示下层。
8.PorterDuff.Mode.SRC_OUT
 取上层绘制非交集部分。
9.PorterDuff.Mode.DST_OUT
 取下层绘制非交集部分。
10.PorterDuff.Mode.SRC_ATOP
 取下层非交集部分与上层交集部分
11.PorterDuff.Mode.DST_ATOP
 取上层非交集部分与下层交集部分
12.PorterDuff.Mode.XOR
  异或:去除两图层交集部分
13.PorterDuff.Mode.DARKEN
  取两图层全部区域,交集部分颜色加深
14.PorterDuff.Mode.LIGHTEN
  取两图层全部,点亮交集部分颜色
15.PorterDuff.Mode.MULTIPLY
  取两图层交集部分叠加后颜色
16.PorterDuff.Mode.SCREEN
  取两图层全部区域,交集部分变为透明色

  • BitmapFactory '位图工厂
decodeStream()			从流里面获得位图对象
decodeFile()			从文件
decodeResponse()		从资源
Bitemap	'位图对象
createBitmap()			创建一个空白的图片
getWidth()				得到宽
getHeight()				得到高
getConfig()				得到配置信息
compress()				保存位图图片
getConfig()				得到当前配置的位数
Config					得到配置对象
setPisel()				设置指定位置的颜色
  • Canvas '画板
drawBitmap()			作画(画位图)
drawLine()				画线
drawColor()				画板的背景颜色
drawCircle				画圆  //[X位置,Y位置,半径,画笔]
drawText()				画文字//[要画的文字,在父布局里面自己左下角的X坐标,在父布局里面自己左下角的Y坐标 ,画笔对象]
drawPath()				画不规则的图形
translate()				平移画板
save()					保存状态(可以做标记,也可以不做标记)
restore()				恢复状态
  • Path '不规则图形
moveTo()				跳到一个点 //[X轴,Y轴]
quadTo()				画一个曲线(根据上一个点继续画一个2节曲线)//[二级曲线弧度控制点X轴,二级曲线弧度控制点Y轴,下一个点的X轴,下一个点的Y轴]
close()					自动封闭(也就是将所在的路径都填充)//
lineTo()				画一个直线(根据上一个点继续画一个直线)//[下一个点的X轴,下一个点的Y轴,]
  • Point '点(可以给点作封装)
x
y
  • Paint '画笔
new Paint(Paint.ANTI_ALIAS_FLAG)  抗锯齿
ANTI_ALIAS_FLAG			抗锯齿(字体边缘圆滑)
setColor()				设置颜色
setStrokeWidth()		设置宽度
setTypeface()			设置字体[字体对象]
setColorFilter()		设置颜色过滤器
measureText()			测量文本的宽度
getTextBounds()			得到文本的范围信息给矩形对象//[文本字符串,开始索引,结束索引,矩形对象]
setTextSize()			设置字体大小
setStyle()				设置画笔样式 //[Style.FILL|Style.STROKE|Style.FILL_AND_STROKE] 只填充|只有边线|都有
// paint恢复为默认设置。  
paint.reset();  
  
// 从src目录中装载一种画笔的样式  
paint.set(src);  
  
// 设置画笔的透明度  
paint.setAlpha(a);  
  
// 设置画笔的抗锯齿情况,使画笔更为圆滑  
paint.setAntiAlias(aa);  
  
// 设个画笔的ARGB颜色色值  
paint.setARGB(a, r, g, b);  
  
// 设置画笔的颜色  
paint.setColor(color);  
  
// 设置画笔的过滤器  
paint.setColorFilter(filter);  
  
// 设置清除抖动对图像的影响,会使绘制出来的图片图像更加清晰,颜色更加平滑和饱满.  
paint.setDither(dither);  
  
// 设置粗体文字,注意设置在小字体上效果会非常差  
paint.setFakeBoldText(fakeBoldText);  
  
// 如果该项设置为true,则图像在动画进行中会滤掉对Bitmap图像的优化操作,加快速度显示  
// 注意:本设置项依赖于dither和xfermode的设置  
paint.setFilterBitmap(filter);  
  
// 给画笔做上标记,以便直接复用  
paint.setFlags(flags);  
  
// 设置画笔的隐藏模式  
paint.setHinting(mode);  
  
// 设置线性文本  
paint.setLinearText(linearText);  
  
// 设置MaskFilter,可以用不同的MaskFilter实现滤镜的效果,如滤化,立体等  
paint.setMaskFilter(maskfilter);  
  
// 设置绘制路径的效果,如点画线等  
paint.setPathEffect(effect);  
  
// 设置或清除的光栅对象。  
// 通过空清除任何以前的光栅化。为方便起见,传递的参数也回来了。  
paint.setRasterizer(rasterizer);  
  
// 设置或清除渲染对象。  
// 通过空清以前的任何材质。为方便起见,传递的参数也回来了。  
paint.setShader(shader);  
  
// 这原图层下面设置阴影层,产生阴影效果,radius为阴影的角度,dx和dy为阴影在x轴和y轴上的距离,color为阴影的颜色。如果半径为0,然后一层阴影去除。  
paint.setShadowLayer(radius, dx, dy, color);  
  
// 设置画笔带有删除线效果的  
paint.setStrikeThruText(strikeThruText);  
  
// 当画笔样式为STROKE或FILL_OR_STROKE时,设置笔刷的图形样式,如圆形样式  
// Cap.ROUND,或方形样式Cap.SQUARE  
paint.setStrokeCap(cap);  
  
// 设置笔画的倾斜度  
paint.setStrokeMiter(miter);  
  
// 设置画笔结合处的样式,Miter:结合处为锐角, Round:结合处为圆弧:BEVEL:结合处为直线。  
paint.setStrokeJoin(join);  
  
// 当画笔是空心样式时,设置画笔空心的宽度  
paint.setStrokeWidth(width);  
  
// 设置画笔的样式  
// Paint.Style.FILL(实心);  
// Paint.Style.STROKE(空心);  
// Paint.Style.FILL_AND_STROKE  
paint.setStyle(Paint.Style.FILL_AND_STROKE);  
  
// 设置该项为true,将有助于文本在LCD屏幕上的显示效果  
paint.setSubpixelText(subpixelText);  
  
// 设置绘制文字的对齐方向  
paint.setTextAlign(align);  
  
// 设置文本的区域比如中文、日文等  
paint.setTextLocale(locale);  
  
// 设置画笔文本的缩放比例  
paint.setTextScaleX(scaleX);  
  
// 设置画笔文本的大小  
paint.setTextSize(textSize);  
  
// 设置斜体文字,skewX为倾斜弧度  
paint.setTextSkewX(skewX);  
  
// 设置Typeface对象,即字体风格,包括粗体,斜体以及衬线体,非衬线体等  
paint.setTypeface(typeface);  
  
//设置带有下划线的文字效果   
paint.setUnderlineText(underlineText);  
  
//设置图形重叠时的处理方式,如合并,取交集或并集,经常用来制作橡皮的擦除效果    
paint.setXfermode(xfermode);
  • Rect '矩形(可以得到宽高信息)
height()				得到矩形的高度
width()					得到矩形的宽度
  • Typeface '字体
DEFAULT_BDLD			加粗
  • ColorMatrix '颜色矩阵
set()					设置颜色
  • ColorMatrixColorFilter '颜色矩阵过滤器
new ColorMatrixColorFilter("颜色矩阵对象");
  • Matrix '变化的矩阵(画图的规则)
setScale()				设置缩放比例
setTranslate()			平移(不能和setScale()一起使用)
setRotate()				旋转
postTranslate			在次变化平移
  • MotionEvent '触屏事件
ACTION_DOWN				单点
ACTION_UP				弹起
ACTION_MOVE				移动
getAction()				得到动作
getx()					得到坐标x(距控件的距离)
gety()					得到坐标y(距控件的距离)
getRawX()				得到坐标x(距显示屏的距离)
getRawY()				得到坐标y(距显示屏的距离)
  • Options '图片的选择
inSampleSize			设置采样率为原图的多少分之一来压缩图片
inPreferredConfig		设置图片的位数
  • ExifInterface '可以得到图片的各种信息
new ExifInterface("图片的路径")
TAG_IMAGE_WIDTH			宽
TAG_IMAGE_LENGTH		高
getAttributeInt()		得到图片的信息
  • Display '显示(手机显示屏对象)
getWidth()				得到显示屏的高
getHeight()				得到显示屏的宽
  • CompressFormat '图片的压缩格式
JPEG					jpg格式
  • LruCache '最近最少使用算法/其实就是一起map集合
new LruCache()				//得到LruCache对象[集合大小]
  • GradientDrawable '生成Drawable图片,对应的xml中的shape标签
new GradientDrawable();		//得到对象
GradientDrawable.RECTANGLE  //矩形形状
setShape()					//设置形状,默认就是矩形
setColor(rgb);				//设置颜色
setCornerRadius(radius);	//角的弧度半径
  • StateListDrawable '状态选择器对象 , 对应的xml中的selector标签
new StateListDrawable()		得到对象
addState()					//增加状态  [new int[]{android.R.attr.state_pressed}这个是状态, pressed图片或者颜色]  这个可以增加多个
setEnterFadeDuration()		//进入新的状态时候的过度动画
setExitFadeDuration()		//还原状态时候的过度动画

多媒体

  • 录音工具

频的两种录制方式-AudioRecord,MediaRecorder的使用及播放

  • MediaRecorder '录像录音
    简单的使用 https://www.cnblogs.com/01b-/p/5415908.html
  • AudioRecord
  • Toast '点击的时候显示的内容
makeText()				显示的内容
settext()				设置显示的内容
show()					显示toast
  • MediaStore '多媒体的存储室
"动作"
MediaStore.ACTION_IMAGE_CAPTURE  //相机的动作
"Extra"
MediaStore.EXTRA_OUTPUT			 //存储的位置
  • MediaPlayer '多媒体的播放器
MediaPlayer.create(this,R.raw,xxx).start()   '简单的播放器

setDataSource()			设置路径源
setLooping()			音乐是否循环
prepare()				准备开始播放音乐(主线程)
prepareAsync()			异步的准备(开启的子线程)
stop()					停止播放
release()				释放资源
isPlaying()				判断是否是播放状态
setOnCompletionListener()播放完毕的监听器
setOnPreparedListener() 准备完毕的监听器
setOnErrorListener()
seekTo()				定位播放的位置
start()					开始播放
pause()					暂停播放
getDuration()			得到总时间
getCurrentPosition()	得到当前时间
reset()					重置播放器
setDisplay()			指定多媒体的内容实在holder里面显示
  • SoundPool '短音乐播放器
注意事项:(1)音频文件放在res目录自己创建一个raw文件夹
	     (2)创建对象和加载音乐都必须要放在onCreate方法里面
new SoundPool(可以加载几个资源, 声音的类型, 质量:默认为0);
load()							加载音乐得到加载音乐的ID	[上下文,资源,默认:0]
play()							播放						[加载音乐的ID, 左声道声音的大小, 右声道声音的大小, 流的优先级:0为最低,是否循环: 0=,1=, 声音的速度]
  • AudioManager '声音的类型管理
STREAM_MUSIC					音乐类型
  • MediaController '音频控制器
mc.setAnchorView();		绑定控件
  • VideoView '视频播放器
setVideoPath();					设置视频路径
start()							开始播放
setMediaController()			绑定控制器
  • SurfaceView '可以在子线程,大量多次更新ui的控件,单位时间内完成界面的大量多次更新
getHolder()						得到SurfaceView的控制器
SurfaceHolder 'Surface显示的控制器
addCallback()					控制器的监听
lockCanvas()					得到画板
unlockCanvasAndPost()			解除同步

传感器

  • Sensor '传感器对象
TYPE_LIGHT						光线传感器
TYPE_GRAVITY					重力传感器
#define SENSOR_TYPE_ACCELEROMETER??????   1 //加速度
#define SENSOR_TYPE_MAGNETIC_FIELD?????  2 //磁力
#define SENSOR_TYPE_ORIENTATION???????   ? 3 //方向
#define SENSOR_TYPE_GYROSCOPE??????????        4 //陀螺仪
#define SENSOR_TYPE_LIGHT??????????????             5 //光线感应
#define SENSOR_TYPE_PRESSURE??????????         ? 6 //压力
#define SENSOR_TYPE_TEMPERATURE???????     ? 7 //温度
#define SENSOR_TYPE_PROXIMITY??????????        8 //接近
#define SENSOR_TYPE_GRAVITY????????????           9 //重力
#define SENSOR_TYPE_LINEAR_ACCELERATION 10//线性加速度
  • SensorEvent '传感器事件对象
values[0]
  • SensorManager. '传感器管理
SENSOR_DELAY_NORMAL

动画–>帧动画,补间动画,属性动画,GIF

  • 动画插值器Interpolator
1.interpolator定义一个动画的变化率(the rate of change)。这使得基本的动画效果(alpha, scale, translate, rotate)得以加速,减速,重复等。
2.常用Interpolator


AccelerateDecelerateInterpolator============动画开始与结束的地方速率改变比较慢,在中间的时候加速。
AccelerateInterpolator===================动画开始的地方速率改变比较慢,然后开始加速。 
AnticipateInterpolator ==================开始的时候向后然后向前甩。
AnticipateOvershootInterpolator=============开始的时候向后然后向前甩一定值后返回最后的值。
BounceInterpolator=====================动画结束的时候弹起。
CycleInterpolator======================动画循环播放特定的次数,速率改变沿着正弦曲线。
DecelerateInterpolator===================在动画开始的地方快然后慢。
LinearInterpolator======================以常量速率改变。
OvershootInterpolator====================向前甩一定值后再回到原来位置。
PathInterpolator========================新增的,就是可以定义路径坐标,然后可以按照路径坐标来跑动;注意其坐标并不是 XY,而是单方向,也就是我可以从0~1,然后弹回0.5 然后又弹到0.7 有到0.3,直到最后时间结束。

  • GIF
    Android 加载GIF图最佳实践方案:https://www.jb51.net/article/121698.htm

动画

  • Animation '动画
INFINITE					-1无限次
RELATIVE_TO_SELF			相对自己
RESTART						重新启动
setAnimationListener()		动画的监听器
  • 帧动画
AnimationDrawable extends Drawable'动画资源对象
setOneShot(false);				设置动画循环播放
addFrame();						添加一帧动画[drawable,一帧延迟时间]
start()							开启动画
  • View (view里面自带的动画)
startAnimation()			播放动画//[动画的对象]
clearAnimation()			把自己身上的动画清除掉
  • 补间动画
动画子对象--->Animation
AlphaAnimation			'透明度渐变的动画
TranslateAnimation		'平移动画				[初始的X比例,结束的X比例,初始的Y比例,结束的Y比例,动画开始点现对于那个控件,动画开始点的X轴,动画开始点现对于那个控件,动画开始点的Y轴]
ScaleAnimation			'缩放动画
RotateAnimation			'旋转动画
setDuration()				动画播放的时间长度
setRepeatCount()			设置重复播放的次数
setRepeatMode()				重复播放的模式
setFillAfter()				设置动画是否停留在结束的状态
setStartOffset()			设置动画开始执行的时间
  • AnimatorSet '动画集合对象
playTogether()				一起播放
  • view动画的xml形式
(1)在res里面创建一个文件夹anim
(2)创建xml文件,文件选择的根节点代表什么类型的动画
	set			动画集合
	alpha
	rotate
	scale
	translate
(3)在动画的util类里面加载动画
	AnimationUtils.loadAnimation(this, R.anim.trans_demo)
(4)指定的控件来开启动画
	iv.startAnimation(ta);
  • 属性动画
ValueAnimator '值得动画
ofInt()					根据开始到结束值创建动画
setDuration()			设置总时间
addUpdateListenner()	增加一个更新数据的监听器
getAnimatorValue()		得到当前动画的值
getAnimatorFraction()	得到当前动画的进度分数0-->1.0
setInterpolater()		设置插值器
start()					开启动画
  • ObjectAnimator '属性动画
ObjectAnimator.ofFloat  设置属性动画
INFINITE				无限次
INFINITE				-1无限次
RELATIVE_TO_SELF		相对自己
RESTART					重新启动
setDuration()			设置总时间
setRepeatCount()		设置循环的次数
setRepeatMode()			设置循环的类型
setInterpolater()		设置插值器//[各种动画插值器对象]
start()					开始播放


属性:rotationY		Y轴旋转
属性:rotationX		X轴旋转
属性:rotationZ		Z轴旋转
属性:rotationZ		Z轴旋转
属性:TranslationX	X轴平移
属性:TranslationY	Y轴平移
(1)设置属性动画
	ObjectAnimator.ofFloat(iv, "translationY", new float[]{0,2,4,6,8,10,15,20,25,30,50,80,100,150});
(2)设置总时间
	oa.setDuration(2000);
(3)设置循环的次数
	oa.setRepeatCount(ObjectAnimator.INFINITE);
(4)设置循环的类型
	oa.setRepeatMode(ObjectAnimator.RESTART);
(5)开始播放
	oa.start();
  • Activity界面滑动的动画
overridePendingTransition();			设置开始动画和退出动画[开始动画的资源id,和退出动画的资源id]

手势识别动作

  • GestureDetector '手势识别对象
new GestureDetector()	得到手势识别对象[手势动作监听器对象]
onTouchEvent(event);	手势动作让手势识别器来识别[MotionEvent]
  • GestureDetector.SimpleOnGestureListener '手势动作监听器对象
onFling()				当用户手指在屏幕上滑动的时候调用的方法 [e1 手指第一次触摸到屏幕的事件,e2 手指离开屏幕一瞬间对应的事件,velocityX 水平方向的速度,velocityY 垂直方向的速度 单位像素/s]
  • Activity
    onTouchEvent() 各种点击的事件回调

  • MotionEvent '触屏事件

ACTION_DOWN				单点
ACTION_UP				弹起
ACTION_MOVE				移动
ACTION_CANCEL			取消事件
getAction()				得到动作
startActivity()			启动触屏
getx()					得到坐标x
gety()					得到坐标y

意图

content.startActivity()			启动Activity意图;
content.startActivityForResult() 启动Activity意图(为了返回值)
setResult()				把当前界面的数据返回给调用它的界面
onActivityResult()		当调用的新的界面被关闭的时候会自动调用
  • Intent 意图
new Intent()			创建一个意图
setClass()				创建新的界面意图
setAction()				设置动作
setData()				设置数据(设置数据了就不能设置格式类型了)
setType()				设置格式类型(设置格式类型就不能设置数据了)
setDataAndType()		同时设置数据和格式类型
addCategory()			设置Category
setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)	 告知activity运行在增加的任务栈里面
putExtra()				存数据(键值对)
getAction()				得到动作
getXXXExtra()			取数据(键值对)(八大基本数据类型或者序列化的对象)
ACTION_CALL				打电话

Android 调用系统分享(不使用第三方)

  • PendingIntent '延期的意图
FLAG_UPDATE_CURRENT			flages 标记(马上更新的意思)
getActivity()				得到打开activity的延期意图对象
getBroadcast()				得到发送广播的延期意图兑对象
  • Uri '统一资源定位符
parse()					根据String定位
fromFile()				通过文件定位
  • 意图对象传递数据
    (1)八大基本数据类型
    (2)实现Parcelable借口的对象

  • 动作
    MediaStore.ACTION_IMAGE_CAPTURE //相机的动作
    MediaStore.ACTION_VIDEO_CAPTURE //录制视频的动作
    Intent.ACTION_NEW_OUTGOING_CALL

  • Extra
    MediaStore.EXTRA_OUTPUT //存储的路径

  • 系统的隐式意图

//跳转到激活管理员权限界面
		Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
		intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,who);
		intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
				"请开启管理员权限,开启后可以锁屏,不装扣500块钱");
		startActivity(intent);

//卸载请求的意图 运行支持版本{4.4}
Intent intent = new Intent();
	intent.setAction("android.intent.action.DELETE");
	intent.addCategory("android.intent.category.DEFAULT");
	intent.setData(Uri.parse("package:"+clickedAppInfo.getPackName()));//指定要卸载的包名
	startActivity(intent);


//安装请求的意图(覆盖安装apk文件) 运行支持版本{4.4}
Intent intent = new Intent();
	intent.setAction("android.intent.action.VIEW");
	intent.addCategory("android.intent.category.DEFAULT");
	intent.setDataAndType(
			Uri.fromFile(new File(apk_path)),
			"application/vnd.android.package-archive");
	startActivity(intent);


//分享的意图  运行支持版本{4.4}
Intent intent = new Intent();
	intent.setAction("android.intent.action.SEND");
	intent.addCategory("android.intent.category.DEFAULT");
	intent.setType("text/plain");
	intent.putExtra(Intent.EXTRA_TEXT, "推荐你使用一款软件:"+clickedAppInfo.getAppName()+",真的很好用哦");   //分享的信息
	startActivity(intent);


//打开app的详细信息页面的意图  运行支持版本{4.4}
Intent intent = new Intent("android.settings.APPLICATION_DETAILS_SETTINGS");
	intent.addCategory(Intent.CATEGORY_DEFAULT);
	intent.setData(Uri.parse("package:"+clickedAppInfo.getPackName()));
	startActivity(intent);

//打开桌面
Intent intent = new Intent();
		intent.setAction("android.intent.action.MAIN");
		intent.addCategory("android.intent.category.HOME");
		intent.addCategory("android.intent.category.DEFAULT");
		startActivity(intent)

三方框架

  • 视频
    ijkplayer http://www.oschina.net/p/ijkplayer 视频

  • 网络请求类
    1_retrofit2(最强大的网络请求框架)
    2_okhttp
    3_Volley

  • 加载图片类
    1_Glide Google推荐Android图片加载框架
    2_Image-Loader_图片
    3_fresco
    4_Volley
    5_facebook

  • 框架类
    beam_全局框架
    Dagger2
    easyrecyclerview Holder_adapter的框架

别人的笔记

https://kowalcj0.github.io/post/2018/ethical-hacking-mobile-devices-and-platforms/

你可能感兴趣的:(andorid)