Android5.0開發範例大全(第4版)android
Dave Smith與Jeff Friesen著ide
書本的內容是5.0的一些新特性,挺厚的。不過由於是歪果仁寫的,翻譯過來再看總有一種說不清道不明的隔膜。函數
我本身是有強迫症的,圖書館借的書總想看到最後一頁。因而斷斷續續花了一個月終於啃完,滿分10分我給6分。oop
如下草草記錄下我的認爲的新鮮內容。佈局
(一)佈局和視圖動畫
1.1樣式化常見組件this
1.相同的樣式能夠在styles.xml中定義,樣式之間存在繼承關係。spa
2.主題是一種全局化的樣式線程
1.3自定義視圖翻譯
1.構造函數有三種
View(Context context) //經過Java代碼構造視圖 View(Context context, AttributeSet attrs)//經過XML填充視圖,AttributeSet 包括附加到視圖的XML元素全部屬性 View(Context context, AttributeSet attrs, int defStyleAttr)//與前一個方法相似,在將樣式屬性添加到XML元素時調用
2.測量時的getMeasurement()方法,基本是固定寫法
private int getMeasurement(int measureSpec, int contentSize) { int specSize = MeasureSpec.getSize(measureSpec); switch (MeasureSpec.getMode(measureSpec)) { case MeasureSpec.AT_MOST: return Math.min(specSize, contentSize); case MeasureSpec.UNSPECIFIED: return contentSize; case MeasureSpec.EXACTLY: return specSize; default: return 0; } }
1.4動畫視圖
1.ViewPropertyAnimator方法是對視圖內容作動畫最便利的方法,但僅限於簡單動畫
textView.animate().alpha(0f).translationX(200f).setDuration(500);
其中全部方法都會在一塊兒執行在(主線程的Looper中)
2.ObjectAnimator能夠實現複雜動畫
mFlipper = ObjectAnimator.ofFloat(mFlipImage, "rotationY", 0f, 360f).setDuration(2000); mFlipper.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { if (animation.getAnimatedFraction() >= 0.25f && mIsHeads) { mFlipImage.setImageBitmap(mTailsImage); mIsHeads = false; } if (animation.getAnimatedFraction() >= 0.75 && !mIsHeads) { mFlipImage.setImageBitmap(mHeadsImages); mIsHeads = true; } } }); }
還能夠添加監聽器
@Override public boolean onTouchEvent(MotionEvent event) { mFlipper.start(); return true; }
1.5佈局變化時的動畫
1.在XML中添加 android:animateLayoutChanges="true",便可實現任何ViewGroup改變佈局時的動畫效果
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <Button android:onClick="add" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="add"/> <LinearLayout android:id="@+id/ll_add" android:layout_width="match_parent" android:layout_height="wrap_content" android:animateLayoutChanges="true" android:orientation="vertical" /> </LinearLayout>
1.6實現針對具體場景的佈局
在res下建立不一樣的資源文件夾便可1.針對不一樣方向
resource-land
resource-port
2.針對不一樣尺寸
resource-small:最小尺寸426dp*320dp
resource-medium:最小尺寸470dp*320dp
resource-large:最小尺寸640dp*480dp
resource-xlarge:最小尺寸960dp*720dp
3.佈局別名
<resources> <item name="rename" type="layout">@layout/name</item> </resources>
通常狀況下都是3者聯合起來使用
1.7自定義AdapterView的空視圖
調用AdapterView.setEmptyView()
1.11自定義過分動畫
1.在Activity切換時實現動畫效果,通常要在res/anim下建立4個互補的動畫
如activity_close_enter.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <rotate android:fromDegrees="-90" android:toDegrees="0" android:pivotX="0%" android:pivotY="0%" android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true" android:duration="500"/> <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true" android:duration="500"/> </set>
activity_close_exit.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <rotate android:fromDegrees="0" android:toDegrees="90" android:pivotX="0%" android:pivotY="0%" android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true" android:duration="500"/> <alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true" android:duration="500"/> </set>
activity_open_enter.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <rotate android:fromDegrees="90" android:toDegrees="0" android:pivotX="0%" android:pivotY="0%" android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true" android:duration="500"/> <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true" android:duration="500"/> </set>
activity_open_exit.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <rotate android:fromDegrees="0" android:toDegrees="-90" android:pivotX="0%" android:pivotY="0%" android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true" android:duration="500"/> <alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true" android:duration="500"/> </set>
接着在Activity中調用以下代碼便可
public void startActivity(View view) { Intent intent=new Intent(this,SecondActivity.class); startActivity(intent); overridePendingTransition(R.anim.activity_open_enter,R.anim.activity_open_exit); finish(); overridePendingTransition(R.anim.activity_close_enter,R.anim.activity_close_exit); }