Android沉浸式状态栏+图片背景+标题栏渐变+背景伸缩

Android沉浸式状态栏+图片背景+标题栏渐变+背景伸缩

今天做项目时,刚好用到了一部分Android沉浸式状态栏的技术,我就单独写了出来
该部分代码在PersonView中
首先是自定义ScrollView实现Toolbar(标题栏)渐变

效果展示图:

编程思想:

1、自定义一个类,继承自ScrollView,并重写它的 onScrollChanged 方法;

2、在 onScrollChanged 中获取 ScrollView 在Y轴的移动距离,并根据此距离改变 Toolbar(标题栏) 的透明度。
示例代码:
类:MainActivity.java

package com.example.personview;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.Toast;

import com.example.personview.base.BaseActivity;
import com.example.personview.impl.ActionBarClickListener;
import com.example.personview.widget.TranslucentActionBar;
import com.example.personview.widget.TranslucentScrollView;


/**
 * Created by Administrator
 * time:2019/8/13
 */

public class MainActivity extends BaseActivity implements ActionBarClickListener, TranslucentScrollView.TranslucentChangedListener, View.OnClickListener {

    private TranslucentScrollView translucentScrollView;
    private TranslucentActionBar actionBar;
    private View zoomView;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        init();
        initClick();//初始化点击事件
    }

    private void init() {
        actionBar = (TranslucentActionBar) findViewById(R.id.actionbar);
        //初始actionBar
        actionBar.setData("个人中心", 0, null, 0, null, null);
        //开启渐变
        actionBar.setNeedTranslucent();
        //设置状态栏高度
        actionBar.setStatusBarHeight(getStatusBarHeight());

        translucentScrollView = (TranslucentScrollView) findViewById(R.id.pullzoom_scrollview);
        //设置透明度变化监听
        translucentScrollView.setTranslucentChangedListener(this);
        //关联需要渐变的视图
        translucentScrollView.setTransView(actionBar);

        zoomView = findViewById(R.id.lay_header);
        //关联伸缩的视图
        translucentScrollView.setPullZoomView(zoomView);
    }

    @Override
    public void onLeftClick() {

    }

    @Override
    public void onRightClick() {

    }

    @Override
    public void onTranslucentChanged(int transAlpha) {
        actionBar.tvTitle.setVisibility(transAlpha > 48 ? View.VISIBLE : View.GONE);
    }

    /**
     * 初始化点击事件
     * 获取布局文件toast_signtoday.xml里的控件
     **/
    private void initClick() {
        LinearLayout person_sign = (LinearLayout) findViewById(R.id.person_sign);
        person_sign.setOnClickListener(this);
        LinearLayout person_footprint = (LinearLayout) findViewById(R.id.person_footprint);
        person_footprint.setOnClickListener(this);
        LinearLayout person_publish = (LinearLayout) findViewById(R.id.person_publish);
        person_publish.setOnClickListener(this);
        LinearLayout person_photowall = (LinearLayout) findViewById(R.id.person_photowall);
        person_photowall.setOnClickListener(this);
        LinearLayout person_lucky = (LinearLayout) findViewById(R.id.person_lucky);
        person_lucky.setOnClickListener(this);
        LinearLayout person_invite = (LinearLayout) findViewById(R.id.person_invite);
        person_invite.setOnClickListener(this);
        LinearLayout person_set = (LinearLayout) findViewById(R.id.person_set);
        person_set.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.person_sign:
                //签到
                LayoutInflater inflater = getLayoutInflater();
                View layout = inflater.inflate(R.layout.activity_toast_signtoday, null);
                Toast toast = new Toast(getApplicationContext());
                toast.setGravity(Gravity.CENTER, 0, 0);
                toast.setDuration(Toast.LENGTH_LONG);
                toast.setView(layout);
                toast.show();
                break;
            case R.id.person_footprint:
                //足迹
                Toast.makeText(this,"足迹",Toast.LENGTH_SHORT).show();
                break;
            case R.id.person_publish:
                //我发布的
                Toast.makeText(this,"我发布的",Toast.LENGTH_SHORT).show();
                break;
            case R.id.person_photowall:
                //照片墙
                Toast.makeText(this,"照片墙",Toast.LENGTH_SHORT).show();
                break;
            case R.id.person_lucky:
                //开始抽奖
                Toast.makeText(this,"开始抽奖",Toast.LENGTH_SHORT).show();
                break;
            case R.id.person_invite:
                //邀请奖励
                Toast.makeText(this,"邀请奖励",Toast.LENGTH_SHORT).show();
                break;
            case R.id.person_set:
                //设置
                Toast.makeText(this,"设置",Toast.LENGTH_SHORT).show();
                break;
        }
    }
}

