/ / Jak używać kamery na żywo jako tła aktywności? - Android, tło, kamera, widok na powierzchnię, tapety na żywo

Jak korzystać z kamery na żywo jako tła aktywności? - Android, tło, kamera, widok na powierzchnię, tapety na żywo

Próbuję utworzyć aplikację, w której muszę użyć kamery na żywo jako tła. (Wiem, że to głupie, ale nie może pomóc, jest to żądanie klienta).

Próbowałem to zrobić za pomocą SurfaceView ale jak dotąd nie udało się.

Do tej pory cokolwiek znalazłem na Stack Overflowwięcej domysłów lub wskazówek, jak to zrobić, ale nie ma przykładów czasu rzeczywistego ani pomocy kodu. Byłoby wspaniale, gdyby ktoś, kto zrobił to wcześniej, podzielił się kawałkiem kodu z użytkownikami Stack Overflow, takimi jak ja.

Odpowiedzi:

5 dla odpowiedzi № 1

Spójrz tutaj:

http://developer.android.com/guide/topics/media/camera.html

Jest cały kod potrzebny do wykonania czynności, która pokazuje podgląd kamery.


2 dla odpowiedzi nr 2
package com.example.CameraPreview;

import android.content.Context;
import android.content.pm.PackageManager;
import android.hardware.Camera;
import android.util.AttributeSet;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

import java.io.IOException;

public class CameraView extends SurfaceView implements SurfaceHolder.Callback {

private SurfaceHolder mHolder;
private Camera mCamera;

public CameraView(Context context) {
super(context);
if(checkCameraHardware(context))  {
mCamera = getCameraInstance();
}
mHolder = getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}

public CameraView(Context context, AttributeSet attrs) {
super(context, attrs);

if(checkCameraHardware(context))  {
mCamera = getCameraInstance();
}
mHolder = getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}

@Override
public void surfaceCreated(SurfaceHolder surfaceHolder) {
// The Surface has been created, now tell the camera where to draw the preview.
try {
mCamera.setPreviewDisplay(surfaceHolder);
mCamera.startPreview();
} catch (IOException e) {
Log.d("CameraView", "Error setting camera preview: " + e.getMessage());
}
}

@Override
public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i2, int i3) {

if (mHolder.getSurface() == null){
return;
}

try {
mCamera.stopPreview();
} catch (Exception e){

}
try {
mCamera.setPreviewDisplay(mHolder);
mCamera.startPreview();

} catch (Exception e){
Log.d("CameraView", "Error starting camera preview: " + e.getMessage());
}
}

@Override
public void surfaceDestroyed(SurfaceHolder surfaceHolder) {

}

private boolean checkCameraHardware(Context context) {
if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){
return true;
} else {
return false;
}
}

public static Camera getCameraInstance(){
Camera c = null;
try {
c = Camera.open();
}
catch (Exception e){
}
return c;
}

}