代码控制toolbar透明效果

gif展示

需求

全面屏效果,透明状态栏和toolbar.滑动后toolbar出现,状态栏变色.
其实最简单的方式可以使用coordinatorlayout,我想用代码实现所以...说代码吧:

布局准备

备注:LivePosterIv是一个自定义的imageview,依照你自己的需求替换就行

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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">

    <com.scwang.smartrefresh.layout.SmartRefreshLayout

        android:id="@+id/out_refresh"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <com.izxjf.liao.conferencelive.utils.MyScrollview2
            android:id="@+id/scrollview"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="@color/bg">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical">


                <RelativeLayout
                    android:id="@+id/rl_top"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center">

                    <com.izxjf.liao.conferencelive.utils.LivePosterIv
                        android:id="@+id/card"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:scaleType="fitXY"
                        android:src="@drawable/live_default_bg"
                        app:live_height="0.6" />

                    <LinearLayout
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_centerHorizontal="true"
                        android:layout_centerVertical="true"
                        android:gravity="center"
                        android:orientation="vertical">

                        <TextView
                            android:id="@+id/m_small_title"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:padding="10dp"

                            android:textColor="@color/white"
                            android:textSize="@dimen/s18"
                            android:textStyle="bold" />

                        <LinearLayout
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:padding="10dp">

                            <TextView
                                android:id="@+id/tv_label_number"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:paddingRight="5dp"
                                android:text="111"
                                android:textColor="@color/white"
                                android:textSize="@dimen/s13" />

                            <TextView
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:paddingRight="10dp"
                                android:text="内容"
                                android:textColor="@color/white"
                                android:textSize="@dimen/s13" />

                            <View
                                android:layout_width="1dip"
                                android:layout_height="match_parent"
                                android:layout_gravity="center_horizontal"
                                android:background="@color/white" />

                            <TextView
                                android:id="@+id/tv_label_people"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:paddingLeft="10dp"
                                android:text="111"
                                android:textColor="@color/white"
                                android:textSize="@dimen/s13" />

                            <TextView
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:paddingLeft="5dp"
                                android:text="人关注"
                                android:textColor="@color/white"
                                android:textSize="@dimen/s13" />
                        </LinearLayout>
                        <ImageView
                            android:id="@+id/button_big_guanzhu_yes"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_margin="10dp"
                            android:layout_marginLeft="20dp"
                            android:visibility="visible"
                            android:background="@drawable/button_big_guanzhu_yes"
                            />
                        <ImageView
                            android:id="@+id/button_big_guanzhu"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_margin="10dp"
                            android:visibility="gone"
                            android:layout_marginLeft="20dp"
                            android:background="@drawable/button_big_guanzhu"
                       />


                    </LinearLayout>


                </RelativeLayout>


                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:background="@color/white"
                    android:orientation="vertical">


                    <com.izxjf.liao.baselibrary.view.recycler_view.WrapRecyclerView
                        android:id="@+id/news_list_recycler_view"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:background="@color/bg"
                        android:overScrollMode="never" />

                    <include
                        layout="@layout/common_no_data_layout"
                        android:visibility="gone" />

                    <include
                        layout="@layout/common_no_net_layout"
                        android:visibility="gone" />
                </RelativeLayout>

            </LinearLayout>
        </com.izxjf.liao.conferencelive.utils.MyScrollview2>
    </com.scwang.smartrefresh.layout.SmartRefreshLayout
>

    <RelativeLayout
        android:id="@+id/back_layout"
        android:layout_width="match_parent"
        android:layout_height="@dimen/title_bar_height"
        android:layout_alignParentTop="true"
        android:background="@color/white"
        android:gravity="center_vertical">

        <RelativeLayout
            android:id="@+id/back"
            android:layout_width="60dp"
            android:layout_height="match_parent"
            android:layout_marginLeft="15dp">

            <ImageView
                android:id="@+id/back_img"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:layout_centerVertical="true"
                android:src="@drawable/white_back" />

        </RelativeLayout>

        <RelativeLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true">

            <TextView
                android:id="@+id/m_title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="@android:color/black"
                android:textSize="@dimen/s16"
                android:textStyle="bold" />

            <ImageView

                android:id="@+id/m_title_guanzhu"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:layout_marginLeft="10dp"
                android:layout_toRightOf="@id/m_title"
                android:visibility="visible"
                android:background="@drawable/button_guanzhu"

                />
            <ImageView
                android:id="@+id/m_title_guanzhu_yes"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:layout_marginLeft="10dp"
                android:layout_toRightOf="@id/m_title"
                android:visibility="gone"
                android:background="@drawable/button_guanzhu_yes"

                />
        </RelativeLayout>


    </RelativeLayout>

</RelativeLayout>

代码实现

1.初始化
   @Override
   protected void setContentView() {
       setContentView(R.layout.activity_label);
       x.view().inject(this);
       int statusBarHeight = getStatusBarHeight(this);//工具类内方法
       titleGuanzhu.getBackground().mutate().setAlpha(0);//不想显示的都设置透明
       titleGuanzhu_yes.getBackground().mutate().setAlpha(0);
       back_text.setTextColor(Color.argb((int) 0, 0, 0, 0));  //文字透明度((int) (alpha * 255));
       toolbar.getBackground().mutate().setAlpha(0);
       RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 84);
       layoutParams.setMargins(0, statusBarHeight, 0, 0);
       toolbar.setLayoutParams(layoutParams);
   }
提供一个状态栏工具类,可以写在baseActivity内
public class StatusBarUtils {