TranslucentScrollView.java

package com.example.personview.widget;

import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.content.Context;
import android.graphics.Color;
import android.support.annotation.ColorInt;
import android.support.v4.graphics.ColorUtils;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.ScrollView;

import com.example.personview.R;
import com.example.personview.utils.SizeUtils;

/**
 * Created by 晓辉(xiaohui)
 * time:2019/8/13
 */

public class TranslucentScrollView extends ScrollView {

    static final String TAG = "TranslucentScrollView";

    //伸缩视图
    private View zoomView;
    //伸缩视图初始高度
    private int zoomViewInitHeight = 0;
    // 记录首次按下位置
    private float mFirstPosition = 0;
    // 是否正在放大
    private Boolean mScaling = false;

    //渐变的视图
    private View transView;
    //渐变颜色
    private int transColor = Color.WHITE;
    //渐变开始位置
    private int transStartY = 50;
    //渐变结束位置
    private int transEndY = 300;

    //渐变开始默认位置,Y轴,50dp
    private final int DFT_TRANSSTARTY = 50;
    //渐变结束默认位置,Y轴,300dp
    private final int DFT_TRANSENDY = 300;

    private TranslucentScrollView.TranslucentChangedListener translucentChangedListener;

    public interface TranslucentChangedListener {
        /**
         * 透明度变化,取值范围0-255
         *
         * @param transAlpha
         */
        void onTranslucentChanged(int transAlpha);
    }

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

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

    public TranslucentScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public void setTranslucentChangedListener(TranslucentScrollView.TranslucentChangedListener translucentChangedListener) {
        this.translucentChangedListener = translucentChangedListener;
    }

    /**
     * 设置伸缩视图
     *
     * @param zoomView
     */
    public void setPullZoomView(View zoomView) {
        this.zoomView = zoomView;
        zoomViewInitHeight = zoomView.getLayoutParams().height;
        if (zoomViewInitHeight == LayoutParams.MATCH_PARENT || zoomViewInitHeight == WindowManager.LayoutParams.WRAP_CONTENT) {
            zoomView.post(new Runnable() {
                @Override
                public void run() {
                    zoomViewInitHeight = TranslucentScrollView.this.zoomView.getHeight();
                }
            });
        }
    }

    /**
     * 设置渐变视图
     *
     * @param transView 渐变的视图
     */
    public void setTransView(View transView) {
        setTransView(transView, getResources().getColor(R.color.colorPrimary), SizeUtils.dip2px(getContext(), DFT_TRANSSTARTY), SizeUtils.dip2px(getContext(), DFT_TRANSENDY));
    }

    /**
     * 设置渐变视图
     *
     * @param transView  渐变的视图
     * @param transColor 渐变颜色
     * @param transEndY  渐变结束位置
     */
    public void setTransView(View transView, @ColorInt int transColor, int transStartY, int transEndY) {
        this.transView = transView;
        //初始视图-透明
        this.transView.setBackgroundColor(ColorUtils.setAlphaComponent(transColor, 0));
        this.transStartY = transStartY;
        this.transEndY = transEndY;
        this.transColor = transColor;
        if (transStartY > transEndY) {
            throw new IllegalArgumentException("transStartY 不得大于 transEndY .. ");
        }
    }

    /**
     * 获取透明度
     *
     * @return
     */
    private int getTransAlpha() {
        float scrollY = getScrollY();
        if (transStartY != 0) {
            if (scrollY <= transStartY) {
                return 0;
            } else if (scrollY >= transEndY) {
                return 255;
            } else {
                return (int) ((scrollY - transStartY) / (transEndY - transStartY) * 255);
            }
        } else {
            if (scrollY >= transEndY) {
                return 255;
            }
            return (int) ((transEndY - scrollY) / transEndY * 255);
        }
    }

