国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android實現個人資料頁面頭像背景模糊顯示包(狀態欄)

2019-12-12 03:31:17
字體:
來源:轉載
供稿:網友

最近要實現這樣一個效果,然后拿出來與大家分享一下主要的幾段代碼,希望大家能夠用到,與人方便自己方便嘛!

首先:

要實現的是浮動狀態欄效果,通過在Activity的onCreate方法中調用這個方法,然后就可以讓整個布局浮現在整個手機屏幕之下了,這是我覺著最簡單的一種方法了。

public static void alphaTask(Activity context) {  context.getWindow().requestFeature(Window.FEATURE_NO_TITLE);  if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {    Window window = context.getWindow();    window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS        | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);    window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION        | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);    window.setStatusBarColor(Color.TRANSPARENT);    window.setNavigationBarColor(Color.TRANSPARENT);  }}

接下來:

獲得狀態欄高度,將actionbar(我這里是自己在布局當中寫的,然后在代碼中設置他距離頂部的高度讓他看起來和我們的bar沒有什么區別)的位置改變位于狀態來的下方

public static int getStatusBarHight(Context context) {    /**     * 獲取狀態欄高度――方法1     * */    int statusBarHeight = -1;    //獲取status_bar_height資源的ID    int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");    if (resourceId > 0) {      //根據資源ID獲取響應的尺寸值      statusBarHeight = context.getResources().getDimensionPixelSize(resourceId);    }//    int i = DensityUtil.px2dip(context, statusBarHeight);    return statusBarHeight;  }

最后:

實現背景高斯模糊效果的

public class FastBlurUtils {  public static Bitmap doBlur(Bitmap sentBitmap, int radius,                boolean canReuseInBitmap) {    Bitmap bitmap;    if (canReuseInBitmap) {      bitmap = sentBitmap;    } else {      bitmap = sentBitmap.copy(sentBitmap.getConfig(), true);    }    if (radius < 1) {      return (null);    }    int w = bitmap.getWidth();    int h = bitmap.getHeight();    int[] pix = new int[w * h];    bitmap.getPixels(pix, 0, w, 0, 0, w, h);    int wm = w - 1;    int hm = h - 1;    int wh = w * h;    int div = radius + radius + 1;    int r[] = new int[wh];    int g[] = new int[wh];    int b[] = new int[wh];    int rsum, gsum, bsum, x, y, i, p, yp, yi, yw;    int vmin[] = new int[Math.max(w, h)];    int divsum = (div + 1) >> 1;    divsum *= divsum;    int dv[] = new int[256 * divsum];    for (i = 0; i < 256 * divsum; i++) {      dv[i] = (i / divsum);    }    yw = yi = 0;    int[][] stack = new int[div][3];    int stackpointer;    int stackstart;    int[] sir;    int rbs;    int r1 = radius + 1;    int routsum, goutsum, boutsum;    int rinsum, ginsum, binsum;    for (y = 0; y < h; y++) {      rinsum = ginsum = binsum = routsum = goutsum = boutsum = rsum = gsum = bsum = 0;      for (i = -radius; i <= radius; i++) {        p = pix[yi + Math.min(wm, Math.max(i, 0))];        sir = stack[i + radius];        sir[0] = (p & 0xff0000) >> 16;        sir[1] = (p & 0x00ff00) >> 8;        sir[2] = (p & 0x0000ff);        rbs = r1 - Math.abs(i);        rsum += sir[0] * rbs;        gsum += sir[1] * rbs;        bsum += sir[2] * rbs;        if (i > 0) {          rinsum += sir[0];          ginsum += sir[1];          binsum += sir[2];        } else {          routsum += sir[0];          goutsum += sir[1];          boutsum += sir[2];        }      }      stackpointer = radius;      for (x = 0; x < w; x++) {        r[yi] = dv[rsum];        g[yi] = dv[gsum];        b[yi] = dv[bsum];        rsum -= routsum;        gsum -= goutsum;        bsum -= boutsum;        stackstart = stackpointer - radius + div;        sir = stack[stackstart % div];        routsum -= sir[0];        goutsum -= sir[1];        boutsum -= sir[2];        if (y == 0) {          vmin[x] = Math.min(x + radius + 1, wm);        }        p = pix[yw + vmin[x]];        sir[0] = (p & 0xff0000) >> 16;        sir[1] = (p & 0x00ff00) >> 8;        sir[2] = (p & 0x0000ff);        rinsum += sir[0];        ginsum += sir[1];        binsum += sir[2];        rsum += rinsum;        gsum += ginsum;        bsum += binsum;        stackpointer = (stackpointer + 1) % div;        sir = stack[(stackpointer) % div];        routsum += sir[0];        goutsum += sir[1];        boutsum += sir[2];        rinsum -= sir[0];        ginsum -= sir[1];        binsum -= sir[2];        yi++;      }      yw += w;    }    for (x = 0; x < w; x++) {      rinsum = ginsum = binsum = routsum = goutsum = boutsum = rsum = gsum = bsum = 0;      yp = -radius * w;      for (i = -radius; i <= radius; i++) {        yi = Math.max(0, yp) + x;        sir = stack[i + radius];        sir[0] = r[yi];        sir[1] = g[yi];        sir[2] = b[yi];        rbs = r1 - Math.abs(i);        rsum += r[yi] * rbs;        gsum += g[yi] * rbs;        bsum += b[yi] * rbs;        if (i > 0) {          rinsum += sir[0];          ginsum += sir[1];          binsum += sir[2];        } else {          routsum += sir[0];          goutsum += sir[1];          boutsum += sir[2];        }        if (i < hm) {          yp += w;        }      }      yi = x;      stackpointer = radius;      for (y = 0; y < h; y++) {        // Preserve alpha channel: ( 0xff000000 & pix[yi] )        pix[yi] = (0xff000000 & pix[yi]) | (dv[rsum] << 16)            | (dv[gsum] << 8) | dv[bsum];        rsum -= routsum;        gsum -= goutsum;        bsum -= boutsum;        stackstart = stackpointer - radius + div;        sir = stack[stackstart % div];        routsum -= sir[0];        goutsum -= sir[1];        boutsum -= sir[2];        if (x == 0) {          vmin[y] = Math.min(y + r1, hm) * w;        }        p = x + vmin[y];        sir[0] = r[p];        sir[1] = g[p];        sir[2] = b[p];        rinsum += sir[0];        ginsum += sir[1];        binsum += sir[2];        rsum += rinsum;        gsum += ginsum;        bsum += binsum;        stackpointer = (stackpointer + 1) % div;        sir = stack[stackpointer];        routsum += sir[0];        goutsum += sir[1];        boutsum += sir[2];        rinsum -= sir[0];        ginsum -= sir[1];        binsum -= sir[2];        yi += w;      }    }    bitmap.setPixels(pix, 0, w, 0, 0, w, h);    return (bitmap);  }}

這里再加一個上圓形頭像的工具,將圖片轉換為圓形,很方便的

/** * 轉換圖片成圓形 * @param bitmap 傳入Bitmap對象 * @return */public static Bitmap toRoundBitmap(Bitmap bitmap) {  int width = bitmap.getWidth();  int height = bitmap.getHeight();  float roundPx;  float left, top, right, bottom, dst_left, dst_top, dst_right, dst_bottom;  if (width <= height) {    roundPx = width / 2;    top = 0;    bottom = width;    left = 0;    right = width;    height = width;    dst_left = 0;    dst_top = 0;    dst_right = width;    dst_bottom = width;  } else {    roundPx = height / 2;    float clip = (width - height) / 2;    left = clip;    right = width - clip;    top = 0;    bottom = height;    width = height;    dst_left = 0;    dst_top = 0;    dst_right = height;    dst_bottom = height;  }  Bitmap output = Bitmap.createBitmap(width,      height, Bitmap.Config.ARGB_8888);  Canvas canvas = new Canvas(output);  final int color = 0xff424242;  final Paint paint = new Paint();  final Rect src = new Rect((int)left, (int)top, (int)right, (int)bottom);  final Rect dst = new Rect((int)dst_left, (int)dst_top, (int)dst_right, (int)dst_bottom);  final RectF rectF = new RectF(dst);  paint.setAntiAlias(true);  canvas.drawARGB(0, 0, 0, 0);  paint.setColor(color);  canvas.drawRoundRect(rectF, roundPx, roundPx, paint);  paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));  canvas.drawBitmap(bitmap, src, dst, paint);  return output;}

以上所述是小編給大家介紹的 Android實現個人資料頁面頭像背景模糊顯示包括狀態欄,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 正蓝旗| 沁水县| 靖安县| 德庆县| 东山县| 三明市| 东乌| 昌邑市| 鄂温| 沽源县| 桐柏县| 石嘴山市| 北京市| 敖汉旗| 日土县| 贵州省| 天门市| 南靖县| 农安县| 股票| 渝中区| 陵川县| 宝应县| 越西县| 门头沟区| 当阳市| 叙永县| 清河县| 嘉义市| 太谷县| 长武县| 宁陕县| 南溪县| 湘潭县| 叶城县| 南阳市| 洪雅县| 瑞丽市| 怀柔区| 洪雅县| 武宁县|