1

カメラ プレビュー用に非表示の SurfaceView を作成したいと考えています。別の質問への回答で推奨される方法を試しました:

WindowManager wm = (WindowManager) mCtx.getSystemService(Context.WINDOW_SERVICE);
params = new WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT,
        WindowManager.LayoutParams.WRAP_CONTENT,
        WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
        WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
        PixelFormat.TRANSLUCENT);        
wm.addView(surfaceview, params);

surfaceview.setZOrderOnTop(true);
mHolder.setFormat(PixelFormat.TRANSPARENT);

しかし、それは目に見えないわけではなく、実際には画面全体を占めています。アルファを設定したり、サイズを変更しようとしましたが、うまくいきません。非表示にする方法、または少なくとも 1x1 サイズにサイズ変更する方法はありますか?

編集:

SurfaceViewまた、アクティビティ レイアウトに 1x1 を配置するだけではうまくいかないことも付け加えておきます。これは、複数のレイアウトを使用してViewsおり、レイアウトの変更時に破棄されると考えているためです...

4

1 に答える 1

1

コードで幅/高さを に定義しているため、SurfaceViewが画面全体を占めていますWRAP_CONTENT。使ってみて

new LayoutParams(1, 1, LayoutParams.TYPE_SYSTEM_OVERLAY, WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, PixelFormat.TRANSLUCENT)

隠しカメラまたは類似のものを作成するには、記録中にアクティビティを表示する必要があるため、Context現在の を使用しないでください(したがって、これは非表示ではありません...)。Activity現在のアクティビティをバックグラウンドにすると、コンテキストがnull記録され、記録が停止またはクラッシュします。

Service(非表示ですがコンテキストもあります)を実行してみてSurfaceView、そのサービスで from コードを作成することができます。

于 2013-06-11T10:16:44.297 に答える