- 沉浸式狀態(tài)欄
styles-v19
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowTranslucentStatus">true</item>
</style>
styles-v21
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:windowTranslucentStatus">true</item>
</style>
說(shuō)明: 設(shè)置狀態(tài)欄透明唤衫,可以讓ContentView的內(nèi)容繪制到狀態(tài)欄
- fitsSystemWindows
請(qǐng)參考注釋
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.brandy.blurtoolbar.MainActivity">
<ScrollView
android:id="@+id/scrollView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:overScrollMode="never">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView
android:id="@+id/top_img"
android:layout_width="match_parent"
android:layout_height="300dp"
android:scaleType="centerCrop"
android:src="@mipmap/img_test" />
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/content" />
</LinearLayout>
</ScrollView>
<FrameLayout
android:id="@+id/blur_content"
android:layout_width="match_parent"
android:layout_height="80dp">
<ImageView
android:id="@+id/bg_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"></ImageView>
<!--注意這里toolbar的高度用wrapcontent啼止, 這樣設(shè)置android:fitsSystemWindows="true"時(shí)须蜗,toolbar的高度會(huì)增加到statusbarHeight + toolbarHeight -->
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true"
android:minHeight="?attr/actionBarSize"
app:theme="@style/MyToolbar"
app:title=" "
app:titleTextAppearance="@style/ToolbarTextAppearance.Title"></android.support.v7.widget.Toolbar>
</FrameLayout>
</FrameLayout>
- 實(shí)現(xiàn)起來(lái)就很容易了
- 將toolbar透明度設(shè)置為0奇瘦,初始設(shè)置bg_view透明度為0
- 加載高度高斯模糊的圖片到bg_view和top_img
Glide.with(MainActivity.this).load(R.mipmap.img_test)
.centerCrop()
// 設(shè)置高斯模糊
.bitmapTransform(new BlurTransformation(MainActivity.this, 20, 20))
.into(top_img);
- 監(jiān)聽(tīng)ScrollView的滑動(dòng),根據(jù)滑動(dòng)的距離來(lái)計(jì)算并修改bg_view的透明度
@Override
public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
if (topImg_height - mTopHeight >= 0) {
if (scrollY < topImg_height) {
float ratio = (float) scrollY / (float) (topImg_height - mTopHeight);
Log.e(TAG, "onScrollChange: ratio = " + ratio);
if (ratio <= 1 && ratio >= 0) {
bg_view.setAlpha(ratio);
}
} else {
bg_view.setAlpha(1.0f);
}
}
}
- 補(bǔ)充
//獲取Toolbar的系統(tǒng)默認(rèn)高度
private int getToolbarHeight() {
return getResources().getDimensionPixelSize(R.dimen.abc_action_bar_default_height_material);
}
//獲取Statusbar的高度
private float getStatusbarHeight() {
int statusBarHeight1 = -1;
//獲取status_bar_height資源的ID
int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
//根據(jù)資源ID獲取響應(yīng)的尺寸值
return getResources().getDimensionPixelSize(resourceId);
}
return 0;
}
在布局中鹦牛,blur_content給定了一個(gè)高度(80dp)羹幸,在獲取到這兩個(gè)高度之后,需要重新修改blur_content的高度赁遗,來(lái)達(dá)到更好的效果(其實(shí)最好是獲取Toolbar測(cè)量后的高度)
參考文章
http://www.open-open.com/lib/view/open1455771321605.html
http://www.reibang.com/p/1995b7135073
http://blog.csdn.net/a_running_wolf/article/details/50477965