Thứ Tư, 28 tháng 11, 2018

Android - Texture View

Nếu bạn muốn hiển thị luồng video trực tiếp hoặc bất kỳ luồng nội dung nào như video hoặc cảnh OpenGL, bạn có thể sử dụng TextureView do android cung cấp để thực hiện điều đó.

Học lập trình Android Để sử dụng TextureView, tất cả những gì bạn cần làm là lấy SurfaceTexture.The SurfaceTexture của nó sau đó có thể được sử dụng để hiển thị nội dung. 

Học lập trình Android
Học lập trình Android
Để làm điều này, bạn chỉ cần thực hiện nhanh một đối tượng của lớp này và thực hiện giao diện SurfaceTextureListener. Cú pháp của nó được đưa ra dưới đây
private TextureView myTexture;
public class MainActivity extends Activity implements SurfaceTextureListener{
   protected void onCreate(Bundle savedInstanceState) {
      myTexture = new TextureView(this);
      myTexture.setSurfaceTextureListener(this);
      setContentView(myTexture);
   }
}
Sau đó, những gì bạn cần làm là để ghi đè lên phương pháp của nó. Các phương thức được liệt kê như sau:
@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) {
}
Học lập trình Android Bất kỳ khung nhìn nào được hiển thị trong khung nhìn kết cấu đều có thể được xoay và thuộc tính alpha của nó có thể được điều chỉnh bằng cách sử dụng các phương thức setAlpha và setRotation . Cú pháp của nó được đưa ra dưới đây
myTexture.setAlpha(1.0f);
myTexture.setRotation(90.0f);
Ngoài các phương thức này, còn có các phương thức khác có sẵn trong lớp TextureView. Chúng được liệt kê dưới đây

Sr.NoPhương pháp & mô tả
1getSurfaceTexture ()
Phương thức này trả về SurfaceTexture được sử dụng bởi khung nhìn này.
2getBitmap (chiều rộng int, chiều cao int)

Phương thức này trả về Trả về một biểu diễn bitmap của nội dung của kết cấu bề mặt liên quan.
3getTransform (Biến đổi ma trận)
Phương thức này trả về biến đổi được kết hợp với khung nhìn kết cấu này.
4isOpaque ()

Phương thức này cho biết Chế độ xem này có bị mờ hay không.
5lockCanvas ()

Phương pháp này bắt đầu chỉnh sửa các pixel trên bề mặt
6setOpaque (boolean opaque)

Phương thức này cho biết liệu nội dung của TextureView này có bị mờ hay không.
7setTransform (Biến đổi ma trận)

Phương thức này đặt biến đổi để liên kết với chế độ xem kết cấu này.
số 8unlockCanvasAndPost (Canvas canvas)
Phương pháp này kết thúc chỉnh sửa pixel trên bề mặt.
Thí dụ

Học lập trình Android Ví dụ dưới đây minh họa việc sử dụng lớp TextureView. Nó thùng một ứng dụng cơ bản cho phép bạn xem camera bên trong một giao diện kết cấu và thay đổi góc, hướng của nó vv

Để thử nghiệm với ví dụ này, bạn cần chạy trên thiết bị thực tế có camera.

Các bướcSự miêu tả
1Bạn sẽ sử dụng android studio IDE để tạo một ứng dụng Android và đặt tên nó là TextureView theo một gói com.example.textureview.
2Sửa đổi tệp src / MainActivity.java để thêm mã Hoạt động.
3Sửa đổi tệp XML bố trí res / layout / activity_main.xml thêm bất kỳ thành phần GUI nào nếu cần.
5Chạy ứng dụng và chọn một thiết bị Android đang chạy và cài đặt ứng dụng trên đó và xác minh kết quả.
Đây là nội dung của 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
   }
}
Đây là nội dung của 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>
Đây là nội dung mặc định của 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>
Hãy thử chạy ứng dụng TextureView của bạn. Tôi cho rằng bạn đã kết nối thiết bị Android Mobile thực tế với máy tính của mình.

Để chạy ứng dụng từ Android studio, hãy mở một trong các tệp hoạt động của dự án của bạn và nhấp vào biểu tượng Chạy từ thanh công cụ.

Trước khi bắt đầu ứng dụng của bạn, Android studio sẽ hiển thị cửa sổ sau để chọn tùy chọn mà bạn muốn chạy ứng dụng Android của mình.

Chọn thiết bị di động của bạn làm tùy chọn và sau đó kiểm tra thiết bị di động của bạn sẽ hiển thị màn hình sau đây. Màn hình này có thuộc tính alpha được đặt thành 0,5 và xoay được đặt thành 45.

Màn hình này có thuộc tính alpha được đặt là 1,5 và xoay được đặt thành 45 .

Màn hình này có thuộc tính alpha được đặt thành 1.0 và xoay được đặt thành 90 .

Không có nhận xét nào:

Đăng nhận xét

Lập trình Android - RenderScript

Trong chương này, chúng ta sẽ tìm hiểu về Android RenderScript. Thông thường các ứng dụng trên Android được thiết kế để tiêu thụ tài nguyên ...