1. 程式人生 > >CoordinatorLayout初體驗以及標題欄下方圖片的回彈效果

CoordinatorLayout初體驗以及標題欄下方圖片的回彈效果

最近在研究material design ,瞭解到 CoordinatorLayout 這個佈局,所以研究和學習下,寫了個demo.加上拓展仿照了一個標題欄下方圖片的回彈效果,但不是使用CoordinatorLayout 實現的,下面看圖:

這裡寫圖片描述

第一個效果是使用了CoordinatorLayout的佈局

  • 什麼是CoordinatorLayout的佈局
  • 如何加入CoordinatorLayout的佈局
    compile ‘com.android.support:design:22.2.1

  • 佈局檔案

activity_coordinator1_layout.xml

<?xml version="1.0"
encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true"
> <android.support.design.widget.CoordinatorLayout android:id="@+id/coordinator_root" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- toolbar 標題欄和圖片的收縮隱藏顯示--> <android.support.design.widget.AppBarLayout android:layout_width="match_parent"
android:layout_height="256dp" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/collapsing_toolbar" android:layout_width="match_parent" android:layout_height="match_parent" app:contentScrim="?attr/colorPrimary" app:expandedTitleMarginEnd="64dp" app:expandedTitleMarginStart="48dp" app:layout_scrollFlags="scroll|exitUntilCollapsed"> <ImageView android:id="@+id/ivImage" android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="centerCrop" app:layout_collapseMode="parallax" app:layout_collapseParallaxMultiplier="0.7"/> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:layout_collapseMode="pin" app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> <!-- 內嵌的scrollView app:layout_behavior 這裡是關鍵地方 --> <android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@android:color/white" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:text="@string/lipsum"/> </android.support.v4.widget.NestedScrollView> </android.support.design.widget.CoordinatorLayout> </LinearLayout>

activity內容

public abstract class BaseActivity extends AppCompatActivity{
    protected abstract void initView();

    protected int getLayoutResId() {
        return R.layout.activity_main;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(getLayoutResId());
//        StatusBarCompat.compat(this,getResources().getColor(R.color.primary_dark));

        SystemBarTintManager tintManager = new SystemBarTintManager(this);
        tintManager.setStatusBarTintEnabled(true);
        tintManager.setNavigationBarTintEnabled(true);
        tintManager.setTintColor(getResources().getColor(R.color.primary_dark));
        initView();
    }
}
/**
 * lh on 2016/4/8.
 */
public class Coordinator1Activity extends BaseActivity{
    @Override
    protected int getLayoutResId() {
        return R.layout.activity_coordinator1_layout;
    }

    @SuppressWarnings("NewApi")
    @Override
    protected void initView() {
        Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                onBackPressed();
            }
        });

        ImageView imageView = (ImageView)findViewById(R.id.ivImage);
        imageView.setBackground(getResources().getDrawable(R.drawable.example_header));

        CollapsingToolbarLayout collapsingToolbar = (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar);
        collapsingToolbar.setTitle("lh 測試標題");
    }
}

注意:在寫這裡的時候 collapsingToolbar.setTitle(“lh 測試標題”); 這句話,我一開始的時候,並沒有加上,導致和我的狀態列和 toolbar 重疊衝突了,至於在佈局檔案中,再包一層LinearLayout 是為了加上沉浸式狀態列的效果。

  • 還有一個通過scrollView 來實現相同的效果,是一個開源的框架,我也仿照寫過demo。

第二個效果是使用了PullZoom的佈局,對於狀態了,我在原始碼的基礎上稍做了修改。因為在用Iphone 上QQ 音樂的時候,發現檢視歌手的頁面,狀態列下方圖片可以防縮,而且標題欄還跟著改變,下面的佈局和圖片的滾動互不影響,決定仿照一個。

  • 佈局檔案
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical"
              android:fitsSystemWindows="true">

    <com.myapplication2.app.newsdemo.view.pulltozoomview.PullToZoomScrollViewEx
            android:id="@+id/scroll_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>

    <RelativeLayout
            android:id="@+id/aplha_head"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:background="@color/transparent">

        <TextView
                android:id="@+id/coordinator_head_back"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:layout_centerVertical="true"
                android:background="@drawable/common_top_back_icon"/>

        <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:textSize="18sp"
                android:textColor="@color/alpha_white"/>
    </RelativeLayout>
</RelativeLayout>
  • activity
public class Coordinator2Activity extends BaseActivity{
    PullToZoomScrollViewEx scrollView;
    @Override
    protected int getLayoutResId() {
        return R.layout.activity_coordinator2_layout;
    }

