1.在View的OnTouch事件中获取坐标,有两个方法getRawx(),getX,第一个是获取到的基于整个屏幕的坐标(绝对坐标),第二个是在父控件中的坐标(视图坐标)。
2. offsetLeftAndRight(offset)
offsetTopAndBottom(offset)
这两个方法在设置View偏移的时候起作用,可同时移动是对左右,上下方法的封装。
3.LayoutParams 类是对View 中布局,位置,大小参数的封装。要使用View的该属性动态的改变View的大小等,前提是View必须要有父布局,并且得到的LayoutParams必须要强制转换成父布局多对应的LayoutParams,然后设置属性。
LinearLayout.LayoutParams layoutParam=(LinearLayout.LayoutParams) view.getLayoutParams();
也可以直接使用下面的方法,忽略父类的布局,设置View的Margin值改变,但前提是View必须是有父布局的。
ViewGroup.MarginLayoutParams params=(ViewGroup.MarginLayoutParams)view.getLayoutParams();
4.setContentView(R.layout.value)这个方法可以多次调用,但是显示的布局总是会被最后一次设置的布局覆盖,但是被覆盖的的View仍然是加在了View树上。
5.Android 系统中已经提供的单位换算,dpTopx等
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,value, getResources().getDisplayMetrics());
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, value, getResources().getDisplayMetrics());
6.(1)XMl中的绘图技术,可以自己使用下面方法,将图片直接转换成Bitmap
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="" >
</bitmap
(2),shape文件的属性
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >--指定图形(oval,Line,ring)
<corners //---------------设置圆环角度
android:bottomLeftRadius=""
android:bottomRightRadius=""
android:radius="2dp"
android:topLeftRadius=""
android:topRightRadius="" >
</corners>
<gradient></gradient>渐变
<padding></padding>边距值
<size></size>大小
<solid></solid>填充颜色
<stroke android:width="" android:color=""></stroke>边框
</shape>
(3)layer-list实现图层的嵌套
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
<item android:drawable="">
</item>
<item android:drawable="">
</item>
</layer-list
(4)selector中可以嵌套shape文件作为item
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape></shape>
</item>
</selector>
Rect scrollBounds = new Rect();
scrollView.getHitRect(scrollBounds);
if (childView.getLocalVisibleRect(scrollBounds)) {
//子控件至少有一个像素在可视范围内
// Any portion of the childView, even a single pixel, is within the visible window
} else {
//子控件完全不在可视范围内
// NONE of the childView is within the visible window
}
7.创建透明的Drawable,用于为Popwindow 设置背景颜色,防止Popwindow点击外部不消失
Drawable drawable=new ColorDrawable(Color.TRANSPARENT);8.动态注册广播与静态注册广播的区别
动态注册广播后只有在应用打开后才能接收到广播,但静态注册广播后,在应该关闭转态下仍然能够接受到广播。
广播分为有序广播和无序广播,本地广播:
(1)有序广播发送
sendOrderedBroadcast();
(2)无序广播发送
sendBroadcast();(3)本地广播借用一个类完成LocalBroadcastManager;9 Gson的使用 如果需要转换的类包括泛型,那么也需要用到TypeToken,通过这个类可以获取具体的类型
10.内存不足时的回调方法Gson gson = new Gson(); //序列化 MyObject myobj = new MyObject(); String jsonstr = gson .toJson(myobj); //反序列化 MyObject myobj = gson.fromJson(jsonstr, MyObject.class); //序列化数组 String[] days = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; String numbersJson = gson.toJson(days); //序列化集合 List<String> myobjs = new ArrayList<String>(); String jsonstr = gson.toJson(myobjs); //反序列化集合数组 List<MyObject> myobjs = gson.fromJson(str, new TypeToken<ArrayList<MyObject>>(){}.getType()); // Deserialization Type collectionType = new TypeToken<Collection<Integer>>(){}.getType(); Collection<Integer> ints2 = gson.fromJson(json, collectionType);
onLowMemory& onTrimMemory简介:
OnLowMemory是Android提供的API,在系统内存不足,所有后台程序(优先级为background的进程,不是指后台运行的进程)都被杀死时,系统会调用OnLowMemory。
OnTrimMemory是Android 4.0之后提供的API,系统会根据不同的内存状态来回调。根据不同的内存状态,来响应不同的内存释放策略。 11.利用Android Framework里面优化过的容器类,例如SparseArray, SparseBooleanArray, 与 LongSparseArray。 通常的HashMap的实现方式更加消耗内存,因为它需要一个额外的实例对象来记录Mapping操作。 另外,SparseArray更加高效在于他们避免了对key与value的autobox自动装箱,并且避免了装箱后的解箱。
使用ProGuard来剔除不需要的代码 ProGuard能够通过移除不需要的代码,重命名类,域与方法等方对代码进行压缩,优化与混淆。使用ProGuard可以使得你的代码更加紧凑,这样能够使用更少mapped代码所需要的RAM。 对最终的APK使用zipalign 在编写完所有代码,并通过编译系统生成APK之后,你需要使用zipalign对APK进行重新校准。如果你不做这个步骤,会导致你的APK需要更多的RAM,因为一些类似图片资源的东西不能被mapped。 Notes: Google Play不接受没有经过zipalign的APK