安卓继承式自定义控件实现标题栏渐变

package com.example.extendsview_demo;

import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewTreeObserver;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements MyView.OnScrollViewListener{

    private MyView scrollView;
    private ImageView iv_detail;
    private RelativeLayout layout_title;
    private TextView tv_titlebar;
    private int imgheight;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        scrollView = findViewById(R.id.scrollView);
        iv_detail = findViewById(R.id.iv_detail);
        layout_title = findViewById(R.id.layout_title);
        tv_titlebar = findViewById(R.id.tv_titlebar);

        //初始化,获取顶部大图的高
        initListener();

        //设置ScrollView的滚动监听
        scrollView.setOnScrollViewListener(this);
    }

    //初始化
    private void initListener() {

        //获取控件的视图观察者
        ViewTreeObserver observer = iv_detail.getViewTreeObserver();

        observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                //通过视图观察者监听得到顶端大图的高度
                imgheight = iv_detail.getHeight();
            }
        });
    }

    @Override
    public void OnScrollView(MyView myView, int l, int t, int oldl, int oldt) {

        //如果当用户手指往上滑动的距离(也就是t值)小于0时那么就隐藏标题栏
        if(t <= 0){
            //设置标题栏为隐藏状态
            tv_titlebar.setVisibility(View.GONE);

            //设置标题栏背景为透明色
            layout_title.setBackgroundColor(Color.argb(0,0,0,0));
        }
        //如果当用户手指往上滑动的距离大于0并且不能超过顶端大图的高度就设置标题栏显示
        else if(t > 0 && t <= imgheight){
            tv_titlebar.setVisibility(View.VISIBLE);

            //获取ScrollView向下滑动,图片消失部分的比例
            float i = (float) t / imgheight;

            //根据这个比例,让标题栏的背景慢慢的由浅入深
            float v = 255 * i;

            tv_titlebar.setText("继承式自定义控件");

            tv_titlebar.setBackgroundColor(Color.YELLOW);

            layout_title.setBackgroundColor(Color.argb((int) v,255,255,255));
        }
    }

}

猜你喜欢

转载自blog.csdn.net/gaoyiranblog/article/details/80342093