    /**
     * 重置ZoomView
     */
    private void resetZoomView() {
        final ViewGroup.LayoutParams lp = zoomView.getLayoutParams();
        final float h = zoomView.getLayoutParams().height;// ZoomView当前高度

        // 设置动画
        ValueAnimator anim = ObjectAnimator.ofFloat(0.0F, 1.0F).setDuration(200);

        anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                float cVal = (Float) animation.getAnimatedValue();
                lp.height = (int) (h - (h - zoomViewInitHeight) * cVal);
                zoomView.setLayoutParams(lp);
            }
        });
        anim.start();
    }

    @Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        super.onScrollChanged(l, t, oldl, oldt);
        int transAlpha = getTransAlpha();

        if (transView != null) {
            Log.d(TAG, "[onScrollChanged .. in ], 透明度 == " + transAlpha);
            transView.setBackgroundColor(ColorUtils.setAlphaComponent(transColor, transAlpha));
        }
        if (translucentChangedListener != null) {
            translucentChangedListener.onTranslucentChanged(transAlpha);
        }
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (zoomView != null) {
            ViewGroup.LayoutParams params = zoomView.getLayoutParams();
            switch (event.getAction()) {
                case MotionEvent.ACTION_UP:
                    //手指离开后恢复图片
                    mScaling = false;
                    resetZoomView();
                    break;
                case MotionEvent.ACTION_MOVE:
                    if (!mScaling) {
                        if (getScrollY() == 0) {
                            mFirstPosition = event.getY();
                        } else {
                            break;
                        }
                    }

                    int distance = (int) ((event.getY() - mFirstPosition) * 0.6);
                    if (distance < 0) {
                        break;
                    }
                    mScaling = true;
                    params.height = zoomViewInitHeight + distance;

                    Log.d(TAG, "params.height == " + params.height + ", zoomViewInitHeight == " + zoomViewInitHeight + ", distance == " + distance);
                    zoomView.setLayoutParams(params);
                    return true;
            }
        }

        return super.onTouchEvent(event);
    }

}

TranslucentActionBar.java

package com.example.personview.widget;

import android.content.Context;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.example.personview.R;
import com.example.personview.impl.ActionBarClickListener;

/**
 * 支持渐变的 actionBar
 * Created by 晓辉(xiaohui)
 * time: 2019/8/13.
 */

public final class TranslucentActionBar extends LinearLayout {

    private View layRoot;
    private View vStatusBar;
    private View layLeft;
    private View layRight;
    public TextView tvTitle;
    private TextView tvLeft;
    private TextView tvRight;
    private View iconLeft;
    private View iconRight;

    public TranslucentActionBar(Context context) {
        this(context, null);
    }

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