    @SuppressWarnings("NewApi")
    @Override
    protected void initView() {

        loadViewForCode();

        scrollView = (PullToZoomScrollViewEx) findViewById(R.id.scroll_view);
        DisplayMetrics localDisplayMetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(localDisplayMetrics);
        int mScreenWidth = localDisplayMetrics.widthPixels;
        LinearLayout.LayoutParams localObject = new LinearLayout.LayoutParams(mScreenWidth, (int) (9.0F * (mScreenWidth / 16.0F)));
        scrollView.setHeaderLayoutParams(localObject);

        findViewById(R.id.coordinator_head_back).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onBackPressed();
            }
        });
    }

    private void loadViewForCode() {
        scrollView = (PullToZoomScrollViewEx) findViewById(R.id.scroll_view);
        View zoomView = LayoutInflater.from(this).inflate(R.layout.profile_zoom_view, null, false);
        View contentView = LayoutInflater.from(this).inflate(R.layout.profile_content_view, null, false);

        scrollView.setZoomView(zoomView);
        scrollView.setScrollContentView(contentView);
        //這裡是我自己加的一個方法,將頭部view 和高度傳過去,
        scrollView.setAplhaHead(findViewById(R.id.aplha_head),50);
    }
}

注意:如果要頭部在圖片隱藏的時候顯示,需要修改對應的java 類,這裡我使用的是PullToZoomScrollViewEx

增加如下的方法:

public void setAplhaHead(View head, int headHeightIndp) {
        alphaHeadView = head;
        mAlphaHeadHeightIndp = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, headHeightIndp, getResources().getDisplayMetrics());
    }


----------------------

public PullToZoomScrollViewEx(Context context, AttributeSet attrs) {
        super(context, attrs);
        mScalingRunnable = new ScalingRunnable();
        ((InternalScrollView) mRootView).setOnScrollViewChangedListener(new OnScrollViewChangedListener() {
            @Override
            public void onInternalScrollChanged(int left, int top, int oldLeft, int oldTop) {
                if (isPullToZoomEnabled() && isParallax()) {
                    int scrollY = mRootView.getScrollY();
                    Log.d(TAG, "onScrollChanged --> getScrollY() = " + scrollY);
                    float f = mHeaderHeight - mHeaderContainer.getBottom() + scrollY;
                    Log.d(TAG, "onScrollChanged --> f = " + f);

                    //這裡增加對top view 的顏色的改變
                    if (scrollY <= mHeaderHeight - mAlphaHeadHeightIndp) {
                        alphaHeadView.setBackgroundColor(getResources().getColor(R.color.transparent));
                    } else {
                        alphaHeadView.setBackgroundColor(getResources().getColor(R.color.primary));
                    }

                    if ((f > 0.0F) && (f < mHeaderHeight)) {
                        int i = (int) (0.65D * f);
                        mHeaderContainer.scrollTo(0, -i);
                    } else if (mHeaderContainer.getScrollY() != 0) {
                        mHeaderContainer.scrollTo(0, 0);
                    }
                }
            }
        });
    }

相關推薦

CoordinatorLayout體驗以及標題下方圖片效果

最近在研究material design ,瞭解到 CoordinatorLayout 這個佈局,所以研究和學習下,寫了個demo.加上拓展仿照了一個標題欄下方圖片的回彈效果,但不是使用CoordinatorLayout 實現的,下面看圖: 第一個效果是使

iOS-UIScrollview滑動時標題自動隱藏和顯示效果

  本文主要介紹如何實現當UIScrollview滑動時,自動隱藏和顯示標題欄的效果。其中佈局採用Autolayout的方式,並且為了程式碼精簡,使用了第三方庫Masonry,其使用參考【iOS-Masonry學習筆記】。使用它的原因是可以很好的結合動畫效果的實

angual+mui 雙上拉加載,微信裏面禁用默認事件可用,可以防止瀏覽器效果

apply length data mui this reat mobile ng- a10 //html 部分 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 15.0px Consolas; color: #2eafa9

原來操控介面可以這麼簡單----安卓上下滑動縮放頂部圖片,左右滑動結束當前Activity,及View柔和效果

先上效果圖: 上傳圖片不能超過2M,費了好大勁。每一張gif動的有點快,將就看。 首先說原理: 為activity的xml檔案根佈局新增setOnTouchListener。上下滑動和左右滑動的所有操作都是在OnTouchListener的onTouch方法中實現的,通過

QT體驗1:如何學習QT之個人淺見,以及如何讀取文本文件,在調試信息中輸出。

沒有 c++教程 最簡 將不 ror 聽說 講解 知識點 括號 2017年11月初,隨著工作崗位的調動,我轉到了研發崗,開始了漫漫程序員的成長之路。首先介紹下個人知識儲備,大一學習過C語言,沒有工程經驗,所學是為了期末考試+2級考試,考完在大學+碩士期間沒有用到編程。 來到

Material Design 實戰 之第四 —— 卡片佈局以及靈動的標題(CardView & AppBarLayout)...

