标签: surfaceholder

不推荐使用SurfaceHolder.setType ......但是需要吗?

void android.view.SurfaceHolder.setType(int type)

public abstract void setType(int type)从:API Level 1

不推荐使用此方法.这被忽略,在需要时自动设置该值.

设置曲面的类型.

http://developer.android.com/reference/android/view/SurfaceHolder.html

它说它是自动设置但是没有它我的视频不播放.这里发生了什么?有什么东西可以取代它吗?我有时间在Android上正确播放视频.

android surfaceholder

34
推荐指数
1
解决办法
3万
查看次数

Android相机无法使用.startPreview失败

我从LogCat收到这些错误:

10-30 00:31:51.494: D/CameraHal(1205): CameraHal setOverlay/1/00000000/00000000
10-30 00:31:51.494: E/CameraHal(1205): Trying to set overlay, but overlay is null!, line:3472
10-30 00:31:51.494: W/CameraService(1205): Overlay create failed - retrying
...
10-30 00:31:52.526: E/CameraService(1205): Overlay Creation Failed!
...
10-30 00:31:52.588: E/AndroidRuntime(5040): FATAL EXCEPTION: main
10-30 00:31:52.588: E/AndroidRuntime(5040): java.lang.RuntimeException: startPreview failed
10-30 00:31:52.588: E/AndroidRuntime(5040):     at android.hardware.Camera.startPreview(Native Method)
10-30 00:31:52.588: E/AndroidRuntime(5040):     at com.matthewmitchell.nightcam.CameraSurfaceView.surfaceCreated(CameraSurfaceView.java:47)
10-30 00:31:52.588: E/AndroidRuntime(5040):     at android.view.SurfaceView.updateWindow(SurfaceView.java:544)
10-30 00:31:52.588: E/AndroidRuntime(5040):     at android.view.SurfaceView.dispatchDraw(SurfaceView.java:341)
10-30 00:31:52.588: E/AndroidRuntime(5040):     at android.view.ViewGroup.drawChild(ViewGroup.java:1638)
10-30 00:31:52.588: E/AndroidRuntime(5040):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
10-30 00:31:52.588: E/AndroidRuntime(5040): …
Run Code Online (Sandbox Code Playgroud)

java android surfaceview android-camera surfaceholder

24
推荐指数
4
解决办法
7万
查看次数

java.io.IOException:setDataSource failed:status = 0x80000000

我正在尝试使用媒体播放器在活动中播放网址:

mediaPlayer = MediaPlayer.create(getApplicationContext(),
Uri.parse("http://www.pocketjourney.com/downloads/pj/video/famous.3gp"),
holder);
Run Code Online (Sandbox Code Playgroud)

它工作正常.我使用相同的代码将其设置为in @onSurfaceCreated中的动态壁纸WallpaperService,它会给我以下错误日志

D/MediaPlayer( 4128): create failed: D/MediaPlayer( 4128):
java.io.IOException: setDataSource failed.: status=0x80000000
D/MediaPlayer( 4128):   at
android.media.MediaPlayer._setDataSource(Native Method) D/MediaPlayer(
4128):  at
android.media.MediaPlayer.setDataSource(MediaPlayer.java:844)D/MediaPlayer( 4128): at
android.media.MediaPlayer.setDataSource(MediaPlayer.java:806)......
Run Code Online (Sandbox Code Playgroud)

如果我使用本地视频uri设置动态壁纸..工作正常.

这里有什么想法/建议吗?

android media-player surfaceholder live-wallpaper

23
推荐指数
1
解决办法
2万
查看次数

如何在SurfaceView上显示相机预览?

我想在SurfaceView上打开相机硬件.在布局中,我创建了一个SurfaceView,然后打开相机,如下面的代码所示.当我运行代码时,CameraAvailableCB中的toast出现并显示"onCameraAvailable",但SurfaceView上没有任何内容.