    public TranslucentActionBar(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    private void init() {
        setOrientation(HORIZONTAL);
        View contentView = inflate(getContext(), R.layout.actionbar_trans, this);
        layRoot = contentView.findViewById(R.id.lay_transroot);
        vStatusBar = contentView.findViewById(R.id.v_statusbar);
        tvTitle = (TextView) contentView.findViewById(R.id.tv_actionbar_title);
        tvLeft = (TextView) contentView.findViewById(R.id.tv_actionbar_left);
        tvRight = (TextView) contentView.findViewById(R.id.tv_actionbar_right);
        iconLeft = contentView.findViewById(R.id.iv_actionbar_left);
        iconRight = contentView.findViewById(R.id.v_actionbar_right);
    }

    /**
     * 设置状态栏高度
     *
     * @param statusBarHeight
     */
    public void setStatusBarHeight(int statusBarHeight) {
        ViewGroup.LayoutParams params = vStatusBar.getLayoutParams();
        params.height = statusBarHeight;
        vStatusBar.setLayoutParams(params);
    }

    /**
     * 设置是否需要渐变
     */
    public void setNeedTranslucent() {
        setNeedTranslucent(true, false);
    }

    /**
     * 设置是否需要渐变,并且隐藏标题
     *
     * @param translucent
     */
    public void setNeedTranslucent(boolean translucent, boolean titleInitVisibile) {
        if (translucent) {
            layRoot.setBackgroundDrawable(null);
        }
        if (!titleInitVisibile) {
            tvTitle.setVisibility(View.GONE);
        }
    }

    /**
     * 设置标题
     *
     * @param strTitle
     */
    public void setTitle(String strTitle) {
        if (!TextUtils.isEmpty(strTitle)) {
            tvTitle.setText(strTitle);
        } else {
            tvTitle.setVisibility(View.GONE);
        }
    }

    /**
     * 设置数据
     *
     * @param strTitle
     * @param resIdLeft
     * @param strLeft
     * @param resIdRight
     * @param strRight
     * @param listener
     */
    public void setData(String strTitle, int resIdLeft, String strLeft, int resIdRight, String strRight, final ActionBarClickListener listener) {
        if (!TextUtils.isEmpty(strTitle)) {
            tvTitle.setText(strTitle);
        } else {
            tvTitle.setVisibility(View.GONE);
        }
        if (!TextUtils.isEmpty(strLeft)) {
            tvLeft.setText(strLeft);
            tvLeft.setVisibility(View.VISIBLE);
        } else {
            tvLeft.setVisibility(View.GONE);
        }
        if (!TextUtils.isEmpty(strRight)) {
            tvRight.setText(strRight);
            tvRight.setVisibility(View.VISIBLE);
        } else {
            tvRight.setVisibility(View.GONE);
        }

        if (resIdLeft == 0) {
            iconLeft.setVisibility(View.GONE);
        } else {
            iconLeft.setBackgroundResource(resIdLeft);
            iconLeft.setVisibility(View.VISIBLE);
        }

        if (resIdRight == 0) {
            iconRight.setVisibility(View.GONE);
        } else {
            iconRight.setBackgroundResource(resIdRight);
            iconRight.setVisibility(View.VISIBLE);
        }

        if (listener != null) {
            layLeft = findViewById(R.id.lay_actionbar_left);
            layRight = findViewById(R.id.lay_actionbar_right);
            layLeft.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    listener.onLeftClick();
                }
            });
            layRight.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    listener.onRightClick();
                }
            });
        }
    }

}