    public static void setStatusBarColor(Activity activity , int color){
        Window window = activity.getWindow();
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
            //设置Flags  适配手机
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            window.setStatusBarColor(color);
        }else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
            //首先先设置全屏
            window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            //获取decorView
            ViewGroup decorView = (ViewGroup) window.getDecorView();
            //获取contentView
            View statusBar = decorView.findViewById(android.R.id.content);

            //创建View
            View view = new View(activity);
            view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,getStatusBarHeight(activity)));
            statusBar.setBackgroundColor(color);
            decorView.addView(statusBar);

            ViewGroup activityView = (ViewGroup) activity.findViewById(android.R.id.content);
            activityView.getChildAt(0).setFitsSystemWindows(true);
        }
    }

    public static void setActivityTranslucent(Activity activity){
        Window window = activity.getWindow();
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
            //获取decorView
            ViewGroup decorView = (ViewGroup) window.getDecorView();
            decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            window.setStatusBarColor(Color.TRANSPARENT);


        }else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
            //设置全屏
            window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        }
    }

    public static void closeActivityTranslucent(Activity activity){
        Window window = activity.getWindow();
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
            //设置Flags  适配手机
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            window.setStatusBarColor(Color.BLACK);

        }else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
            //首先先设置全屏
            window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            //获取decorView
            ViewGroup decorView = (ViewGroup) window.getDecorView();
            //获取contentView
            View statusBar = decorView.findViewById(android.R.id.content);

            //创建View
            View view = new View(activity);
            view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,getStatusBarHeight(activity)));
            statusBar.setBackgroundColor(Color.BLACK);
            decorView.addView(statusBar);

            ViewGroup activityView = (ViewGroup) activity.findViewById(android.R.id.content);
            activityView.getChildAt(0).setFitsSystemWindows(true);
        }
    }
    //获取状态栏高度
    public static int getStatusBarHeight(Activity activity) {
        // 插件式换肤:怎么获取资源的,先获取资源id,根据id获取资源
        Resources resources = activity.getResources();
        int statusBarHeightId = resources.getIdentifier("status_bar_height","dimen","android");
        return resources.getDimensionPixelOffset(statusBarHeightId);
    }
}

2.根据scrollerview滚动改变toolbar样式,card是那张大大的背景图,我要获取他的高度所以要用post方法.

        card.post(new Runnable() {
            @RequiresApi(api = Build.VERSION_CODES.M)
            @Override
            public void run() {
                height = card.getMeasuredHeight();
                scrollview.setScrollViewListener(new MyScrollview2.ScrollViewListener() {
                    @Override
                    public void onScrollChanged(MyScrollview2 scrollView, int l, int t, int oldl, int oldt) {
                        int mTransEndY = height;
                        int mTransViewHeight = toolbar.getMeasuredHeight();
                        if (t > height / 2) {
                            back_text.setAlpha(1);
                            back_text.setTextColor(Color.argb((int) (1 * 255), 0, 0, 0));  //文字透明度((int) (alpha * 255));
                            mBackImage.setImageResource(R.drawable.bigback);
                            titleGuanzhu.getBackground().mutate().setAlpha((int) (1 * 255));
                            titleGuanzhu_yes.getBackground().mutate().setAlpha((int) (1 * 255));
                            toolbar.getBackground().mutate().setAlpha((int) (1 * 255));
                            //不设置背景色就是透明的了
                            setStatusBarColor(Color.argb((int) (1 * 255), 255, 255, 255));
                            StatusBarUtil.StatusBarLightMode(LabelActivity.this);
                        }
                        if (t < height / 2) {
                            setStatusBarColor(Color.argb((int) (0 * 255), 0, 0, 0));
                            back_text.setAlpha(0);
                            back_text.setTextColor(Color.argb((int) (0 * 255), 0, 0, 0));  //文字透明度((int) (alpha * 255));
                            mBackImage.setImageResource(R.drawable.back_white);
                            titleGuanzhu.getBackground().mutate().setAlpha((int) (0 * 255));
                            titleGuanzhu_yes.getBackground().mutate().setAlpha((int) (0 * 255));
                            toolbar.getBackground().mutate().setAlpha((int) (0 * 255));
                            StatusBarUtil.transparencyBar(LabelActivity.this);
//                          m_right_tv.setTextColor(Color.WHITE;
                        }
                        if (mTransEndY == 0) {
                            return;
                        }
                        float alpha = (float) t / (mTransEndY - mTransViewHeight);
                        if (alpha <= 0) {
                            alpha = 0;
                        }
                        if (alpha > 1) {
                            alpha = 1;
                        }
                        
                    }
                });
            }
        });
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容

  • 最近做了一个Android UI相关开源项目库汇总,里面集合了OpenDigg 上的优质的Android开源项目库...
    OpenDigg阅读 17,162评论 6 223
  • 内容 抽屉菜单 ListView WebView SwitchButton 按钮 点赞按钮 进度条 TabLayo...
    小狼W阅读 1,611评论 0 10
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,019评论 4 62
  • 有人说说:“生活中不止眼前的苟且,还有诗和远方。”这句话是安慰我们,虽然现在很苦,但还可以去憧憬未来的。可现实是...
    苑泽宇阅读 189评论 0 0
  • 林俊杰发新歌了,依旧是听到熟悉的声音就感动的快要流下泪来,旋律还是那么戳人,只有老林的歌会让我有这种想哭的感觉。然...
    5af74713bb0a阅读 186评论 0 0