您的位置:首页 > 移动开发 > Android开发

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

2016-12-01 11:51 435 查看
今天做一个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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 界面 webview java