2014-01-06 2 views
3
public class MainActivity extends Activity implements TextureView.SurfaceTextureListener{ 
private Camera mCamera; 
private TextureView mTextureView; 



@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    mTextureView = (TextureView)findViewById(R.id.textureView1); 

    mTextureView = new TextureView(this); 
    mTextureView.setSurfaceTextureListener(this); 


} 




@Override 
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) 
{ 


    mCamera = Camera.open(0); 


    try { 
     mCamera.setPreviewTexture(surface); 
    } catch (IOException e) 
      { 

     e.printStackTrace(); 
    } 
    mCamera.startPreview(); 

} 



@Override 
public boolean onSurfaceTextureDestroyed(SurfaceTexture arg0) { 
    mCamera.stopPreview(); 
    mCamera.release(); 
    return true; 
} 



@Override 
public void onSurfaceTextureSizeChanged(SurfaceTexture arg0, int arg1, 
     int arg2) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onSurfaceTextureUpdated(SurfaceTexture arg0) { 

} 

    } 

XML 파일추가 TextureView : 안드로이드

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context=".MainActivity" > 

<TextView 
    android:id="@+id/textView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/hello_world" /> 

<TextureView 
    android:id="@+id/textureView1" 
    android:layout_width="350dp" 
    android:layout_height="350dp" 
    android:layout_below="@+id/textView1" 

    /> 

나는 질감보기를 사용하여 이미지를 캡처하는 것을 시도하고있다. 하지만 주 XML 파일은 텍스처보기로 덮어 씌여져 있으므로 main xml 파일의 내용을 볼 수 없습니다. 주 XML에 textureview를 추가하려고합니다. 제 코드 개선 방안을 알려주십시오.

답변

0

질문이 있으십니까?

activity_main.xml 레이아웃에 TextureView을 추가한다고 가정 해보십시오. 그러나 그것은 이미 있습니다.

setContentView(R.layout.activity_main); 뒤에 사용하면 분명히 전체 레이아웃이 사라집니다. 액티비티 컨텐츠를 전체 레이아웃 대신 단일보기로 설정합니다.

또한 을 새로 만들고 activity_main 레이아웃에있는 것을 사용하지 않습니다.

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

    mTextureView = (TextureView)findViewById(R.id.textureView1); 
    mTextureView.setSurfaceTextureListener(this); 
} 

나는 이런 식으로해야한다고 생각합니다. 나는 이것을 결코 테스트하지 않았다.

TextureView로 카메라 미리보기를 만들고자하는 것 같습니다. 좋은 예가 here이고 더 진보 된 버전이 here입니다.

+0

View.addView (mTextureView); 이 선은 나에게 끊임없이 오류를 보이고있다. Text_View에 캐스트를 추가하라고 요청했습니다. 코드 pls를 확인했습니다. – Aswathy

+0

잘'View.addView (mTextureView);는 레이아웃에서'TextureView'를 가져오고 새로 생성 된'TextureView'를 추가한다는 것을 의미합니다. 그것을 그것에 추가하십시오. 당신은 –

+0

로 시작하는 2 개의'TextureViews '를 가질 필요가 없습니다 @Nicholas Tyler ... 그렇게하는 것이 잘못되었습니다 ... 그것은 방법 na에서 완료되어야합니까? 이 오류를 제거하려면 어떻게해야합니까? – Aswathy

-1

이 코드를 확인하면 나에게 적합합니다.

MainActivity.java.

import java.io.IOException; 

import android.annotation.SuppressLint; 
import android.app.Activity; 
import android.graphics.SurfaceTexture; 
import android.hardware.Camera; 
import android.os.Bundle; 
import android.view.Gravity; 
import android.view.Menu; 
import android.view.TextureView; 
import android.view.TextureView.SurfaceTextureListener; 
import android.view.View; 
import android.widget.FrameLayout; 

public class MainActivity extends Activity implements SurfaceTextureListener { 

    private TextureView myTexture; 
    private Camera mCamera; 

    @SuppressLint("NewApi") 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     myTexture = new TextureView(this); 
     myTexture.setSurfaceTextureListener(this); 
     setContentView(myTexture); 
    } 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 
    @SuppressLint("NewApi") 
    @Override 
    public void onSurfaceTextureAvailable(SurfaceTexture arg0, int arg1, 
    int arg2) { 
     mCamera = Camera.open(); 
     Camera.Size previewSize = mCamera.getParameters().getPreviewSize(); 
     myTexture.setLayoutParams(new FrameLayout.LayoutParams(
     previewSize.width, previewSize.height, Gravity.CENTER)); 
     try { 
     mCamera.setPreviewTexture(arg0); 
     } catch (IOException t) { 
     } 
     mCamera.startPreview(); 
     myTexture.setAlpha(1.0f); 
     myTexture.setRotation(90.0f); 
    } 

    @Override 
    public boolean onSurfaceTextureDestroyed(SurfaceTexture arg0) { 
     mCamera.stopPreview(); 
     mCamera.release(); 
     return true; 
    } 

    @Override 
    public void onSurfaceTextureSizeChanged(SurfaceTexture arg0, int arg1, 
    int arg2) { 
    // TODO Auto-generated method stub 
    } 
    @Override 
    public void onSurfaceTextureUpdated(SurfaceTexture arg0) { 
    // TODO Auto-generated method stub 
    } 
} 

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".MainActivity" > 

    <TextureView 
     android:id="@+id/textureView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" /> 
</RelativeLayout> 

의 AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.textureview" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="17" /> 
    <uses-permission android:name="android.permission.CAMERA"/> 
    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
     android:name="com.example.textureview.MainActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
     </activity> 
    </application> 
</manifest> 
+0

butif 우리는 setContentView (myTexture)를 사용한다. setContentView (R.layout.activity_main) 후; 전체 레이아웃은 사라질 것입니다. 레이아웃뿐만 아니라 텍스처보기를보고 싶습니다. 이 프로그램을 실행하면 텍스처보기 만 표시됩니다. – Aswathy

+0

레이아웃을로드 한 후 setcontentview를 사용하고 있습니까? layoutview에서 텍스처보기. 그럼 그저 레이아웃을로드 할 수있는 충분한 – Sathish

+0

는 내가 준 슈퍼 답변을보세요.onCreate (savedInstanceState); setContentView (R.layout.activity_main); myTexture = 새 TextureView (this); myTexture.setSurfaceTextureListener (this); setContentView (myTexture); – Aswathy

관련 문제