本模組共有六篇文章,參考郭神的《第一行程式碼》,對Material Design的學習做一個詳細的筆記,大家可以一起交流一下: Material Design 實戰 之第一彈——Toolbar(即本文) Material Design 實戰 之第二彈——滑動選

Linux環境下如何查看內存CPU和GPU使用情況以及界面標題實現

技術分享 watch 內存 lin nvi 測試 linux環境 net 性能 查看內存和CPU 單獨查看內存使用情況的命令:free -m 查看內存及cpu使用情況的命令:top 也可以安裝htop工具,這樣更直觀, 安裝命令如下:sudo

mysql 體驗 -----(資料和位的增刪改查)

上篇隨筆說到了如何去安裝和 DOS命令 一些最簡單的操作,以及如何去鍵一個數據庫和如何建表。   這次接著來談mysql 裡資料和欄位的增刪改查 有增刪改查就會有資料型別以及資料型別的屬性 mysql資料型別和資料屬性有很多,先接觸一些最基本和最實用的的。   mysql 資料

模式識別體驗——模式識別中要處理的問題以及使用的方法

寫在前面        做完這半年的畢設,就要從小小的本科進化到研究僧階段了。本科讀的是EE,雖然對這行算是感興趣,但是還是對模式識別嚮往更多一些。剛剛接觸模式識別不到一週,照著對於新知識從框架到細節

Java JFrame隱藏標題以及最大化最小化關閉和拖動

CSDN上第一篇部落格,請大家多多支援! // 轉載請註明出處! 直入主題吧,目前主流的軟體,圖形化介面一般都沒有標題欄,優點是簡單大方。然而,介面的最大化最小化和關閉按鈕也隨之隱藏,窗體也無法拖動。因此,我總結了一些解決這些問題的思路,僅供

Android 使用CoordinatorLayout實現滾動標題效果

在Material Design裡,CoordinatorLayout通常用來作為頂層檢視,來協調處理各個子View之間的動作,從而實現各種動畫效果,如Snackbar與FloatingActionButton的配合顯示效果,就是以CoordinatorLayo

訊飛的聲紋識別API以及Android studio的體驗

【安裝時候的坑】 安裝Android studio的時候最好放c盤  因為我電腦上git 和sdk 和gradle就放在c盤 因為空間不夠studio沒有放在c盤 後來翔宇因為一直有git的root請求 認為有時候as需要呼叫c盤程式的時候沒有許可權 我看了一下 那個是a

Android通過主題樣式更改標題顏色以及文字大小和顏色

   <style name="myStyle" parent="@android:style/Theme.Holo.Light">         <item name="android:windowBackground">@android:col

Android去掉標題和全屏以及設定修改Android超時休眠時間

預設情況下,Android系統在超過N分鐘沒操作,會自動關屏並進入休眠狀態。         實際上,有些專案要求超時不休眠,如果只是針對單個應用程式,我們可以通過電源管理設定狀態來實現, 而如果要設定所有應用的超時時間,則可以參考以下方法: 方法一、調整程式碼:        Settings.

你不知道的MySQL,以及MariaDB體驗

MySQL 是一個跨世紀的偉大產品,它最早誕生於 1979 年,距今已經有 40 多年的歷史了,而如今比較主流的 Java 語言也只是 1991 年才誕生的,也就是說 MySQL 要比 Java 的誕生還早十幾年,不得不驚歎二者強大的生命力。 MySQL 的應用十分廣泛,像 Google、Taobao、F

小程序體驗:手把手教你寫出第一個小程序(一)

輸入框 個人 創建 公測 快速 nsh 成功 too 調用 本文筆者將根據quick start中的範例代碼,帶大家簡單地剖析一下小程序的運行方式,並介紹小程序開發中一些通用的特性,帶著大家一步步寫出自己的小程序。 適用對象:前端初學者,對小程序開發感興趣者 tip

vue.js2.0 自定義組件體驗

最新 解綁 然而 blog bool template 警告 rem 組件 理解 組件(Component)是 Vue.js 最強大的功能之一。組件可以擴展 HTML 元素,封裝可重用的代碼。在較高層面上,組件是自定義元素, Vue.js 的編譯器為它添加特殊功能。在有些

weblogic體驗

xsd 體驗 target java語言 註意 true 中間件 鼠標 使用 之前一直是用的tomcat,由於業務需要,需要使用weblogic部署項目,在這裏大概的記錄一下 weblogic是oracle出品的WEB容器,確切的說是一個基於JavaEE架構的中間件,使用

python體驗

list python 字典 python初體驗:1.python種類 CPython 代碼 -> C字節碼 -> 機器碼 (一行一行) pypy 代碼 -> C字節碼 -> 機器碼 全部轉換完 -> 執行 其他Python 代碼 -&g

自定義標題右鍵菜單

mman size sub append pan prot base rri import 摘自:http://stackoverflow.com/questions/4615940/how-can-i-customize-the-system-menu-of-a-wind