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.



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