مشخصات مقاله
-
1671
-
0.0
-
3648
-
0
-
0
آموزش TextureView اندروید
دوره آموزش برنامه نویسی اندروید
کلیه حقوق مادی و معنوی این مقاله متعلق به آموزشگاه تحلیل داده می باشد و هر گونه استفاده غیر قانونی از آن پیگرد قانونی دارد.
آموزش ویو بافت (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 وجود دارند که در جدول زیر ارائه شده اند.
|
ردیف |
متد ها و توضیحات |
|
1 |
getSurfaceTexture() این روش SurfaceTexture استفاده شده با این ویو را گزارش می دهد. |
|
2 |
getBitmap(int width, int height) این روش یک bitmap را گزارش می دهد که نمایانگر محتوای مربوط به surface texture می باشد. |
|
3 |
getTransform(Matrix transform) این روش تغییر شکل مربوط به این texture view را گزارش می دهد. |
|
4 |
isOpaque() این روش نشان می دهد که آیا این ویو مبهم است یا نه. |
|
5 |
lockCanvas() این روش ویرایش پیکسل های سطح را آغاز می کند. |
|
6 |
setOpaque(boolean opaque) این روش نشان می دهد که آیا محتوای این TextureView مبهم است یا نه. |
|
7 |
setTransform(Matrix transform) این روش تغییر شکلی در ارتباط با این بافت تنظیم می کند. |
|
8 |
unlockCanvasAndPost(Canvas canvas) این روش ویرایش پیکسل های سطح را به پایان می رساند. |
مثال
مثال زیر استفاده از گروه TextureView را توضیح می دهد. در این مثال یک برنامه ی پایه ایجاد می شود که به شما اجازه می دهد تا دوربین را در داخل یک textureview مشاهده کرده و زاویه، جهت و غیره مربوط به آن را تغییر دهید.
برای آزمایش این مثال باید آن را روی دستگاهی اجرا کنید که دارای دوربین می باشد.
|
مراحل |
توضیحات |
|
1 |
برای ایجاد یک برنامه ی اندروید از Eclipse IDE استفاده خواهید کرد و آن را با عنوان TextureView تحت بسته ی com.example.textureview نام گذاری کنید. زمان ایجاد این برنامه مطمئن شوید که Target SDK و Compile With در آخرین ورژن Android SDK هستند تا از سطوح بالاتر API استفاده کنید. |
|
2 |
فایل src/MainActivity.java را برای افزودن کد فعالیت تغییر دهید. |
|
3 |
لی اوت فایل XML مربوط به res/layout/activity_main.xml را تغییر دهید و اگر لازم است مولفه های GUI اضافه کنید. |
|
5 |
برنامه را اجرا کنید و یک دستگاه اجرایی اندروید انتخاب کرده و برنامه را روی آن نصب کنید و نتایج را بررسی کنید. |
در اینجا محتوای 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 را می بینید.
<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>
اجازه بدهید برنامه ی TextureView شما را اجرا کنیم. فرض می کنیم که دستگاه موبایل اندروید خود را به کامپیوتر متصل کرده اید. برای اجرای برنامه از Eclipse، یکی ازفایل های فعالیت پروژه را باز کرده و روی آیکن Run از تولبار کلیک کنید. قبل از شروع برنامه ی شما، Eclipse پنجره ی زیر را برای انتخاب گزینه ی محل اجرای برنامه ی اندرویدتان، نمایش خواهد داد.
دستگاه موبایل خود را به عنوان یک گزینه انتخاب کرده و سپس آن را چک کنید که صفحه ی زیر را نمایش می دهد. این صفحه دارای ویژگی آلفا، تنظیم شده روی 0.5 و چرخش تنظیم شده روی 45 می باشد.
این صفحه دارای آلفا 1.5 و چرخش 45 می باشد.
این صفحه دارای آلفا 1 و چرخش 90 می باشد.
