【问题标题】:How to make a camera preview transparent?如何使相机预览透明?
【发布时间】:2014-06-25 12:08:35
【问题描述】:

我看过很多关于带有透明图像/按钮的相机预览的帖子,但我想知道如何制作半透明的相机预览,我尝试在 xml 文件中使用 #800000 使表面视图透明,但它对相机预览没有影响。我正在尝试制作一个类似于透明屏幕的应用程序。这是我做的一个服务:

public class FlyingCamera extends Service implements SurfaceHolder.Callback{
    SurfaceView view;
    SurfaceHolder holder;
    Camera c;
    View child;
    LayoutInflater inflater;
    Context context;
    public Camera camera=null;


@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    // TODO Auto-generated method stub
    return super.onStartCommand(intent, flags, startId);
}

@Override
public void onCreate() {
    // TODO Auto-generated method stub
    super.onCreate();


    final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT,
            WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE|WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL|WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
             PixelFormat.TRANSLUCENT);
    WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
    LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);

    View myView = inflater.inflate(R.layout.camera_surface, null);
    view = (SurfaceView) myView.findViewById(R.id.surfaceView1);

    holder=view.getHolder();

    holder.addCallback(this);

    myView.setOnTouchListener(new OnTouchListener() {
           @Override
           public boolean onTouch(View v, MotionEvent event) {
               Log.d("Touch", "touch me");
           return false;
           }
         });
    // Add layout to window manager

    wm.addView(myView, params);

}





@Override
public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub

    return null;

}

@Override
public void onDestroy() {
    // TODO Auto-generated method stub
    stopSelf();
    super.onDestroy();
    Log.d("Destroy","God Help DESTROY");
}

@Override
public void surfaceCreated(SurfaceHolder holder) {
    // TODO Auto-generated method stub
    camera=Camera.open();

    try{
        camera.setPreviewDisplay(holder);
        camera.setDisplayOrientation(90);

    }catch(Exception e){
        Log.d("exceptie", "nu a mers");
    }
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
        int height) {
    // TODO Auto-generated method stub
    Camera.Parameters params=camera.getParameters();
    params.setPreviewSize(width, height);
    camera.setParameters(params);
    camera.startPreview();
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
    // TODO Auto-generated method stub
    camera.stopPreview();
    camera=null;
}

} `

【问题讨论】:

  • 一种方法是在 GLES 纹理中捕获预览并进行渲染。需要学习一点OpenGL。请参阅 Grafika (github.com/google/grafika) 中的“来自相机的纹理”活动。
  • 是的,我解决了我刚刚使用TextureView.SurfaceTextureListener作为接口而不是SurfaceHolder.Callback的问题,我可以在包含textView.getSurfaceTexture()的surfaceTexture对象上使用setAlpha;其中 textview 是 TextureView 对象,现在我正在努力使用搜索栏来设置相机预览的不透明度
  • 您好 Heixss,您能否分享一下您是如何做到这一点的源代码。我正在努力解决同样的问题。我还想创建一个半透明的相机预览和一个搜索栏来设置它的 alpha。谢谢

标签: android camera surfaceview transparent preview


【解决方案1】:

您不能使相机预览透明。

但是你可以把它隐藏起来。只需将预览表面大小设置为 1x1 像素:

   Camera.Parameters params = camera.getParameters();
   surfaceView.getLayoutParams().width = 1;
   surfaceView.getLayoutParams().height = 1;

顺便说一句,这是最新的 Android Security holes 背后的把戏。

吉拉德·海莫夫

www.mobileedge.co.il

【讨论】:

    【解决方案2】:

    透明颜色代码是#00000000..您设置的#800000不是透明颜色。

    Try setting the surfaceView color #00000000.
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-02
      • 1970-01-01
      • 1970-01-01
      • 2011-09-22
      • 1970-01-01
      相关资源
      最近更新 更多