Scroller可以提供一种计算位移坐标的方法,scroller.startScroll(),然后
if (mScroller.computeScrollOffset()) { float x = mScroller.getCurrX(); float y = mScroller.getCurrY(); }
可以得到新的坐标点。
scrollTo和scrollBy都是view中的方法,用于view视图的移动。scrollTo是绝对位移,而scrollBy是相对位移。
使用javah得到的头文件对c和c++来说都是适用的,因为在该头文件中有下面的声明
#ifdef __cplusplus extern "C" { #endif
extern “C”是C++语言为了支持与C语言的混合编程而制定的一个策略,该用法使得在C++语言中也可以有全局的函数或变量,因此生成的头文件即可以在c文件中使用,也可以在C++文件中使用,只不过在C++中变为全局的函数而已。
JNIEXPORT、JNICALL是java中对JNI定义的宏,在NDK中可以忽略。
floor——向负无穷取整;ceil——向正无穷取整;round——四舍五入,具体算法为floor(X+0.5);
在android中利用intent传递的数据是有限的,只能传递基本数据类型、String和实现了Serializable和Parcelable接口的数据类。
android 中自定义的对象序列化的问题有两个选择一个是Parcelable,另外一个是Serializable。
一 序列化原因:
1.永久性保存对象,保存对象的字节序列到本地文件中;
2.通过序列化对象在网络中传递对象;
3.通过序列化在进程间传递对象。
二 至于选取哪种可参考下面的原则:
1.在使用内存的时候,Parcelable 类比Serializable性能高,所以推荐使用Parcelable类。
2.Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC。
3.Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelable不能很好的保证数据的持续性在外界有变化的情况下。尽管Serializable效率低点, 也不提倡用,但在这种情况下,还是建议你用Serializable 。
实现:
1 Serializable 的实现,只需要继承 implements Serializable 即可。这只是给对象打了一个标记,系统会自动将其序列化。
2 Parcelabel 的实现,需要在类中添加一个静态成员变量 CREATOR,这个变量需要继承 Parcelable.Creator 接口。
public class Book implements Parcelable { private String bookName; private String author; private int publishTime; public String getBookName() { return bookName; } public void setBookName(String bookName) { this.bookName = bookName; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public int getPublishTime() { return publishTime; } public void setPublishTime(int publishTime) { this.publishTime = publishTime; } public static final Parcelable.Creator<Book> CREATOR = new Creator<Book>() { public Book createFromParcel(Parcel source) { Book mBook = new Book(); mBook.bookName = source.readString(); mBook.author = source.readString(); mBook.publishTime = source.readInt(); return mBook; } public Book[] newArray(int size) { return new Book[size]; } }; public int describeContents() { return 0; } public void writeToParcel(Parcel parcel, int flags) { parcel.writeString(bookName); parcel.writeString(author); parcel.writeInt(publishTime); } }
在Android中Context是一个随处都会见到的类,因为Context定义了应用程序的基础信息与操作。下面是关于Context的一些信息:
1、Context是一个抽象类,其中定义了一些应用程序的基本操作和信息;ContextImpl是Context的实现类,具体实现了那些基本操作。
2、ContextWrapper是继承自Context类,简单地对Context进行了一层包装,之后Activity、Service都继承自该类,这也就是为什么我们在使用的过程中可以把Activity.this、Service.this当作Context的原因。
3、使用Context我们可以获得一些应用级别的操作,如startActivity、startService、getSharePreference等。
总体来说Context描述的是一个应用程序的应用场景。
LinearLayout的layout_weight会使子view进行多次mearsure操作,使用RelativeLayout来优化,具体做法是
设置参考点,用align来拉伸子view:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <View android:id="@+id/center_point" android:layout_width="0dp" android:layout_height="0dp" android:layout_centerInParent="true" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@android:color/white" android:layout_alignParentLeft="true" android:layout_toLeftOf="@id/center_point" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@android:color/white" android:layout_alignParentRight="true" android:layout_toRightOf="@id/center_point" /> </RelativeLayout></span>
也是拉伸的一种方式,达到LinearLayout的layout_weight效果
<span style="font-size:14px;"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="?android:attr/listPreferredItemHeight" android:padding="6dip"> <ImageView android:id="@+id/icon" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_alignParentTop="true" android:layout_alignParentBottom="true" android:layout_marginRight="6dip" android:src="@drawable/icon" /> <TextView android:id="@+id/secondLine" android:layout_width="fill_parent" android:layout_height="26dip" android:layout_toRightOf="@id/icon" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:singleLine="true" android:ellipsize="marquee" android:text="Simple application that shows how to use RelativeLayout" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_toRightOf="@id/icon" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:layout_above="@id/secondLine" android:layout_alignWithParentIfMissing="true" android:gravity="center_vertical" android:text="My Application" /> </RelativeLayout></span>
参考链接:http://android-developers.blogspot.com/2009/02/android-layout-tricks-1.html
fillBefore,startAnimation时是否将View显示为动画的起始状态,主要针对包含startOffset的动画,默认值为true。
举个例子:对view作alpha动画,当前view的alpha是0.5,动画alpha从0到1变化,startOffset为1000,当view.startAnimation的时候,等待1000ms才会看到alpha的变化从0到1,fillBefore为true时,startAnimation时就会将view的alpha变为0,而不是等到1000ms之后才变为0;
fillAfter,动画结束后是否将View显示为动画的结束状态,默认为false;
fillEnable,控制fillBefore,当fillEnable为true时,fillBefore才会起作用;否则fillEnable为false时,忽略fillBefore的值,始终当作fillBefore=true来处理。默认为false
参考链接 http://graphics-geek.blogspot.com/2011/08/mysterious-behavior-of-fillbefore.html
用于将动画设定里的相对值转换到真实值,比如TranslateAnimation里就可以设置偏移量相对parent还是对self,这里设置的是一个比例值,initalize方法会传入自己的宽高和父控件的宽高,使用resolveSize()转换。