如何在SurfaceView上显示相机显示?

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    this.mBtnCapture = (Button) findViewById(R.id.actMain_btn_capture);
    this.mSurfaceView = (SurfaceView) findViewById(R.id.actMain_surfaceView);
    this.mSurfaceHolder = this.mSurfaceView.getHolder();
    this.mSurfaceHolder.addCallback(this);
    this.mCameraManager = (CameraManager) this.getSystemService(Context.CAMERA_SERVICE);

    try {
        cameraIDsList = this.mCameraManager.getCameraIdList();

        for (String id : cameraIDsList) {
            Log.v(TAG, "CameraID: " + id);
        }

    } catch (CameraAccessException e) {
        e.printStackTrace();
    }

    cameraStateCB = new CameraDevice.StateCallback() {
        @Override
        public void onOpened(CameraDevice camera) {
            Toast.makeText(getApplicationContext(), "onOpened", Toast.LENGTH_SHORT).show();

            //requesting permission
            int permissionCheck = ContextCompat.checkSelfPermission(activity, Manifest.permission.CAMERA);
            if (permissionCheck != PackageManager.PERMISSION_GRANTED) {

                if (ActivityCompat.shouldShowRequestPermissionRationale(activity, Manifest.permission.CAMERA)) …
Run Code Online (Sandbox Code Playgroud)

camera android surfaceview android-camera surfaceholder

16
推荐指数
1
解决办法
2万
查看次数

Android相机 - 应用程序传递NULL表面

每当我运行cam_thread时,我都会收到错误"app pass NULL surface".这个代码据说可以在HTC Incredible 1上运行.我已经稍微重新配置它以在机器人x上运行.但是我仍然遇到这个错误.

public class Android_Activity extends Activity 
{       
    Main_thread simulator;
    ToggleButton togglebutton;
    EditText ip_text;
    SensorManager sm = null;
    SurfaceView view;
    Sensors_thread the_sensors=null;
    String IP_address;
    Android_Activity the_app;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {       
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        view = new SurfaceView(this);       
        sm = (SensorManager) getSystemService(SENSOR_SERVICE);
        ip_text = (EditText) findViewById(R.id.IP_edit_txt);
        togglebutton = (ToggleButton) findViewById(R.id.CameraButton);
        togglebutton.setOnClickListener(new btn_listener());        
        the_app = this;
    }

    @Override
    protected void onResume() 
    {
        super.onResume();
    }

    protected void onStop()
    {
        super.onStop();
        simulator.stop_simu();
        this.finish();
    }

    private class btn_listener implements OnClickListener …
Run Code Online (Sandbox Code Playgroud)

camera android robot surfaceview surfaceholder

12
推荐指数
1
解决办法
1万
查看次数

如何在Android中使用SurfaceView附加MediaPlayer?

我正在用Android媒体播放器对象构建视频播放器.我能够听到音频,但视频没有出现在surfaceView上.这是我的代码

public class PlayerActivity extends Activity implements SurfaceHolder.Callback {
    String path;
    private MediaPlayer mp;
    private SurfaceView mPreview;
    private SurfaceHolder holder;
    boolean pausing = false;
    public static String filepath;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_player);

        getWindow().setFormat(PixelFormat.UNKNOWN);
        mPreview = (SurfaceView)findViewById(R.id.surfaceView);
        holder = mPreview.getHolder();
        holder.setFixedSize(176, 144);
        holder.addCallback(this);
        holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        mp = new MediaPlayer();

        mp.setDisplay(holder);
        try {
            Intent intent = getIntent();
            Uri fileuri = intent.getData();
            filepath=fileuri.getPath();
        } catch(Exception e) {}

        try {
            mp.setDataSource(filepath);
            mp.prepare();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IllegalStateException …
Run Code Online (Sandbox Code Playgroud)

android surfaceview media-player surfaceholder

12
推荐指数
1
解决办法
3万
查看次数

壁纸崩溃错误 - queueBuffer:错误排队缓冲区到SurfaceTexture


动态壁纸崩溃,代码如下

public void render(){


    Canvas canvas = null;
    try{

        canvas = this._surfaceHolder.lockCanvas(null);
        synchronized (this._surfaceHolder) {
            this.onDraw(canvas);
        }

    }catch(Exception e){ Log.w("Surface holder ", e.toString());}

    finally{
        if(canvas != null){
            this._surfaceHolder.unlockCanvasAndPost(canvas);
        }
    }   
}

protected void onDraw(Canvas canvas) {
    this.renderBackGround(canvas);
    for (Renderable renderable : this._fishes) {
        renderable.render(canvas);
    }
};
Run Code Online (Sandbox Code Playgroud)

崩溃时出现以下错误

06-07 19:49:09.143:E/SurfaceTextureClient(13629):queueBuffer:错误排队缓冲区到SurfaceTexture,-19

06-07 19:49:09.143:E/SurfaceTextureClient(13629):queueBuffer(handle = 0x1c1b30)失败(没有这样的设备)06-07 19:49:09.143:W/dalvikvm(13629):threadid = 11:线程退出with uncaught exception(group = 0x40c671f8)06-07 19:49:09.143:E/AndroidRuntime(13629):FATAL EXCEPTION:Thread-692

06-07 19:49:09.143:E/AndroidRuntime(13629):java.lang.IllegalArgumentException

06-07 19:49:09.143:E/AndroidRuntime(13629):在android.view.Surface.unlockCanvasAndPost(Native Method)

06-07 19:49:09.143:E/AndroidRuntime(13629):at com.android.internal.view.BaseSurfaceHolder.unlockCanvasAndPost(BaseSurfaceHolder.java:215)

提前致谢

android canvas surfaceholder live-wallpaper

11
推荐指数
1
解决办法
5646
查看次数

"表面已被释放"内部"surfaceCreated"

我知道这是一个常见问题,但是这个堆栈跟踪显示其他错误.你可以看到即使setDisplay(holder)被称为内部surfaceCreated仍然会抛出IllegalArgumentException.这也不是一个罕见的例外,昨天在~3,000,000个剪辑视图中发生了~125,000次.我可以向你保证,mCurrentPlayer也可以正确初始化.

surfaceCreated:

@Override
public void surfaceCreated(SurfaceHolder holder) {
    mIsSurfaceCreated = true;
    mCurrentPlayer.setDisplay(holder);
}
Run Code Online (Sandbox Code Playgroud)

surfaceDestroy:

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
    mIsSurfaceCreated = false;

    // Could be called after player was released in onDestroy.
    if (mCurrentPlayer != null) {
        mCurrentPlayer.setDisplay(null);
    }
}
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪:

java.lang.IllegalArgumentException: The surface has been released
    at android.media.MediaPlayer._setVideoSurface(Native Method)
    at android.media.MediaPlayer.setDisplay(MediaPlayer.java:660)
    at com.xxx.xxx.view.VideoPlayerView.surfaceCreated(VideoPlayerView.java:464)
    at android.view.SurfaceView.updateWindow(SurfaceView.java:543)
    at android.view.SurfaceView.access$000(SurfaceView.java:81)
    at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:169)
    at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:590)
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1644)
    at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2505)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:154)
    at …
