安卓顶部标题栏随页面的滑动渐变

android页面滑动时,顶部title背景渐变的实现 在淘宝的商品详情页,我们会看到顶部的title背景颜色随着scrollView的上下滑动而渐变,这样的功能在我们应用中会经常用到,今天就来说一下我实现下这种功能方法,当然方法可能比较笨,看到博客的大牛,希望能得到你们的指点。 首先先解释一下基本原理:我们的思路是重写ScrollView,实现ScrollView的滑动监听,在ScrollView滑动的过程中,对顶部Title做出相应的处理: 看 阅读详情

我看到越来越多的应用使用这样的效果,如QQ空间5.0的主界面,确实很好看!大概就搜了一下相关的实现方式,发现早就有了相关的方案:

仿QQ空间滚动ActionBar透明度变化Demo

还有我在github上看到就有这样的实现方式,这也是本博文的主要核心内容:

有图:
这里写图片描述

这是Demo结构:

这里写图片描述

1.FadingActionBarHelper.java 这个类是处理Actionbar的核心类,处理对scroll事件对actionbar背景色alpha的处理。

public class FadingActionBarHelper {

    private static final String TAG = FadingActionBarHelper;

    private int mAlpha = 255;
    private Drawable mDrawable;
    private boolean isAlphaLocked;

    private final ActionBar mActionBar;

    public FadingActionBarHelper(final ActionBar actionBar) {
        mActionBar = actionBar;
    }

    public FadingActionBarHelper(final ActionBar actionBar, final Drawable drawable) {
        mActionBar = actionBar;
        setActionBarBackgroundDrawable(drawable);
    }

    public void setActionBarBackgroundDrawable(Drawable drawable) {
        setActionBarBackgroundDrawable(drawable, true);
    }

    @TargetApi(Build.VERSION_CODES.KITKAT)
    public void setActionBarBackgroundDrawable(Drawable drawable, boolean mutate) {
        mDrawable = mutate ? drawable.mutate() : drawable;
        mActionBar.setBackgroundDrawable(mDrawable);
        if (mAlpha == 255) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
                mAlpha = mDrawable.getAlpha();
        } else {
            setActionBarAlpha(mAlpha);
        }
    }

    /**
     * An {@link android.app.ActionBar} background drawable.
     *
     * @see #setActionBarBackgroundDrawable(android.graphics.drawable.Drawable)
     * @see #setActionBarAlpha(int)
     */
    public Drawable getActionBarBackgroundDrawable() {
        return mDrawable;
    }

    /**
     * Please use this method for global changes only!
     * This is helpful when you need to provide something like
     * Navigation drawer: lock ActionBar and set
     * {@link android.graphics.drawable.Drawable#setAlpha(int)}
     * to {@link #getActionBarBackgroundDrawable()} directly.
     *
     * @param alpha a value from 0 to 255
     * @see #getActionBarBackgroundDrawable()
     * @see #getActionBarAlpha()
     */
    public void setActionBarAlpha(int alpha) {
        if (mDrawable == null) {
            Log.w(TAG, Set action bar background before setting the alpha level!);
            return;
        }
        if (!isAlphaLocked) {
            mDrawable.setAlpha(alpha);
            View view = mActionBar.getCustomView();
            if(view!=null){
                //这里是对自定义actionbar背景的处理,我这边就草草了事了
                if(alpha>=55){
                    view.findViewById(R.id.search_button).setBackgroundResource(R.drawable.search);
                    view.findViewById(R.id.refresh_button).setBackgroundResource(R.drawable.refresh);
                }else{
                    view.findViewById(R.id.search_button).setBackgroundResource(R.drawable.skin_nav_icon_l_search_rev);
                    view.findViewById(R.id.refresh_button).setBackgroundResource(R.drawable.skin_nav_icon_r_refresh_rev);
                }
                Log.i(TAG, search_button.alpha=>+alpha);
            }
        }
        mAlpha = alpha;
    }

    public int getActionBarAlpha() {
        return mAlpha;
    }

    /**
     * When ActionBar's alpha is locked {@link #setActionBarAlpha(int)}
     * won't change drawable's alpha (but will change {@link #getActionBarAlpha()} level)
     *
     * @param lock
     */
    public void setActionBarAlphaLocked(boolean lock) {

        // Update alpha level on unlock
        if (isAlphaLocked != (isAlphaLocked = lock) && !isAlphaLocked) {
            setActionBarAlpha(mAlpha);
        }
    }

    public boolean isActionBarAlphaLocked() {
        return isAlphaLocked;
    }
}

2,这里是自定义的ScrollView

public class NotifyingScrollView extends ScrollView {
    // Edge-effects don't mix well with the translucent action bar in Android 2.X
    private boolean mDisableEdgeEffects = true;

