سبد (0)

آموزش texture view در اندروید

آموزش texture view  در اندروید

اگر بخواهید جریان یک ویدیوی زنده یا هر جریان دیگری مانند ویدیو یا یک OpenGL را نمایش دهید، می توانید از TextureView استفاده کنید که توسط اندروید ارائه شده است.

برای استفاده از 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) {
}

هر ویو که در texture view استفاده می شود، می تواند چرخانده شود و ویژگی آلفای مربوط به آن با استفاده از متد های setAlpha  و  setRotation تطبیق داده می شود. کدهای آن به شکل زیر می باشد.

 

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

علاوه بر این متد ها، متد های دیگری در TextureView وجود دارند که در جدول زیر ارائه شده اند.

  • getSurfaceTexture()

    این متد SurfaceTexture  استفاده شده با این ویو را بر میگرداند .

  • getBitmap(int width, int height)

    این متد یک bitmap را بر میگرداند که نمایانگر محتوای مربوط به surface texture  می باشد.

  • getTransform(Matrix transform)

    این متد تغییر شکل مربوط به این texture view را بر میگرداند .

  • isOpaque()

    این متد نشان می دهد که آیا این ویو مبهم است یا نه.

  • lockCanvas()

    این متد ویرایش پیکسل های سطح را آغاز می کند.

  • setOpaque(boolean opaque)

    این متد نشان می دهد که آیا محتوای این TextureView مبهم است یا نه.

  • setTransform(Matrix transform)

    این متد تغییر شکلی در ارتباط با این بافت تنظیم می کند.

  • unlockCanvasAndPost(Canvas canvas)

    این متد ویرایش پیکسل های سطح را به پایان می رساند.

مثال

مثال زیر استفاده از کلاس TextureView را توضیح می دهد. در این مثال یک برنامه ی پایه ایجاد می شود که به شما اجازه می دهد تا دوربین را در داخل یک TextureView مشاهده کرده و زاویه، جهت و غیره مربوط به آن را تغییر دهید.

برای آزمایش این مثال باید آن را روی دستگاهی اجرا کنید که دارای دوربین می باشد.

  • برای ایجاد یک برنامه ی اندروید از Eclipse IDE استفاده خواهید کرد و آن را با عنوان  TextureView  به عنوان بسته ی com.PRG.TextureView نام گذاری کنید. زمان ایجاد این برنامه مطمئن شوید که Target SDK و Compile With در آخرین ورژن Android SDK هستند تا از سطوح بالاتر API استفاده کنید.

  • فایل MainActivity.java را برای افزودن کد فعالیت تغییر دهید.

  • فایل  res/layout/activity_main.xml را تغییر دهید و اگر لازم است مولفه های GUI اضافه کنید.

  • برنامه را اجرا کنید و یک دستگاه اجرایی اندروید انتخاب کرده و برنامه را روی آن نصب کنید و نتایج را بررسی کنید.

در اینجا محتوای MainActivity.java را مشاهده می کنید.

 

package com.PRG.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 را می بینید.

 

<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.PRG.TextureView"
   android:versionCode="1"
   android:versionName="1.0" >

   <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.PRG.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 شما را اجرا کنیم. فرض می کنیم که دستگاه موبایل اندروید خود را به کامپیوتر متصل کرده اید. برای اجرای برنامه از Eclipse، یکی ازفایل های فعالیت پروژه را باز کرده و روی آیکن Run  از تولبار کلیک کنید.

دستگاه موبایل خود را به عنوان یک گزینه انتخاب کرده و سپس آن را بررسی کنید که صفحه ی زیر را نمایش می دهد. این صفحه دارای ویژگی آلفای تنظیم شده روی 0.5 و چرخش تنظیم شده روی 45 می باشد.

این صفحه دارای آلفا 1.5 و چرخش 45 می باشد.

این صفحه دارای آلفا 1 و چرخش 90 است.

تمامی محصولات و خدمات این وبسایت، حسب مورد دارای مجوزهای لازم از مراجع مربوطه می‌باشند و فعالیت‌های این سایت تابع قوانین و مقررات جمهوری اسلامی ایران است.
logo-samandehi مجوز نشر دیجیتال از وزرات فرهنگ و ارشاد اسلامی پرداخت آنلاین -  بانک ملت معرفی بیاموز در شبکه سه