2014-01-06 4 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 к основному XML: Android

<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 переопределяется в виде textur, и поэтому я не вижу содержимого основного xml-файла. Я пытаюсь добавить текстуру в основной xml. Просьба дать рекомендации по улучшению моего кода

ответ

0

Я не понимаю вас.

Вы говорите, что хотите добавить TextureView в свой макет activity_main.xml. но он уже существует.

Очевидно, что если вы используете setContentView(mTextureView); после setContentView(R.layout.activity_main);, весь макет исчезнет. Вы настраиваете содержимое активности на один вид вместо всего макета.

Вы также создаете новый TextureView и не используете его в макете 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

well 'View.addView (mTextureView);' означает, что вы берете «TextureView» из макета и добавляете вновь созданный «TextureView» и добавить его к нему. Вам не нужно иметь 2 'TextureViews', чтобы начать с –

+0

@Nicholas Tyler ... неправильно ли это делать ... это нужно сделать на этом пути? Что я могу сделать, чтобы устранить эту ошибку? – 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 после загрузки макета? Ваш дизайн текстур в макете правильно. Тогда его достаточно, чтобы загрузить только макет – Sathish

+0

Посмотрите ответ, который дал мне супер.OnCreate (savedInstanceState); setContentView (R.layout.activity_main); myTexture = новый TextureView (это); myTexture.setSurfaceTextureListener (this); setContentView (myTexture); – Aswathy

Смежные вопросы