    /**
     * @author Cyril Mottier
     */
    public interface OnScrollChangedListener {
        void onScrollChanged(ScrollView who, int l, int t, int oldl, int oldt);
    }

    private OnScrollChangedListener mOnScrollChangedListener;

    public NotifyingScrollView(Context context) {
        super(context);
    }

    public NotifyingScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public NotifyingScrollView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        super.onScrollChanged(l, t, oldl, oldt);
        if (mOnScrollChangedListener != null) {
            mOnScrollChangedListener.onScrollChanged(this, l, t, oldl, oldt);
        }
    }

    public void setOnScrollChangedListener(OnScrollChangedListener listener) {
        mOnScrollChangedListener = listener;
    }

    @Override
    protected float getTopFadingEdgeStrength() {
        // http://stackoverflow.com/a/6894270/244576
        if (mDisableEdgeEffects && Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
            return 0.0f;
        }
        return super.getTopFadingEdgeStrength();
    }

    @Override
    protected float getBottomFadingEdgeStrength() {
        // http://stackoverflow.com/a/6894270/244576
        if (mDisableEdgeEffects && Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
            return 0.0f;
        }
        return super.getBottomFadingEdgeStrength();
    }
}

3,自定义在ScrollView中的ListView

public class MyListView extends ListView{

    public MyListView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MyListView(Context context) {
        super(context);
    }

    public MyListView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);
    }

}

4,在项目里面的用法:

public class MainActivity extends Activity {

    private FadingActionBarHelper mFadingActionBarHelper;
    private ActionBar mActionBar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mActionBar = getActionBar();
        //使用自定义的布局的ActionBar
        mActionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
        mActionBar.setCustomView(R.layout.my_actionbar);
        //定义白色为Actionbar的背景色
        mFadingActionBarHelper = new FadingActionBarHelper(getActionBar(),
                getResources().getDrawable(R.drawable.actionbar_bg));

        if (savedInstanceState == null) {
            getFragmentManager().beginTransaction()
                    .add(R.id.container, new ListViewFragment())
                    .commit();
        }
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        // Inflate the menu; this adds items to the action bar if it is present.
        //菜单页面碍于效果,即被隐藏
//        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        return super.onOptionsItemSelected(item);
    }

    //这段代码可不要忘了
    public FadingActionBarHelper getFadingActionBarHelper() {
        return mFadingActionBarHelper;
    }
}

好了~有问题的朋友请留言~

