热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

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'

第一步:生成布局视图


第二步:直接上其他主要的代码,其注释很详细,不多说

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 顶部标题栏随滑动时的渐变隐藏和渐变显示效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


推荐阅读
  • 之前一直不明白package与install的区别,今天测试了下。如果b项目依赖a项目,而a打了包(package),jar仅仅时打到了a项目的target下。这时编译b项目,还是 ... [详细]
  • 前期部署1.JDK安装,配置PATH2.下载spark-1.6.1-bin-hadoop2.6.tgz,并上传到服务器解压3.在 usr 下创建软链接到目标文件夹4.修改配置文件, ... [详细]
  • android anko,Anko for Android
    Anko是一个使开发Android应用更简单更快捷的库,Anko使你的代码简洁易懂,使开发者不用再在意AndroidSDK对Java版本的限制(目前还不支持Java8。).Anko ... [详细]
  • 本文实例讲述了Android调用手机拍照功能的方法。分享给大家供大家参考。具体如下:一、main.xml布局文件:android:orientation ... [详细]
  • 刘汝佳书上用的是set,通过集合来查找.count()和删除.erase().这个方法比我的要好,用时更短。我觉得map也能完成这个任务,但是其删除并不方便,需要先查找fi ... [详细]
  • 本文目录一览:1、哪有免费的JAVA教程?2、 ... [详细]
  • 文档地址:https:github.comaxiosaxiosaxios理解和使用1.请求配置1{2请求服务器的URL3url:'user',45method创 ... [详细]
  • 开发笔记:Mavent——学Java不会Maven,怎么行
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Mavent——学Java不会Maven,怎么行相关的知识,希望对你有一定的参考价值。 ... [详细]
  • IOC是spring的核心技术之一。在spring中IOC(控制反转)就是由IOC容器来控制程序࿰ ... [详细]
  • Mybatis_04日志
    前几天临近期末考试,一直在准备考试,吐槽一下,这个学期的考试真是全背书,服了,背吐了。考完试到元旦又放肆了几天 ... [详细]
  • 用idea创建项目,默认是单模块项目的。如果一个项目比较大,包含多个子系统,可能会有一些公共的东西,独立出来, ... [详细]
  • AOP是Spring的核心,Spring不但自身对多种框架的集成是基于AOP,并且以非常方便的形式暴露给普通使用者。以前用AOP不多,主要是因为它以横截面的方式插入到主流程中,担心导致主流程代码 ... [详细]
  • 三步打造安全可靠的个人数据中心
    2009年了,网速更快了,上网的人更多了,病毒***也更猖獗了,我们装系统也装的更勤了,嘿嘿问题当然也更多了。 ... [详细]
  • <!--先下载jar包,然后在仓库中手动安装,下面是遇到的两个例子--><!--第一个-- ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了微信服务商的分账功能总结相关的知识,希望对你有一定的参考价值。概要基于官方文档:服务商分账接口文档,根据我们自身的需求开发功能。此 ... [详细]
author-avatar
Binggo89
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有