布局文件:activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <com.example.personview.widget.TranslucentScrollView
        android:id="@+id/pullzoom_scrollview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">
            <LinearLayout
                android:id="@+id/lay_header"
                android:layout_width="match_parent"
                android:layout_height="248dp"
                android:background="@mipmap/bg_banner_my"
                android:orientation="vertical">
                <View
                    android:id="@+id/v_statusbar"
                    android:layout_width="match_parent"
                    android:layout_height="0.0dp"
                    android:background="@color/translate" />
                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent">
                    <RelativeLayout
                        android:layout_width="137dp"
                        android:layout_height="137dp"
                        android:layout_centerInParent="true"
                        android:background="@mipmap/bg_avatar">
                        <de.hdodenhof.circleimageview.CircleImageView
                            android:id="@+id/image_head"
                            android:layout_width="105dp"
                            android:layout_height="105dp"
                            android:layout_centerInParent="true"
                            android:src="@mipmap/dft_avatar"
                            app:civ_border_color="#FFFFFF"
                            app:civ_border_width="1dp" />
                    </RelativeLayout>
                    <LinearLayout
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignParentBottom="true"
                        android:layout_centerHorizontal="true"
                        android:layout_marginBottom="15dp"
                        android:orientation="vertical">
                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:gravity="center">
                        <TextView
                            android:id="@+id/name"
                            style="@style/text_white"
                            android:layout_gravity="center_horizontal"
                            android:text="@string/name"
                            android:textColor="@color/white"
                            android:textSize="17sp" />
                    </LinearLayout>
                        <LinearLayout
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:gravity="center">
                            <TextView
                                android:id="@+id/frag4_age"
                                android:layout_width="30dp"
                                android:layout_height="22dp"
                                android:background="@drawable/bg_person_left"
                                android:gravity="center_horizontal"
                                android:text="20"
                                android:textSize="11sp" />

                            <ImageView
                             android:id="@+id/frag4_sex"
                             android:layout_width="30dp"
                             android:layout_height="22dp"
                             android:paddingRight="6dp"
                             android:paddingTop="4dp"
                             android:paddingBottom="2dp"
                             android:background="@drawable/bg_person_right"
                             android:src="@drawable/ic_person_man" />
                        </LinearLayout>
                    </LinearLayout>
                </RelativeLayout>
            </LinearLayout>
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@color/white"
                android:orientation="horizontal"
                android:paddingTop="8dp"
                android:paddingBottom="8dp">
                <LinearLayout
                    android:id="@+id/lay_car"
                    android:layout_width="0.0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1.0"
                    android:gravity="center_horizontal"
                    android:orientation="vertical">
                    <ImageView
                        android:layout_width="50dp"
                        android:layout_height="50dp"
                        android:scaleType="fitXY"
                        android:src="@mipmap/ic_shopcar_my" />
                    <TextView
                        style="@style/text_black"
                        android:layout_marginTop="5dp"
                        android:text="@string/contribute" />
                    <TextView
                        style="@style/text_black"
                        android:id="@+id/contribute"
                        android:layout_marginTop="5dp"
                        android:text="1000+" />
                </LinearLayout>
                <LinearLayout
                    android:id="@+id/lay_history"
                    android:layout_width="0.0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1.0"
                    android:gravity="center_horizontal"
                    android:orientation="vertical">
                    <ImageView
                        android:id="@+id/imageView"
                        android:layout_width="50dp"
                        android:layout_height="50dp"
                        android:scaleType="fitXY"
                        android:src="@mipmap/ic_consume_history" />
                    <TextView
                        style="@style/text_black"
                        android:layout_width="wrap_content"
                        android:layout_marginTop="5dp"
                        android:text="@string/grade" />
                    <TextView
                        style="@style/text_black"
                        android:id="@+id/grade"
                        android:layout_width="wrap_content"
                        android:layout_marginTop="5dp"
                        android:text="V10" />
                </LinearLayout>
                <LinearLayout
                    android:id="@+id/lay_wallet"
                    android:layout_width="0.0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1.0"
                    android:gravity="center_horizontal"
                    android:orientation="vertical">
                    <ImageView
                        android:layout_width="50dp"
                        android:layout_height="50dp"
                        android:scaleType="fitXY"
                        android:src="@mipmap/ic_wallet" />
                    <TextView
                        style="@style/text_black"
                        android:layout_marginTop="5dp"
                        android:text="@string/coin" />
                    <TextView
                        style="@style/text_black"
                        android:id="@+id/coin"
                        android:layout_marginTop="5dp"
                        android:text="500" />
                </LinearLayout>
            </LinearLayout>
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@color/white"
                android:orientation="vertical">
                <View
                    android:layout_width="match_parent"
                    android:layout_height="15dp"
                    android:background="@color/bg_main" />
                <LinearLayout
                    android:id="@+id/person_sign"
                    android:layout_width="match_parent"
                    android:layout_height="55dp"
                    android:background="@color/white"
                    android:orientation="horizontal">
                    <ImageView
                        android:layout_width="15dp"
                        android:layout_height="15dp"
                        android:layout_gravity="center_vertical"
                        android:layout_marginLeft="16dp"
                        android:background="@mipmap/ic_sign" />
                    <TextView
                        style="@style/text_black"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_vertical"
                        android:layout_marginLeft="17dp"
                        android:text="@string/sign" />
                    <TextView
                        android:id="@+id/tv_has_sign"
                        style="@style/text_black"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_vertical"
                        android:layout_marginLeft="3dp"
                        android:layout_weight="1"
                        android:text="@string/sign"
                        android:textColor="@color/gray_dft"
                        android:textSize="13sp"
                        android:visibility="invisible" />
                    <ImageView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_vertical"
                        android:layout_marginRight="16dp"
                        android:background="@mipmap/ic_right_gray" />
                </LinearLayout>
                <View
                    style="@style/horizontal_divider_light"
                    android:layout_marginLeft="16dp" />
                <LinearLayout
                    android:id="@+id/person_footprint"
                    android:layout_width="match_parent"
                    android:layout_height="55dp"
                    android:background="@color/white"
                    android:orientation="horizontal">
                    <ImageView
                        android:layout_width="15dp"
                        android:layout_height="15dp"
                        android:layout_gravity="center_vertical"
                        android:layout_marginLeft="16dp"
                        android:background="@mipmap/ic_address" />
                    <TextView
                        style="@style/text_black"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_vertical"
                        android:layout_marginLeft="17dp"
                        android:layout_weight="1"
                        android:text="@string/footprint" />
                    <ImageView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_vertical"
                        android:layout_marginRight="16dp"
                        android:background="@mipmap/ic_right_gray" />
                </LinearLayout>
                <View
                    android:layout_width="match_parent"
                    android:layout_height="15dp"
                    android:background="@color/bg_main" />
                <LinearLayout
                    android:id="@+id/person_publish"
                    android:layout_width="match_parent"
                    android:layout_height="55dp"
                    android:background="@color/white"
                    android:orientation="horizontal">
                    <ImageView
                        android:layout_width="15dp"
                        android:layout_height="15dp"
                        android:layout_gravity="center_vertical"
                        android:layout_marginLeft="16dp"
                        android:background="@mipmap/ic_agent_my" />
                    <TextView
                        style="@style/text_black"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_vertical"
                        android:layout_marginLeft="17dp"
                        android:layout_weight="1"
                        android:text="@string/publish" />
                    <ImageView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_vertical"
                        android:layout_marginRight="16dp"
                        android:background="@mipmap/ic_right_gray" />
                </LinearLayout>
                <View
                    style="@style/horizontal_divider_light"
                    android:layout_marginLeft="16dp" />
                <LinearLayout
                    android:id="@+id/person_photowall"
                    android:layout_width="match_parent"
                    android:layout_height="55dp"
                    android:background="@color/white"
                    android:orientation="horizontal">
                    <ImageView
                        android:layout_width="15dp"
                        android:layout_height="15dp"
                        android:layout_gravity="center_vertical"
                        android:layout_marginLeft="16dp"
                        android:background="@mipmap/ic_teacher_my" />
                    <TextView
                        style="@style/text_black"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_vertical"
                        android:layout_marginLeft="17dp"
                        android:layout_weight="1"
                        android:text="@string/photowall" />
                    <ImageView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_vertical"
                        android:layout_marginRight="16dp"
                        android:background="@mipmap/ic_right_gray" />
                </LinearLayout>
                <View
                    android:layout_width="match_parent"
                    android:layout_height="15dp"
                    android:background="@color/bg_main" />
                <LinearLayout
                    android:id="@+id/person_lucky"
                    android:layout_width="match_parent"
                    android:layout_height="55dp"
                    android:background="@color/white"
                    android:orientation="horizontal">
                    <ImageView
                        android:layout_width="15dp"
                        android:layout_height="15dp"
                        android:layout_gravity="center_vertical"
                        android:layout_marginLeft="16dp"
                        android:background="@mipmap/ic_luck_my" />
                    <TextView
                        style="@style/text_black"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_vertical"
                        android:layout_marginLeft="17dp"
                        android:layout_weight="1"
                        android:text="@string/lucky" />
                    <ImageView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_vertical"
                        android:layout_marginRight="16dp"
                        android:background="@mipmap/ic_right_gray" />
                </LinearLayout>
                <View
                    style="@style/horizontal_divider_light"
                    android:layout_marginLeft="16dp" />
                <LinearLayout
                    android:id="@+id/person_invite"
                    android:layout_width="match_parent"
                    android:layout_height="55dp"
                    android:background="@color/white"
                    android:orientation="horizontal">
                    <ImageView
                        android:layout_width="15dp"
                        android:layout_height="15dp"
                        android:layout_gravity="center_vertical"
                        android:layout_marginLeft="16dp"
                        android:background="@mipmap/ic_invite_my" />
                    <TextView
                        style="@style/text_black"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_vertical"
                        android:layout_marginLeft="17dp"
                        android:layout_weight="1"
                        android:text="@string/invite" />
                    <ImageView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_vertical"
                        android:layout_marginRight="16dp"
                        android:background="@mipmap/ic_right_gray" />
                </LinearLayout>
                <View
                    android:layout_width="match_parent"
                    android:layout_height="15dp"
                    android:background="@color/bg_main" />
                <LinearLayout
                    android:id="@+id/person_set"
                    android:layout_width="match_parent"
                    android:layout_height="55dp"
                    android:background="@color/white"
                    android:orientation="horizontal">
                    <ImageView
                        android:layout_width="15dp"
                        android:layout_height="15dp"
                        android:layout_gravity="center_vertical"
                        android:layout_marginLeft="16dp"
                        android:background="@mipmap/ic_set_my" />
                    <TextView
                        style="@style/text_black"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_vertical"
                        android:layout_marginLeft="17dp"
                        android:layout_weight="1"
                        android:text="@string/set" />
                    <ImageView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_vertical"
                        android:layout_marginRight="16dp"
                        android:background="@mipmap/ic_right_gray" />
                </LinearLayout>
                <View
                    android:layout_width="match_parent"
                    android:layout_height="140dp"
                    android:background="@color/bg_main" />
            </LinearLayout>
        </LinearLayout>
    </com.example.personview.widget.TranslucentScrollView>
    <com.example.personview.widget.TranslucentActionBar
        android:id="@+id/actionbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</RelativeLayout>