Run Code Online (Sandbox Code Playgroud)

android surfaceholder android-mediaplayer

10
推荐指数
1
解决办法
1万
查看次数

表面支架上的凸轮图片,绘图:由于表面类型而异常

我使用的是SurfaceView具有SurfaceHolder与在我的测试应用程序相机预览开始.

public class TextLocatorActivity extends Activity {

    private Preview pvw;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

        pvw = new Preview(this);
        setContentView(pvw);        
    }   
Run Code Online (Sandbox Code Playgroud)

我想使用CameraPreview(随SDK版本7的SDK Samples一起提供).点击UI即可拍照.这是Preview班级:

public class Preview extends SurfaceView implements OnClickListener, SurfaceHolder.Callback {

SurfaceHolder holder;
Camera cam; 

final static String TAG = "TextLocator:Preview";

Preview(Context context) {
    super(context);

    holder = getHolder();
    holder.addCallback(this);
    this.setOnClickListener(this);
    // seems to be required (although the docs state, this enum is deprecated, as the type will be …
Run Code Online (Sandbox Code Playgroud)

android surfaceview surfaceholder

7
推荐指数
1
解决办法
2899
查看次数

在Android中设置SurfaceView的背景颜色

我正在为android构建一个paint应用程序.扩展随SDK提供的FingerPaint应用程序示例.但是,与FingerPaint不同,我使用SurfaceView和单独的渲染线程来绘制表面.所有这些都非常标准和直接.运作良好.但是,我希望在绘画表面上给出白色背景,这就像在白纸上画画一样.默认背景为黑色.我的表面视图的线程调用视图的onDraw()方法.

我在这里面临的问题是,如果我将背景颜色或背景资源设置为SurfaceView,则在下次渲染视图时,此背景将覆盖曲面的上一个绘图.我将用一个例子来解释这个:

假设我将背景设置为白色.现在,应用程序启动,我的SurfaceView具有白色.好的,到目前为止还不错.现在,我用手指在这个表面上画了一条红色的线条.该线现在显示在白色表面上.好.现在,这应该是一个绘画应用程序,并假设我想画一辆车.那么,我用手指画出第二条红线.第二行画在屏幕上,但我之前绘制的第一行消失了.也就是说,因为我已经为SurfaceView设置了一些背景,所以再次绘制背景,从而覆盖绘制的第一行.现在屏幕仅显示绘制的第2行.

显然,我不希望这种情况发生.当我不尝试改变背景时(即,在默认的黑色背景上显示两条线,没有有效的背景),代码完美地工作.但是当我设置一些理想的背景时,就会发生这种情况.有没有办法以某种方式拥有静态背景,每次都不会绘制?我希望背景只绘制一次,所有后续绘图都应该这个背景上进行.我不希望android运行时,每次绘制我的视图时绘制背景,从而覆盖之前渲染中该视图上的所有绘图.有办法解决这个问题吗?

我尝试过的事情是:

  1. 使用android:background在XML中设置SurfaceView的背景颜色.

  2. 做到这一点,使用风格的概念.(指定样式值并在布局文件中引用它).样式只将背景颜色定义为#FFFFFFFF(白色).

  3. 将样式2设置为SurfaceView的父视图(RelativeLayout).

  4. 将样式2设置为整个应用程序,作为主题,在我的清单文件中使用android:theme.

  5. 将SurfaceView的背景可绘制设置为纯白色图像.

  6. 从代码中调用我的SurfaceView的setBackgroundColor,this.setBackgroundColor(Color.WHITE).

谢谢.

android background background-color surfaceview surfaceholder

7
推荐指数
1
解决办法
5757
查看次数