android 标题栏背景颜色动态更改,android 上下滑动标题栏和状态栏改变颜色实现...

importandroid.app.Activity;importandroid.graphics.Color;importandroid.os.Build;importandroid.os.Bundle;importandroid.support.v7.app.AppCompatActivity;importandroid.util.Log;importandroid.view.View;importandroid.view.ViewGroup;importandroid.view.Window;importandroid.view.WindowManager;importandroid.widget.LinearLayout;public class MainActivity extendsAppCompatActivity {privateView titleLine;privateView titleLine1;privateLinearLayout title;privateLinearLayout top;privateMyScrollView scrollView;

@Overrideprotected voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

initView();

}private voidinitView() {

setTranslucentStatus(this, true);

title=(LinearLayout) findViewById(R.id.ll_title);

title.getBackground().mutate().setAlpha(0);

top=(LinearLayout) findViewById(R.id.ll_title_top);

titleLine1=findViewById(R.id.v_title_line_1);

titleLine=findViewById(R.id.v_title_line);

scrollView=(MyScrollView) findViewById(R.id.sv_content);//设置状态栏高度

int statusBarHeight = this.getResources().getDimensionPixelSize(this.getResources().getIdentifier("status_bar_height", "dimen", "android"));

LinearLayout.LayoutParams params= newLinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight);

titleLine.setLayoutParams(params);

titleLine1.setLayoutParams(params);//设置滑动

scrollView.setOnScrollistener(newMyScrollView.OnScrollistener() {

@Overridepublic void onScroll(int startY, intendY) {//根据scrollview滑动更改标题栏透明度

changeAphla(startY, endY);

}

});

}/*** 根据内容窗体的移动改变标题栏背景透明度

*

*@paramstartY scrollview开始滑动的y坐标(相对值)

*@paramendY scrollview结束滑动的y坐标(相对值)*/

private void changeAphla(int startY, intendY) {//获取标题高度

int titleHeight =title.getMeasuredHeight();//获取背景高度

int backHeight =top.getMeasuredHeight();//获取控件的绝对位置坐标

int[] location = new int[2];

top.getLocationInWindow(location);//从屏幕顶部到控件顶部的坐标位置Y

int currentY = location[1];//表示回到原位(滑动到顶部)

if (currentY >= 0) {

title.getBackground().mutate().setAlpha(0);

}

Log.e("zpan", "=titleHeight=" + titleHeight + "=backHeight=" + backHeight + "=currentY=" +currentY);//颜色透明度改变

if (currentY < titleHeight && currentY >= -(backHeight -titleHeight)) {//计算出滚动过程中改变的透明值

double y = Math.abs(currentY) * 1.0;double height = (backHeight - titleHeight) * 1.0;int changeValue = (int) (y / height * 255);

Log.e("zpan", "changeValue=" +changeValue);//判断是向上还是向下

if (endY > startY) { //向上;透明度值增加,实际透明度减小

title.getBackground().mutate().setAlpha(changeValue);

}else if (endY < startY) { //向下;透明度值减小,实际透明度增加

title.getBackground().mutate().setAlpha(changeValue);

}

}//红色背景移除屏幕

if (currentY < -(backHeight -titleHeight)) {

title.getBackground().mutate().setAlpha(255);

}

}/*** 设置状态栏透明

*

*@paramactivity

*@paramon*/

public void setTranslucentStatus(Activity activity, booleanon) {

Window win=activity.getWindow();if (Build.VERSION.SDK_INT >=Build.VERSION_CODES.LOLLIPOP) {

win.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS|WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);

win.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN//| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION//保证华为虚拟键盘能显示

|View.SYSTEM_UI_FLAG_LAYOUT_STABLE);

win.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);

win.setStatusBarColor(Color.TRANSPARENT);//win.setNavigationBarColor(Color.TRANSPARENT);//保证华为虚拟键盘是系统色

}if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && Build.VERSION.SDK_INT

WindowManager.LayoutParams winParams=win.getAttributes();final int bits =WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;if(on) {

winParams.flags|=bits;

}else{

winParams.flags&= ~bits;

}

win.setAttributes(winParams);

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值