2016-09-18 4 views
0

プロジェクトでは、私はやっている、私は問題に会った。 xml、css、およびassetsに基づいたビューを作成し、マニフェストでリレーションを記述する必要があります。コンテナがプログラムで作成された場合、コンテナのすべてのビューをぼかす方法

私は、XMLを解析し、Views階層を作成するためにCompositorパターンを使用します。問題は、ハイライトではほとんど見られない。彼らは、ブール値を持つパラメータ「ぼかし」を持っている可能性があり、それができるようになります:

私は great articleを使用して二つの方法

public static void applyBlur(final View parent, final View blurring) { 
    parent.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { 
     @Override 
     public boolean onPreDraw() { 
      parent.getViewTreeObserver().removeOnPreDrawListener(this); 
      parent.buildDrawingCache(); 

      Bitmap bmp = parent.getDrawingCache(); 

      blur(bmp, blurring); 
      return true; 
     } 
    }); 
} 

private static void blur(Bitmap bkg, View view) { 

    float radius = 10; 

    Bitmap overlay = Bitmap.createBitmap(view.getLayoutParams().width, view.getLayoutParams().height, Bitmap.Config.ARGB_8888); 

    Canvas canvas = new Canvas(overlay); 
    canvas.translate(-view.getLeft(), -view.getTop()); 
    canvas.drawBitmap(bkg, 0, 0, null); 
    RenderScript rs = RenderScript.create(view.getContext()); 
    Allocation overlayAlloc = Allocation.createFromBitmap(
      rs, overlay); 
    ScriptIntrinsicBlur blur = ScriptIntrinsicBlur.create(
      rs, overlayAlloc.getElement()); 
    blur.setInput(overlayAlloc); 
    blur.setRadius(radius); 
    blur.forEach(overlayAlloc); 
    overlayAlloc.copyTo(overlay); 
    view.setBackground(new BitmapDrawable(view.getContext().getResources(), overlay)); 
    rs.destroy(); 
} 

を作成することがで完璧に動作

RelativeLayout - container 
|---ImageView - view in container with background image 
|---RelativeLayout - less than container, bluring view 

xmlで作成されたレイアウト - ぼかしビューの階層内のすべてのビューはぼかしです。しかし、プログラムでビュー階層を作成すると、親ビューだけをぼかすことができます。また、ぼやけたビューを使用して同じレベルの階層化されたビューをぼかすこともできます。親ビューの他のビューについての「分からない」のように見えます。

たとえば、説明した階層からイメージビューを削除し、そのイメージを親の背景として設定すると、結果が表示されます。しかし、それは解決策ではありません。なぜなら、私が記述するより深い階層なので、ビューをぼかしている下のすべてのビューをぼかす必要があります。コンテナーに含まれるすべてのビューが含まれていることを、どのように「説明する」ことができますか?それは可能でなければなりません、なぜなら、アプリのリソースでxmlでレイアウトが作成されたときの動作を見るからです。コンテナは、その中のすべてのビューについて知っており、この場合は完全にぼかしています。

答えて

1

私はAlphaというプロパティを持っています。プロパティをimageviewまたはrelativelayoutに設定してみてください。

+0

アルファは透明です。それはいいですが、私が必要とする効果ではありません。私はhttp://imgur.com/a/9rGLLが必要です。私はparentalビューのために作成した場合(プログラムで結果を見ることができます)、レイアウトで作成したレイアウトのすべてのビューに対して、プログラマチックにレイアウトすればすべてのビューでそれを達成できません。 – iamthevoid

0

これが解決しました。問題はUniversal Image Loaderライブラリを使用していることでした。これは、画像を非同期にロードし、子の相対的なレイアウトの下で「スクリーンショット」をぼかすことは、ImageViewに表示される画像の前に行きます。画像がぼやけることはありません。 UIThreadのImageViewでUILをロジックから除外してイメージをロードしましたが、イメージをロードした後はぼやけてしまいました。そして、それは動作します。 ))ありがとう

関連する問題