Полезные примеры Android

Полезные примеры Android
Android — TextureView

Если вы хотите отобразить поток видео в реальном времени или любой поток контента, например видео или сцену OpenGL, для этого можно использовать TextureView, предоставляемый Android.

Чтобы использовать TextureView, все, что вам нужно сделать, это получить его SurfaceTexture. SurfaceTexture затем можно использовать для рендеринга содержимого. Для этого вам просто нужно создать экземпляр объекта этого класса и реализовать интерфейс SurfaceTextureListener. Его синтаксис приведен ниже —

private TextureView myTexture;
public class MainActivity extends Activity implements SurfaceTextureListener{
   protected void onCreate(Bundle savedInstanceState) {
      myTexture = new TextureView(this);
      myTexture.setSurfaceTextureListener(this);
      setContentView(myTexture);
   }
}

После этого вам нужно переопределить его методы. Методы перечислены следующим образом —

@Override
public void onSurfaceTextureAvailable(SurfaceTexture arg0, int arg1, int arg2) {
}

@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture arg0) {
}

@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture arg0, int arg1,int arg2) {
}

@Override
public void onSurfaceTextureUpdated(SurfaceTexture arg0) {
}

Любое представление, отображаемое в представлении текстуры, можно повернуть, а его свойство alpha можно настроить с помощью методов setAlpha и setRotation . Его синтаксис приведен ниже —

myTexture.setAlpha(1.0f);
myTexture.setRotation(90.0f);

Помимо этих методов, в классе TextureView доступны другие методы. Они перечислены ниже —

Sr.NoМетод и описание
1

getSurfaceTexture ()

Этот метод возвращает SurfaceTexture, используемый этим представлением.

2

getBitmap(int width, int height)

Этот метод возвращает. Возвращает представление Bitmap содержимого связанной текстуры поверхности.

3

getTransform(Matrix transform)

Этот метод возвращает преобразование, связанное с этим представлением текстуры.

4

isOpaque ()

Этот метод указывает, является ли это представление непрозрачным.

5

lockCanvas ()

Этот метод запускает редактирование пикселей на поверхности

6

setOpaque(boolean opaque)

Этот метод указывает, непрозрачно ли содержимое этого TextureView.

7

setTransform(Matrix transform)

Этот метод устанавливает преобразование, связанное с этим видом текстуры.

8

unlockCanvasAndPost(Canvas canvas)

Этот метод завершает редактирование пикселей на поверхности.

Пример

В приведенном ниже примере демонстрируется использование класса TextureView. Он содержит базовое приложение, которое позволяет вам просматривать камеру внутри вида текстуры и изменять ее угол, ориентацию и т. Д.

Чтобы поэкспериментировать с этим примером, вам нужно запустить это на реальном устройстве, на котором присутствует камера.

ШагиОписание
1Вы будете использовать IDE студии Android для создания приложения Android и назовите его как TextureView в пакете com.example.textureview.
2Измените файл src / MainActivity.java, чтобы добавить код действия.
3Измените XML-файл макета res / layout / activity_main.xml, добавьте при необходимости любой компонент графического интерфейса.
5Запустите приложение, выберите работающее устройство Android, установите на него приложение и проверьте результаты.

Вот содержимое src / com.example.textureview / MainActivity.java .

package com.example.textureview;

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

<?xml version="1.0" encoding="utf-8"?>
<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" >

   <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>

Попробуем запустить ваше приложение TextureView. Я предполагаю, что вы подключили свое настоящее мобильное устройство Android к компьютеру. Чтобы запустить приложение из студии Android, откройте один из файлов активности вашего проекта и щелкните Значок запуска Eclipseзначок « Выполнить» на панели инструментов. Перед запуском вашего приложения студия Android отобразит следующее окно, чтобы выбрать вариант, в котором вы хотите запустить приложение Android.

Учебное пособие по Anroid TextureView

Выберите свое мобильное устройство в качестве варианта, а затем проверьте свое мобильное устройство, которое отобразит следующий экран. У этого экрана свойство alpha установлено на 0,5, а вращение — на 45.

Учебное пособие по Anroid TextureView

У этого экрана свойство alpha установлено на 1,5, а вращение — на 45 .

Учебное пособие по Anroid TextureView

У этого экрана свойство alpha установлено на 1.0, а вращение — на 90 .

Учебное пособие по Anroid TextureView

Выберите поля, которые будут показаны. Прочие будут скрыты. Перктаскивайте мышкой для изменения порядка полей.
  • Изображение
  • SKU
  • Рейтинг
  • Цена
  • Запасы
  • Доступность
  • В корзину
  • Описание
  • Содержимое
  • Вес
  • Размеры
  • Дополнительная информация
  • Атрибуты
  • Custom attributes
  • Настраиваемые поля
Сравнить
Список желаний 0
Открыть страницу желаний Продолжить покупки