国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android 頂部標題欄隨滑動時的漸變隱藏和漸變顯示效果

2019-10-22 18:35:27
字體:
來源:轉載
供稿:網友

各位早上好,話不多說,先上效果圖:

android標題欄滑動顯示隱藏,android,標題欄漸變

注意頂部:首頁TextView的變化(顯示和隱藏)!

首先分析下:UI狀態,其是由RecyclerView添加頭部組成+RecyclerView

頭部添加和RecyclerView分別引用如下:具體的分裝數據的過程這里就不在說明,下篇博客會更加深入的寫關于

RecyclerView總添加多種不同type類型

compile 'com.bartoszlipinski.recyclerviewheader:library:1.2.1'compile 'com.android.support:recyclerview-v7:25.3.1'

第一步:生成布局視圖

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"       xmlns:tools="http://schemas.android.com/tools"       android:background="#f2f2f2"       android:layout_width="match_parent"       android:layout_height="match_parent">  <android.support.v7.widget.RecyclerView    android:id="@+id/recycler"    android:layout_width="match_parent"    android:layout_height="match_parent"/>  <TextView    android:background="#ffffff"    android:paddingTop="5dp"    android:paddingBottom="5dp"    android:gravity="center_horizontal"    tools:visibility="visible"    android:textColor="#000000"    android:textSize="20sp"    android:id="@+id/home_text"    android:visibility="invisible"    android:text="首頁"    android:layout_width="match_parent"    android:layout_height="wrap_content"/></FrameLayout>

第二步:直接上其他主要的代碼,其注釋很詳細,不多說

public class MainActivity extends AppCompatActivity {  private TextView mTextView;  private int mTextViewHeight;  private RecyclerView mRecyclerView;  private RecyclerViewHeader mRecyclerViewHeader;  //頭部圖片(輪播圖的高度)  private int mRecyclerHeaderBannerHeight;  //頭部的高度  private int mRecyclerHeaderHeight;  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    mTextView = (TextView) findViewById(R.id.home_text);    //recyclerView填充數據(忽略不計)    initData();    mRecyclerView = (RecyclerView) findViewById(R.id.recycler);    mRecyclerView.setLayoutManager(new LinearLayoutManager(this));    mRecyclerView.setAdapter(mAdapter);    //獲取到文本的高度    mTextViewHeight = mTextView.getHeight();    //輪播圖片的高度--和xml圖片的高度是一樣的    mRecyclerHeaderBannerHeight = (int) getResources().getDimension(R.dimen.home_page_banner_height);    //RecyclerView每個Item之間的距離,和Adapter中設置的距離一樣    final int recyclerItemHeight = (int) getResources().getDimension(R.dimen.home_page_list_item_margin_top);    //添加頭部視圖,其布局文件就忽略    mRecyclerViewHeader = RecyclerViewHeader.fromXml(this, R.layout.list_item_prime_product_header);    //設置其滑動事件    mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {      @Override      public void onScrolled(RecyclerView recyclerView, int dx, int dy) {        //設置其透明度        float alpha = 0;        int scollYHeight = getScollYHeight(true, mRecyclerHeaderHeight);        //起始截止變化高度,如可以變化高度為mRecyclerHeaderHeight        int baseHeight = mRecyclerHeaderBannerHeight - recyclerItemHeight - mTextViewHeight;        if(scollYHeight >= baseHeight) {          //完全不透明          alpha = 1;        }else {        //產生漸變效果          alpha = scollYHeight / (baseHeight*1.0f);        }        mTextView.setAlpha(alpha);        super.onScrolled(recyclerView, dx, dy);      }    });    //將頭部視圖添加到RecyclerView中    mRecyclerViewHeader.attachTo(mRecyclerView);    //第一次進來其狀態顯示    mRecyclerViewHeader.post(new Runnable() {      @Override      public void run() {        mRecyclerHeaderHeight = mRecyclerViewHeader.getHeight();        mTextViewHeight = mTextView.getHeight();        mTextView.setVisibility(View.VISIBLE);        mTextView.setAlpha(0);      }    });  }

第三步:獲取其滑動的距離

/**   * 計算RecyclerView滑動的距離   * @param hasHead 是否有頭部   * @param headerHeight RecyclerView的頭部高度   * @return 滑動的距離   */  private int getScollYHeight(boolean hasHead, int headerHeight) {    LinearLayoutManager layoutManager = (LinearLayoutManager) mRecyclerView.getLayoutManager();    //獲取到第一個可見的position,其添加的頭部不算其position當中    int position = layoutManager.findFirstVisibleItemPosition();    //通過position獲取其管理器中的視圖    View firstVisiableChildView = layoutManager.findViewByPosition(position);    //獲取自身的高度    int itemHeight = firstVisiableChildView.getHeight();    //有頭部    if(hasHead) {      return headerHeight + itemHeight*position - firstVisiableChildView.getTop();    }else {      return itemHeight*position - firstVisiableChildView.getTop();    }  }

以上:就可以實現其效果!

以上所述是小編給大家介紹的Android 頂部標題欄隨滑動時的漸變隱藏和漸變顯示效果,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 磐石市| 明溪县| 巴马| 修文县| 车险| 加查县| 梨树县| 尉氏县| 北川| 公主岭市| 乐至县| 施甸县| 唐山市| 马鞍山市| 泽普县| 兴城市| 大石桥市| 当雄县| 祥云县| 茌平县| 北海市| 海盐县| 万州区| 霍邱县| 广宁县| 徐闻县| 镇坪县| 新昌县| 长海县| 高唐县| 逊克县| 邵武市| 武清区| 岳普湖县| 昭通市| 卓资县| 沈丘县| 塔城市| 句容市| 汤阴县| 柳州市|