Android5.0開發範例大全 讀書筆記(一)

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);
    }
相關文章
相關標籤/搜索