string.xml中數組的創建
<string-array name="transitions">
<item>Fade</item>
<item>Slide</item>
<item>Explode</item>
</string-array>
- Activity中的調用
String[] Array = getResources().getStringArray(R.array.transitions);
getPosition \ getLayoutPosition \ getAdapterPosition
- getPosition(); 查閱資料後發現[已棄用]
- getLayoutPosition(); [條目在最新佈局計算中的位置]
- getAdapterPosition(); [條目在是適配器中的位置]
getLayoutPosition vs getAdapterPosition
這兩種類型的位置是等同的,除非在分發adapter.notify*事件和更新佈局時。
adapter和layout的位置會有時間差(<16ms), 如果你改變了Adapter的數據然後刷新視圖, layout需要過一段時間纔會更新視圖, 在這段時間裏面, 這兩個方法返回的position會不一樣.
在notifyDataSetChanged之後並不能馬上獲取Adapter中的position, 要等佈局結束之後才能獲取到.
而對於Layout的position, 在notifyItemInserted之後, Layout不能馬上獲取到新的position, 因爲佈局還沒更新(需要<16ms的時間刷新視圖), 所以只能獲取到舊的, 但是Adapter中的position就可以馬上獲取到最新的position.
返回佈局位置的方法使用最近一次佈局運算後的位置,如getLayoutPosition()
和findViewHolderForLayoutPosition(int)
。這些位置包含了最近一次佈局運算後的變化。你可以根據這些位置來與用戶正在屏幕上看到的保持一致。比如,你有一個條目列表,當用戶請求第5個條目時,你可以使用這些方法來匹配用戶看到的。
另外一系列方法與AdapterPosition關聯,比如getAdapterPosition()
和findViewHolderForAdapterPosition(int)
。當你想獲得條目在更新後的適配器中的位置使用這些方法,即使這些位置變化還沒反映到佈局中。比如,你想訪問適配器中條目的位置時,就應該使用getAdapterPosition()
。注意,如果notifyDataSetChanged()
已經被調用而且還沒計算新佈局,這些方法或許不能夠計算適配器位置。所以,你要小心處理這些方法返回NO_POSITION和null的情況。
總之,當使用RecycleView.LayoutManager時使用佈局位置。與此同時,使用RecycleView.Adapter時,使用適配器位置。
RecyclerView.ViewHolder - getLayoutPosition vs getAdapterPosition
AnimatedVectorDrawable
<vector>
元素的矢量資源,在res/drawable/(文件夾)
<animated-vector>
元素的矢量資源動畫,在res/drawable/(文件夾)
< objectAnimator>
元素的一個或多個對象動畫器,在res/anim/(文件夾)
矢量資源動畫能創建<group>
和<path>
元素屬性的動畫。<group>
元素定義了一組路徑或子組,並且<path>
元素定義了要被繪製的路徑。
例子
<span style="font-size:18px;"><animated-vector
xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/ic_remove">
<target
android:name="@string/remove"
android:animation="@animator/remove_to_add" />
<target
android:name="@string/groupAddRemove"
android:animation="@animator/rotate_remove_to_add" />
</animated-vector></span>
- ic_remove.xml
<?xml version="1.0" encoding="UTF-8"?> <vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="@dimen/add_remove_width" android:height="@dimen/add_remove_height" android:viewportHeight="@integer/add_remove_viewport_height" android:viewportWidth="@integer/add_remove_viewport_width"> <group android:name="@string/groupAddRemove" android:pivotX="@integer/add_remove_pivot_x" android:pivotY="@integer/add_remove_pivot_y"> <path android:fillColor="@color/add_remove_stroke_color" android:pathData="@string/path_remove"/> </group> </vector>
mAddToRemoveDrawable = (AnimatedVectorDrawable) getDrawable(R.drawable.avd_add_to_remove);
mRemoveToAddDrawable = (AnimatedVectorDrawable) getDrawable(R.drawable.avd_remove_to_add);
AnimatedVectorDrawable drawable = mIsAddState ? mRemoveToAddDrawable : mAddToRemoveDrawable; mAddRemoveImage.setImageDrawable(drawable); drawable.start();