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

    xiaoxiao2021-03-25  65

    今天一个小学弟,有这个需求他问我,我就写了个简单的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了

    转载请注明原文地址: https://ju.6miu.com/read-13691.html

    最新回复(0)