activity_actionbar.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <com.example.personview.widget.TranslucentActionBar
        android:id="@+id/actionbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <com.example.personview.widget.TranslucentScrollView
        android:id="@+id/scrollview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="1000dp"
            android:orientation="vertical" />
    </com.example.personview.widget.TranslucentScrollView>
</LinearLayout>

actionbar_trans.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/lay_transroot"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/colorPrimary"
    android:orientation="vertical">
    <View
        android:id="@+id/v_statusbar"
        android:layout_width="match_parent"
        android:layout_height="1.0dp" />
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="45dp"
        android:orientation="vertical">
        <RelativeLayout
            android:id="@+id/lay_actionbar_left"
            android:layout_width="100dp"
            android:layout_height="match_parent"
            android:orientation="horizontal">
            <ImageView
                android:id="@+id/iv_actionbar_left"
                android:layout_width="20dp"
                android:layout_height="20dp"
                android:layout_centerVertical="true"
                android:layout_marginLeft="10dp"
                android:background="@mipmap/ic_left_light"
                android:visibility="gone" />
            <TextView
                android:id="@+id/tv_actionbar_left"
                style="@style/text_white"
                android:layout_height="match_parent"
                android:layout_marginLeft="10dp"
                android:layout_toRightOf="@+id/iv_actionbar_left"
                android:gravity="center_vertical"
                android:maxLength="2"
                android:singleLine="true"
                android:text="返回"
                android:visibility="gone" />
        </RelativeLayout>
        <TextView
            android:id="@+id/tv_actionbar_title"
            style="@style/text_white"
            android:layout_centerInParent="true"
            android:text="标题"
            android:textSize="16sp" />
        <RelativeLayout
            android:id="@+id/lay_actionbar_right"
            android:layout_width="100dp"
            android:layout_height="match_parent"
            android:layout_alignParentRight="true"
            android:gravity="right"
            android:orientation="horizontal">
            <View
                android:id="@+id/v_actionbar_right"
                android:layout_width="20dp"
                android:layout_height="20dp"
                android:layout_alignParentRight="true"
                android:layout_centerVertical="true"
                android:layout_marginRight="10dp"
                android:visibility="gone" />
            <TextView
                android:id="@+id/tv_actionbar_right"
                style="@style/text_white"
                android:layout_height="match_parent"
                android:layout_marginRight="10dp"
                android:layout_toLeftOf="@+id/v_actionbar_right"
                android:gravity="center_vertical|right"
                android:singleLine="true"
                android:visibility="gone" />
        </RelativeLayout>
    </RelativeLayout>
</LinearLayout>

注意:全面屏要使标题栏渐变,除了需要在mainActivity.java里声明外,还要在AndroidManifest.xml中将theme设置成为android:theme="@style/TranslucentTheme";并且引入三个style样式文件,适应不同的机型。
在这里插入图片描述
好了核心代码就是这些,如下有项目完整包

下载地址:https://download.csdn.net/download/qq_41894451/11538983

你可能感兴趣的:(Android)