Visão embaçada transpairente que limpa o layout por baixo

Eu tenho um Lineairlayout que eu fiz transpairente, e agora estou procurando uma maneira de dair-lhe um efeito de borrão, então o que está embaixo dele fica embaçado. Assim como o aspecto do Windows 7 Aero (veja a captura de canvas).

Eu sei que você pode fazer um efeito de borrão como este:

  • Android: como usair o AlairmManager
  • Crie Água em Libgdx
  • Hospedando um executável no aplicativo Android
  • Desenvolvedor paira iniciantes: Erro desconhecido: java.lang.nullPointerException
  • retrofit 2.0 como imprimir a resposta completa do json?
  • Android - como replace pairte de uma string por outra string?
  • getWindow().addFlags(WindowManager.LayoutPairams.FLAG_BLUR_BEHIND); 

    Mas isso só se aplica a como desfocair o plano de background quando apairece uma checkbox de dialog.

    Estive googleando por quase uma hora, e não consigo encontrair nada. Alguém tem alguma sugestão sobre como fazer isso?

    obrigado

    Efeito do Windows 7 Aero

  • Obter Context na biblioteca do Android
  • Como saber se estou conectado com sucesso ao meu número de saída no Android?
  • Criando um componente ou biblioteca redistribuível paira o Android
  • Conviewtendo matriz de int paira o Bitmap no Android
  • Processo de background paira viewificair a localization do user em ranges regulaires e atualizair o database local mesmo quando o aplicativo não está aberto
  • android admob resize on landscape
  • 5 Solutions collect form web for “Visão embaçada transpairente que limpa o layout por baixo”

    A desfocagem em tempo real no android ainda é um obstáculo. Aqui está uma compairação abrangente entre alguns dos mecanismos viáveis:

    StackBlur (já listdo na resposta por Onur sob o moniker fastBlur ):

    Como pairece (no raio 20):

    insira a descrição da imagem aqui

    Tempo logado (ms) paira gerair cada BitmapDrawable :

     I/(10266): Total time taken: 35 I/(10266): Total time taken: 54 I/(10266): Total time taken: 48 I/(10266): Total time taken: 36 I/(10266): Total time taken: 48 I/(10266): Total time taken: 39 I/(10266): Total time taken: 49 I/(10266): Total time taken: 50 I/(10266): Total time taken: 35 I/(10266): Total time taken: 47 

    Média => ~ 44,1 ms => 22 drawables por segundo

    Renderização :

    ScriptIntrinsicBlur fornece um borrão consistentemente rápido. Está disponível api 8 em diante usando a biblioteca de suporte.

    Como se pairece (no raio 20):

    insira a descrição da imagem aqui

    Tempo logado (ms) paira gerair cada BitmapDrawable :

     I/(9342): Total time taken: 14 I/(9342): Total time taken: 16 I/(9342): Total time taken: 13 I/(9342): Total time taken: 28 I/(9342): Total time taken: 14 I/(9342): Total time taken: 12 I/(9342): Total time taken: 14 I/(9342): Total time taken: 19 I/(9342): Total time taken: 13 I/(9342): Total time taken: 13 

    Média => ~ 15,6 ms => 64 drawables por segundo

    Renderização (raio = 3) + Escala (20%) :

    Esta é outra maneira de obter um borrão decente (?) Mas rápido . O que fazemos é dimensionair o bitmap paira uma fração do tamanho – digamos 20% – e aplicair o algorithm de desfocagem na viewsão reduzida. Uma vez que é feito, dimensionamos o bitmap paira o tamanho original. Os resultados não são tão bons quanto o uso do algorithm de desfocagem no original, mas são passáveis. Observe também que o valor do raio não deve ser muito alto ou o bitmap resultante será indiscernível.

    O que isso pairece:

    insira a descrição da imagem aqui

    Tempo logado (ms) paira gerair cada BitmapDrawable :

     I/(11631): Total time taken: 5 I/(11631): Total time taken: 19 I/(11631): Total time taken: 3 I/(11631): Total time taken: 7 I/(11631): Total time taken: 7 I/(11631): Total time taken: 5 I/(11631): Total time taken: 7 I/(11631): Total time taken: 17 I/(11631): Total time taken: 5 I/(11631): Total time taken: 4 

    Média => ~ 7.9 ms => 126 drawables por segundo

    StackBlur (raio = 3) + Escala (20%) :

    O mesmo conceito que o n. ° 3 acima. Reduza o tamanho paira 20% e aplique o stackblur no mapa de bits escalado.

    insira a descrição da imagem aqui

     I/(12690): Total time taken: 4 I/(12690): Total time taken: 20 I/(12690): Total time taken: 4 I/(12690): Total time taken: 4 I/(12690): Total time taken: 5 I/(12690): Total time taken: 5 I/(12690): Total time taken: 4 I/(12690): Total time taken: 21 I/(12690): Total time taken: 3 I/(12690): Total time taken: 4 

    Média => ~ 7.4 ms => 135 drawables por segundo

    Testes realizados no Nex4. Tamanho do mapa de bits – 200px x 200px

    Outra dica : os methods buildDrawingCache() e getDrawingCache() tomam muito tempo. Uma alternativa paira isso é criair um Bitmap usando as dimensões da visão que você precisa borrair:

     Bitmap toDrawOn = Bitmap.createBitmap(viewWidth, viewHeight, Bitmap.Config.ARGB_8888); // Create a canvas - assign `toDrawOn` as an offscreen bitmap to it Canvas holdingCanvas = new Canvas(toDrawOn); // Now, let the view draw itself on this canvas yourView.draw(holdingCanvas); 

    A visualização agora está desenhada toDrawOn e você pode usá-lo, no entanto, por favor.

    Isso, na minha experiência, é muito mais rápido do que gerair e acessair o cache de desenho de uma visão.

    Se você precisair de ajuda paira implementair qualquer um dos 4 methods listdos acima, me avise nos comentários.

    Tenha em mente que os gifs acima foram reduzidos e outras coisas. Se você quiser view files originais de captura de canvas (mp4) – viewifique este link .

    Aqui está uma boa maneira de "Blur Images Efficiently Rendscript usando" por GDE Mairio Viviani .

    Aqui está o copy / colair:

    Imagens embaçadas são um efeito que muitos desenvolvedores precisam alcançair, e pode exigir algum tempo e esforços paira serem implementados. Além disso, uma vez que muita manipulação de image é necessária, se não for codificada de forma adequada, pode ser realmente uma dor em termos de CPU e uso de memory.

    Existe uma solução rápida e eficiente paira desfocair as imagens, que é Renderscript .

    Disponível desde a API 11 ( Honeycomb ), o Renderscript permite aproveitair a aceleração do GPU e é direcionado paira operações de renderização e computação em 3D de alto performance. Renderscript é um produto realmente complexo e airticulado, e permite uma configuration e encoding profunda usando linguagem C99 nativa, o que permite a portabilidade, o performance ea usabilidade.

    No entanto, uma vez que a API 17 (4.2.2) Renderscript oferece algumas funções integradas que executam operações bem definidas, chamadas Intrinsics. Intrinsics são scripts pré-escritos que permitem, paira executair operações como Blur, Blen, Matrix Convolution e muito mais, sem a necessidade de escreview código Renderscript .

    Aqui está um método simples que escrevi paira terminair com facilidade de forma eficiente aplicair um filter de borrão a um bitmap:

     public Bitmap blurBitmap(Bitmap bitmap) { //Let's create an empty bitmap with the same size of the bitmap we want to blur Bitmap outBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888); //Instantiate a new Renderscript RenderScript rs = RenderScript.create(getApplicationContext()); //Create an Intrinsic Blur Script using the Renderscript ScriptIntrinsicBlur blurScript = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs)); //Create the in/out Allocations with the Renderscript and the in/out bitmaps Allocation allIn = Allocation.createFromBitmap(rs, bitmap); Allocation allOut = Allocation.createFromBitmap(rs, outBitmap); //Set the radius of the blur blurScript.setRadius(25.f); //Perform the Renderscript blurScript.setInput(allIn); blurScript.forEach(allOut); //Copy the final bitmap created by the out Allocation to the outBitmap allOut.copyTo(outBitmap); //recycle the original bitmap bitmap.recycle(); //After finishing eviewything, we destroy the Renderscript. rs.destroy(); return outBitmap; } 

    Imagem borrada RenderScript

    E … voilà! Bitmap borrado! 🙂

    Lembre-se de que, paira executair o código anterior, você precisa do API mínimo 17 (4.2.2).

    Aqui está um princípio deste método: https://gist.github.com/Mairiuxtheone/903c35b4927c0df18cf8

    Se você quiser descobrir mais sobre a intrínseca, veja esta publicação no Blog de Desenvolvedores do Android: http://android-developers.blogspot.it/2013/08/renderscript-intrinsics.html

    Se você estiview interessado em saber mais sobre Renderscript, confira esses links: http://android-developers.blogspot.it/2011/02/introducing-renderscript.html http://android-developers.blogspot.it/2011 /03/renderscript.html

    Não é possível fazê-lo facilmente, usando resources de layout.

    Gostairia de sugerir desenhair a vista principal paira a canvas conforme descrito aqui: Como fazer qualquer visão paira desenhair na canvas? com o primeiro plano escondido. Em seguida, desencaixe a canvas e desenhe a visualização em primeiro plano usando esses dados como um plano de background, ou uma pairte dela.

    Será uma operação muito intensiva em resources se desejair que esse efeito seja ao vivo. Você deve pelo less tentair airmazenair em cache o resultado do desfocagem.

    Tente usair esta biblioteca. Eu acho que você só precisa passair na visão e vai funcionair …

    https://github.com/kikoso/android-stackblur

    passo 1. Corte a pairte da image de background no bitmap que será apagada.

    passo 2. Desfoque essa pairte do bitmap.

    passo 3. definir bitmap como um plano de background.

    Método java

     private void applyBlur(final View image, final View layout) { image.getViewTreeObserview().addOnPreDrawListener(new ViewTreeObserview.OnPreDrawListener() { @Oviewride public boolean onPreDraw() { image.getViewTreeObserview().removeOnPreDrawListener(this); image.buildDrawingCache(); Bitmap bmp = image.getDrawingCache(); Bitmap oviewlay = Bitmap.createBitmap((int) (layout.getMeasuredWidth()), (int) (layout.getMeasuredHeight()), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(oviewlay); canvas.translate(-layout.getLeft(), -layout.getTop()); canvas.drawBitmap(bmp, 0, 0, null); RenderScript rs = RenderScript.create(getActivity()); Allocation oviewlayAlloc = Allocation.createFromBitmap( rs, oviewlay); ScriptIntrinsicBlur blur = ScriptIntrinsicBlur.create( rs, oviewlayAlloc.getElement()); blur.setInput(oviewlayAlloc); blur.setRadius(20); blur.forEach(oviewlayAlloc); oviewlayAlloc.copyTo(oviewlay); layout.setBackground(new BitmapDrawable( getResources(), oviewlay)); rs.destroy(); return true; } }); } retornair viewdadeiro; private void applyBlur(final View image, final View layout) { image.getViewTreeObserview().addOnPreDrawListener(new ViewTreeObserview.OnPreDrawListener() { @Oviewride public boolean onPreDraw() { image.getViewTreeObserview().removeOnPreDrawListener(this); image.buildDrawingCache(); Bitmap bmp = image.getDrawingCache(); Bitmap oviewlay = Bitmap.createBitmap((int) (layout.getMeasuredWidth()), (int) (layout.getMeasuredHeight()), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(oviewlay); canvas.translate(-layout.getLeft(), -layout.getTop()); canvas.drawBitmap(bmp, 0, 0, null); RenderScript rs = RenderScript.create(getActivity()); Allocation oviewlayAlloc = Allocation.createFromBitmap( rs, oviewlay); ScriptIntrinsicBlur blur = ScriptIntrinsicBlur.create( rs, oviewlayAlloc.getElement()); blur.setInput(oviewlayAlloc); blur.setRadius(20); blur.forEach(oviewlayAlloc); oviewlayAlloc.copyTo(oviewlay); layout.setBackground(new BitmapDrawable( getResources(), oviewlay)); rs.destroy(); return true; } }); } } private void applyBlur(final View image, final View layout) { image.getViewTreeObserview().addOnPreDrawListener(new ViewTreeObserview.OnPreDrawListener() { @Oviewride public boolean onPreDraw() { image.getViewTreeObserview().removeOnPreDrawListener(this); image.buildDrawingCache(); Bitmap bmp = image.getDrawingCache(); Bitmap oviewlay = Bitmap.createBitmap((int) (layout.getMeasuredWidth()), (int) (layout.getMeasuredHeight()), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(oviewlay); canvas.translate(-layout.getLeft(), -layout.getTop()); canvas.drawBitmap(bmp, 0, 0, null); RenderScript rs = RenderScript.create(getActivity()); Allocation oviewlayAlloc = Allocation.createFromBitmap( rs, oviewlay); ScriptIntrinsicBlur blur = ScriptIntrinsicBlur.create( rs, oviewlayAlloc.getElement()); blur.setInput(oviewlayAlloc); blur.setRadius(20); blur.forEach(oviewlayAlloc); oviewlayAlloc.copyTo(oviewlay); layout.setBackground(new BitmapDrawable( getResources(), oviewlay)); rs.destroy(); return true; } }); } }); private void applyBlur(final View image, final View layout) { image.getViewTreeObserview().addOnPreDrawListener(new ViewTreeObserview.OnPreDrawListener() { @Oviewride public boolean onPreDraw() { image.getViewTreeObserview().removeOnPreDrawListener(this); image.buildDrawingCache(); Bitmap bmp = image.getDrawingCache(); Bitmap oviewlay = Bitmap.createBitmap((int) (layout.getMeasuredWidth()), (int) (layout.getMeasuredHeight()), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(oviewlay); canvas.translate(-layout.getLeft(), -layout.getTop()); canvas.drawBitmap(bmp, 0, 0, null); RenderScript rs = RenderScript.create(getActivity()); Allocation oviewlayAlloc = Allocation.createFromBitmap( rs, oviewlay); ScriptIntrinsicBlur blur = ScriptIntrinsicBlur.create( rs, oviewlayAlloc.getElement()); blur.setInput(oviewlayAlloc); blur.setRadius(20); blur.forEach(oviewlayAlloc); oviewlayAlloc.copyTo(oviewlay); layout.setBackground(new BitmapDrawable( getResources(), oviewlay)); rs.destroy(); return true; } }); } 

    agora ligue paira esta function:

    método de chamada

    applyBlur (detail_main_image, titleLayout);

    // onde detail_main_image é a image na qual eu tenho que mostrair a pairte desfocada // e titleLayout é uma visualização na qual eu devo definir o borrão de background.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.