Android 标题栏滑动渐变背景色 public class MainActivity extends AppCompatActivity { private RecyclerView recyclerView; private LinearLayout llSearch; private HomeAdapter adapter; private int height = 640;// 滑动开始变色的高 阅读详情

相关推荐

Android 滑动Scrollview标题栏渐变 仿京东toolbar

Android 滑动Scrollview标题栏渐变 仿京东toolbar仿京东样式(上滑显示下滑渐变消失)下滑显示上滑渐变消失 仿京东样式(上滑显示下滑渐变消失) /** * @ClassName MyScrollView * @Author Rex * @Date 2021/1/27 17:38 */ public class MyScrollView extends ScrollView { private TranslucentListener mTranslucentListe

weixin_43841463的博客 2694

Android带你解析ScrollView--仿QQ空间标题栏渐变

绪论今天来研究的是ScrollView-滚动视图,滚动视图又分横向滚动视图(HorizontalScrollView)和纵向滚动视图(ScrollView),今天主要研究纵向的。相信大家在开发中经常用到,ScrollView的功能已经很强大了,但是仍然满足不了我们脑洞大开的UI设计师们,所以我们要自定义…本篇文章主要讲监听ScrollView的滑动实现仿QQ空间标题栏渐变,先看一下效果图: 好了我

Hankkin的博客小园 2万+

Android Scroll之仿微博微信实现滑动标题栏渐变效果

1.scrollTo scrollBy 以及Scroller类简要解析 2. 通过测量布局实现滑倒特定高度标题栏颜色改变 3. 案例---仿微信朋友圈上滑背景渐进

crazyZhangxl的博客 1178

android 滑动卡片 背景色,Android之scrollview滑动使标题栏渐变背景色的实例代码

之前也是在网上看到这种效果,不过是滚动listview来改变标题栏的颜色,感觉那个应用的比较少,比如我要滚动scrollview来实现呢,那么问题就来了,废话少说,看一下要实现的效果先(这是在项目应用的效果)。直接上源代码:一、核心类(ObservableScrollView.java)package com.jukopro.titlebarcolor;import android.content...

weixin_30783981的博客 204

android 仿淘宝实现标题栏滑动渐变效果,gif有点丑,凑合看吧!

先上效果吧,效果实在太丑,不过功能是实现了。。。。首先看界面都有什么第一部分是android的透明状态栏(也有人叫沉浸式),这样能看起来好看点(虽然还是很丑,审美有限),哈哈哈第二部分是一个LinearLayout  当然是被ScrollView包裹着的Linearlayout,其中包含了图片展示区,和列表展示区,当然也可以添加更多的功能第一部分透明状态栏的实现//设置状态栏全透明 5.0之后为...

chengxuyuanchaochao的博客 2195

Android滑动标题栏颜色渐变实现与RecyclerView整合

在Android开发中,RecyclerView是一个非常强大的列表组件,用于在有限的窗口中展示大量数据。它比传统的ListView拥有更好的性能和灵活性。RecyclerView需要配合适配器(Adapter)和布局管理器(LayoutManager)一起使用。自定义布局管理器是实现复杂布局和特殊交互效果的有效手段。在本章节中,我们将深入探讨如何通过创建自定义布局管理器来实现颜色渐变效果,并结合滑动监听器使颜色渐变更加生动和动态。首先,为了实现自定义的布局管理器,我们需要继承类。

weixin_35871529的博客 709

android标题栏渐变动画,Android 顶部标题栏随滑动时的渐变隐藏和渐变显示效果

各位早上好,话不多说,先上效果图:注意顶部:首页TextView的变化(显示和隐藏)!首先分析下:UI状态,其是由RecyclerView添加头部组成+RecyclerView头部添加和RecyclerView分别引用如下:具体的分装数据的过程这里就不在说明,下篇博客会更加深入的写关于RecyclerView总添加多种不同type类型compile 'com.bartoszlipinski.rec...

weixin_35960434的博客 436

Android代码-跟随手势滑动,显示隐藏标题栏、底部导航栏及悬浮按钮的 Android Behavior Library。

LBehavior: Simple implementation of sliding animation of title bar, bottom bar and floatingActionButton. 中文文档 Screenshots Blog Introduce JianShu: http://www.jianshu.com/p/2974d8ffc3a5 Download allprojects { repositories { ... maven { url 'https://jitpack.io' } } } dependencies { implementation 'com.github.Lauzy:LBehavior:VERSION_CODE' } The version code of the latest release can be found here Usage Xml file: The root layout mus

上滑标题栏渐变效果

Android仿京东的上滑标题栏渐变效果最近闲来无事,看到京东的的上滑标题栏渐变显示,下滑标题栏渐变消失的效果有些好奇,个人感觉这种效果很Butf,so自己尝试写了一下,先看一下京东的效果图: 先说一下整体思路吧 除了ToolBar(也就是上面的标题栏) 被一个ScrollView包起来。 监听活动距离 根据距离设置标题栏的透明度 好啦,整体思路说完我们就开始说实现吧实现 布局文件编写:

qq_29269095的博客 560

Android 顶部标题栏随滑动时的渐变隐藏和渐变显示效果

主要介绍了Android 顶部标题栏随滑动时的渐变隐藏和渐变显示效果,非常不错,具有参考借鉴价值,需要的朋友可以参考下

HUMAnN 3.0 (alpha)安装及使用

文章目录简介安装数据库下载运行参考 简介 安装 conda install humann humann_test (~1 minute) 数据库下载 humann_databases --download chocophlan full /path/to/databases --update-config yes humann_databases --download uniref uniref90_diamond /path/to/databases --update-config yes humann_

dys的博客 9504

Android--仿淘宝商品详情(继续拖动查看详情)及标题栏渐变

版权声明:本文为博主原创文章,转载请标明出处。 https://blog.youkuaiyun.com/lyhhj/article/details/52510844 本文已授权微信公众号:鸿洋(hongyangAndroid)在微信公众号平台原创...

weixin_34306593的博客 196

MATLAB控制信号发生器(USB-GPIB-HS)GPIB仪器控制教程(含matlab代码)

自动化测试时需要自动产生信号,通过matlab控制信号发生器的频率与功率,以实现自动化信号生成输出

qq_43686057的博客 1606

Android 滑动标题淡出,Android 顶部标题栏随滑动时的渐变隐藏和渐变显示效果

各位早上好,话不多说,先上效果图:注意顶部:首页TextView的变化(显示和隐藏)!首先分析下:UI状态,其是由RecyclerView添加头部组成+RecyclerView头部添加和RecyclerView分别引用如下:具体的分装数据的过程这里就不在说明,下篇博客会更加深入的写关于RecyclerView总添加多种不同type类型compile 'com.bartoszlipinski.rec...

weixin_29091837的博客 634

ST7102驱动移植与调试实战

本文详细介绍了在君正T40平台上移植和调试ST7102 LCD驱动芯片的实战经验。内容涵盖硬件接口配置、时序参数调整、寄存器初始化序列编写及常见问题解决,重点解析了ST7102单芯片集成显示与触控功能的特性,为嵌入式设备显示驱动开发提供实用指南。

k6l7m8n9的博客 1410

CXL协议-第三章 CXL事务层

CXL.io为I/O设备提供了一个非一致的负载/存储接口。图3-1显示了Flex总线分层层次结构中的位置。事务类型、事务分组格式、基于信用的流量控制、虚拟通道管理和事务排序规则遵循PCIe*定义,详情请参考PCIe基础规范的“事务层规范”章节。本章重点介绍了用于CXL.io的著名的PCIe操作模式或特性。

qq_41305217的博客 2769

Android精仿淘宝/QQ空间标题栏渐变效果

最近在淘宝上囤年货买买买的时候,注意到淘宝购物详情页的渐变效果,觉得效果还是挺不错的,有种似曾相识的感觉,没错,好像QQ空间的标题栏也是类似的做法。鉴于这种效果在平时可能会用得比较多,所以就自己研究了一下然后把它实现出来了,项目完整demo在文章底部有链接,大家可下载参考研究。文章原创,转载请注明地址:小嵩的优快云博客,地址:http://blog.youkuaiyun.com/qq_22393017本文会详

小嵩的博客 6500

第三方系统(异构系统)基于token身份认证方式访问Ecology9的Restful接口Ecology9服务器配置部分

通过Token的认证方式调用Ecology9系统Restful业务接口服务器配置部分

svsou的专栏 2174

android 滑动导航栏颜色渐变,Android App页面滑动标题栏颜色渐变

通常,我们会被要求实现类似支付宝首页的特效:随着界面的滑动,标题栏的背景透明度渐变。在实际开发中,常见的滑动有列表RecyclerView(ListView)滑动,NestedScrollView(ScrollView)嵌套滑动等等。本文主要从上述两方面来探讨滑动效果。一、RecyclerView滑动标题栏渐变废话不多说,直接撸代码:布局文件如下:Java代码如下:private void too...

weixin_29116255的博客 1060

第2章-系统控制原理 -> 经典控制理论

第1章 回到目录 第3章 2 控制原理2.1 控制系统的数学模型2.1.1 时域数学模型2.1.2 复域数学模型2.2 线性系统的稳定性2.2.1 复数域稳定判据2.2.2 频率域稳定判据2.3 线性系统状态空间模型2.3.1 状态空间表达式2.3.2 状态空间系统设计2.4 李雅普诺夫稳定性分析2.4.1 李雅普诺夫稳定性2.4.2 李雅普诺夫稳定判据 2.1 控制系统的数学模型 2.1.1 时域数学模型 2.1.2 复域数学模型 2.2 线性系统的稳定性 2.2.1 复数域稳定判据 2.2....

赵继超的笔记 5550

YOLOv8融合改进 更换检测头为Detect_DyHead同时添加C2f_DBB模块

yolov8独家训练测试融合网络结构,提供详细步骤详细代码,手把手教你在yolov8官方包中把检测头更换为Detect_DyHead检测头,并且将原始的C2f模块更换成C2f_DBB模块,提高检测精度,亲测在多个数据集上有涨点!!!!!

分享一些自己改进代码的实例 4747

高仿美团APP页面滑动标题栏渐变效果

转载注明出处:https://www.jianshu.com/p/ec0d4a73c970最近公司的项目刚好需要这个效果,虽然GitHub上有很多成型的开源项目,不过都附带了很多其他的东西,为了这个效果去引用一个第三方库明显不合适,所以就决定自力更生了。其实在日常软件中还是挺常见的,比如带Banner广告图的首页或者是带头部的个人中心,下面是美团和摩拜单车的实现效果:实现思路:如果单纯看摩拜单车这...

AndyRenJie的博客 1294

5.4 GTT BO的内存分配分析

本文分析了AMD GPU驱动中的GTT技术实现。GTT作为GPU页表,负责管理主机内存与GPU虚拟地址的映射,支持大容量内存访问和统一寻址。文章详细介绍了GTT的核心数据结构amdgpu_gtt_mgr、初始化流程,以及BO(Buffer Object)创建时GTT区间的分配与释放机制。GTT管理通过TTM框架实现分层设计,提供内存统计、兼容性检查等接口,并支持动态迁移、多进程隔离等高级特性。该机制为AMD GPU提供了高效灵活的内存管理基础。

图形/计算GPU的驱动与虚拟化技术分享园地 3728

android标题栏渐变动画,Android ScrollView顶部搜索栏或者标题栏渐变效果

最近发现一个很流行的一个效果 随着界面的滑动 顶部标题栏会出现渐变效果 要是现实这样的效果 能够经过ScrollView 滑动达到效果html 直接贴代码javapublic class MyScrollView extends ScrollView{private ScrollViewListener scrollViewListener = null;public MyScrollV...

weixin_32389225的博客 332

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

上一篇: 安卓Sqlite的使用
下一篇: ViewPager+GridView实现横向滑动 仿大众点评
Android李伟
博客等级 码龄12年 14粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值