Android获取view某个坐标的颜色值,更改状态栏颜色

今天做一个Android项目,其中用到一个小功能,要将状态栏的颜色设置和界面风格一样,动态变化。界面是一个webview,也就是状态栏的颜色要和网页头部颜色保持一样的颜色风格,做完了,在这记录一下。

一、状态栏更换背景色

在Activity的onCreate函数中添加:

// 4.4及以上版本开启
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
{
   setTranslucentStatus(true);
   SystemBarTintManager tintManager = new SystemBarTintManager(this);
   tintManager.setStatusBarTintEnabled(true);
   //此处可以重新指定状态栏颜色
   tintManager.setStatusBarTintColor(Color.parseColor("#00000000"));
}

@TargetApi(19)
private void setTranslucentStatus(boolean on)
{
   Window win = getWindow();
   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);
}

这里将状态栏设置成了透明。由于使用了沉侵式状态栏,界面布局是从屏幕最顶端(包括状态栏位置)开始,所以这里需要在界面最顶端写一个和状态栏高度一样的view。然后设置这个view的background颜色(该颜色来自view的指定坐标点的颜色,下面会讲到如何获取),由于状态栏设置的是透明色,所以看起来,状态栏就是view的颜色。

二、设置view的颜色(这里我界面是嵌入了一个webview)
1. 首先设置view的高度和状态栏一样

View webview_top = findViewById(R.id.webview_top);
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) webview_top.getLayoutParams();
//获取status_bar_height资源的ID
int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
    //根据资源ID获取响应的尺寸值
    layoutParams.height = getResources().getDimensionPixelSize(resourceId);
}
webview_top.setLayoutParams(layoutParams);

2.获取webview指定坐标颜色并设置给view

Bitmap bitmap = getBitmapFromView(webView);
if (null != bitmap)
{
    int pixel = bitmap.getPixel(200, 5);
    //获取颜色
    int redValue = Color.red(pixel);
    int greenValue = Color.green(pixel);
    int blueValue = Color.blue(pixel);
    Log.i(TAG, "【颜色值】 #" + Integer.toHexString(pixel).toUpperCase(), false);
    webview_top.setBackgroundColor(pixel);
    bitmap.recycle();
}

/**
 * 获取view的bitmap
 * @param v
 * @return
 */
public static Bitmap getBitmapFromView(View v)
{
    Bitmap b = Bitmap.createBitmap(v.getWidth(), v.getHeight(), Bitmap.Config.RGB_565);
    Canvas c = new Canvas(b);
    v.layout(v.getLeft(), v.getTop(), v.getRight(), v.getBottom());
    // Draw background
    Drawable bgDrawable = v.getBackground();
    if (bgDrawable != null)
    {
        bgDrawable.draw(c);
    }
    else
    {
        c.drawColor(Color.WHITE);
    }
    // Draw view to canvas
    v.draw(c);
    return b;
}


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值