android基础知识----上滑标题变浅变透明

今天一个小学弟,有这个需求他问我,我就写了个简单的demo
首先说下思路这里用的scrollview,我需要自定义一个,然后监听y轴变化,然后将toolbar的高度分成255份,让y轴值除以一份然后被255减去就是透明度。
这里用的方法是这个

  title_toobar.setBackgroundColor(Color.argb((int) (255-alpha), 255, 64, 129));

Color.argb的四个参数第一个是透明度0是透明255不透明,剩下是rgb的。

还有一个重要的方法就是获取toolbar或者其他布局的高度的方法

   int h = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);
        title_toobar.measure(h,0);
        titleHieght= title_toobar.getMeasuredHeight();

好了给出自定义scrollview

package viewpage.yundong.com.titlechangecolor;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.ScrollView;

/**
 * Created by Administrator on 2017/3/9.
 */

public class NewScroll extends ScrollView {
    public NewScroll(Context context) {
        super(context);
    }

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

    public NewScroll(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
    @Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        super.onScrollChanged(l, t, oldl, oldt);
        if (onScrollListener != null) {

            onScrollListener.onScroll(t);

        }
    }
    /**
     * 设置滚动接口
     * @param onScrollListener
     */
    public void setOnScrollListener(OnScrollListener onScrollListener) {
        this.onScrollListener = onScrollListener;

    }
    private OnScrollListener onScrollListener;
    /**
     *
     * 滚动的回调接口
     *
     * @author xiaanming
     *
     */
    public interface OnScrollListener{
        /**
         * 回调方法, 返回MyScrollView滑动的Y方向距离
         * @param scrollY
         */
        public void onScroll(int scrollY);
    }

}

给出activity的代码

package viewpage.yundong.com.titlechangecolor;

import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements NewScroll.OnScrollListener{
    private NewScroll scrollView;
    Toolbar title_toobar;
    int titleHieght;
    private TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        scrollView= (NewScroll) findViewById(R.id.scrollView);
        scrollView.setOnScrollListener(this);
        title_toobar= (Toolbar) findViewById(R.id.title_toobar);
        int h = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);
        title_toobar.measure(h,0);
        titleHieght= title_toobar.getMeasuredHeight();
        textView= (TextView) findViewById(R.id.text_view);
//        titleHieght= title_toobar.getBottom();
    }

    @Override
    public void onScroll(int scrollY) {
        Log.e("滑动Yjul",scrollY+"==="+titleHieght);
        //当滑动的距离 <= toolbar高度的时候,改变Toolbar背景色的透明度,达到渐变的效果
        if (scrollY <= titleHieght) {
            float scale = (float) titleHieght / 255;
            float alpha = scrollY/scale ;
            Log.e("透明度","==="+alpha*255);
            title_toobar.setBackgroundColor(Color.argb((int) (255-alpha), 255, 64, 129));
            textView.setTextColor(Color.argb((int) (255-alpha), 0, 0, 0));
        } else {
            //上述虽然判断了滑动距离与toolbar高度相等的情况,但是实际测试时发现,标题栏的背景色
            //很少能达到完全不透明的情况,所以这里又判断了滑动距离大于toolbar高度的情况,
            //将标题栏的颜色设置为完全不透明状态
                title_toobar.setBackgroundColor(Color.argb((int) 0, 255, 64, 129));
            textView.setTextColor(Color.argb((int)0, 0, 0, 0));
        }
    }
}

例子很简单,你换成其他的也可以主要是监听滑动距离这个思路就OK了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值