Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Hướng dẫn sử dụng Gravity View trong Android

Gravity View là gì?

Gravity View là thư viện (library) cho Android cho phép sử dụng cảm biến chuyển động (accelerometer, gyroscope) để người dùng khám phá hình ảnh panorama/360° bằng cách xoay thiết bị vật lý.

Thư viện: co.gofynd.library:gravity-view:1.0 (từ JitPack/GitHub).

Các bước thực hiện

Bước 1: Tạo dự án mới

Android Studio → File → New Project → Empty Activity.

Bước 2: Thêm dependency vào build.gradle (Module)

dependencies {
    implementation 'co.gofynd.library:gravity-view:1.0'
    // Cần thêm maven { url 'https://jitpack.io' } vào project build.gradle
}

Bước 3: Layout với HorizontalScrollView + ImageView (activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <HorizontalScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="none">

        <ImageView
            android:id="@+id/imageView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:scaleType="centerCrop" />

    </HorizontalScrollView>

</RelativeLayout>

HorizontalScrollView cho phép cuộn ngang hình ảnh rộng. ImageView hiển thị ảnh panorama.

Bước 4: MainActivity.java

package com.example.gravityviewexample;

import android.os.Bundle;
import android.widget.ImageView;
import androidx.appcompat.app.AppCompatActivity;
import co.gofynd.gravityview.GravityView;

public class MainActivity extends AppCompatActivity {

    private GravityView gravityView;
    private ImageView imageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        imageView = findViewById(R.id.imageView);
        gravityView = GravityView.getInstance(this);

        // Kiểm tra thiết bị có hỗ trợ cảm biến không
        if (gravityView.deviceSupported()) {
            gravityView
                .setImage(imageView, R.drawable.panorama_image) // Ảnh trong res/drawable
                .center(); // Bắt đầu từ trung tâm ảnh
        } else {
            imageView.setImageResource(R.drawable.panorama_image); // Fallback
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        if (gravityView != null) {
            gravityView.registerListener(); // Đăng ký listener cảm biến
        }
    }

    @Override
    protected void onStop() {
        super.onStop();
        if (gravityView != null) {
            gravityView.unRegisterListener(); // Hủy listener tiết kiệm pin
        }
    }
}

Chuẩn bị ảnh

  • Đặt ảnh panorama rộng (ví dụ 3600x1800px) vào res/drawable-nodpi/panorama_image.jpg
  • Dùng nodpi để tránh scaling tự động
  • Ảnh nên là equirectangular projection cho panorama 360°

Kết quả

App hiển thị phần trung tâm ảnh. Khi người dùng xoay thiết bị trái/phải, hình ảnh cuộn tương ứng như đang nhìn quanh.

Hướng dẫn sử dụng Gravity View trong Android

Hướng dẫn sử dụng Gravity View trong Android

Hướng dẫn sử dụng Gravity View trong Android

Lưu ý & Thay thế hiện đại

  • Thư viện này khá cũ (2017), có thể không tương thích Android 12+
  • Hiện nay nên dùng: Google VR SDK, SceneView, hoặc PanoramaGL
  • Đối với ảnh 360°: dùng com.google.vr.sdk.widgets.pano.VrPanoramaView (deprecated) hoặc Cardboard SDK
  • Kotlin: PanoramaView hoặc SphereView

Quyền cần thiết (nếu dùng cảm biến trực tiếp)

<uses-feature android:name="android.hardware.sensor.accelerometer" android:required="true" />
<uses-feature android:name="android.hardware.sensor.gyroscope" android:required="false" />