Change GeoObject images on touch показывает набор изображений на фоне камеры, которые заменяются на другие изображения при нажатии.
Attach view to GeoObject показывает набор изображений на фоне камеры с добавлением вида к изображению при нажатии.
Set static view to geoObject вместо изображений показывает виды на фоне камеры, а также сообщение при нажатии на одном из видов.
Customize sensor filter показывает набор изображений на фоне камеры с возможностью регулировки чувствительности датчика ориентации.
Simple AR camera with a radar view показывает набор изображений на фоне камеры, а также расположение изображений вокруг устройства.
Using BeyondarLocationManager показывает набор изображений на карте с кнопкой обновления местоположения.
Для работы BeyondAR фреймворка в файле манифеста приложения декларируются необходимые разрешения и наличие сенсоров устройства.
<! Minimum permissions for Beyondar >
<uses-permission android:name="android.permission.CAMERA» />
<! For Beyondar this is not mandatory unless you want to load something from Internet (for instance images) >
<uses-permission android:name="android.permission.INTERNET» />
<! BeyondAR needs the following features >
<uses-feature android:name="android.hardware.camera» />
<uses-feature android:name="android.hardware.sensor.accelerometer» />
<uses-feature android:name="android.hardware.sensor.compass» />
Активность SimpleCameraActivity, отображающая набор изображений на фоне камеры, имеет достаточно простой код.
package com.beyondar. example;
import android. os. Bundle;
import android.support.v4.app.FragmentActivity;
import android.view. Window;
import com.beyondar.android.fragment.BeyondarFragmentSupport;
import com.beyondar.android. world. World;
public class SimpleCameraActivity extends FragmentActivity {
private BeyondarFragmentSupport mBeyondarFragment;
private World mWorld;
/** Called when the activity is first created. */
@Override
public void onCreate (Bundle savedInstanceState) {
super. onCreate (savedInstanceState);
// Hide the window title.
requestWindowFeature (Window. FEATURE_NO_TITLE);
setContentView(R.layout.simple_camera);
mBeyondarFragment = (BeyondarFragmentSupport) getSupportFragmentManager().findFragmentById(R.id.beyondarFragment);
// We create the world and fill it
mWorld = CustomWorldHelper.generateObjects (this);
// and send it to the fragment
mBeyondarFragment.setWorld (mWorld);
// We also can see the Frames per seconds
mBeyondarFragment.showFPS (true);
}
}
В методе onCreate создается фрагмент BeyondarFragmentSupport, отвечающий за отображение вида камеры и вида BeyondarGLSurfaceView, рисующего дополненную реальность.
Для этого используется файл компоновки.
<?xml version=«1.0» encoding=«utf-8»? >
<FrameLayout xmlns: android="http://schemas.android.com/apk/res/android"
android: layout_width=«match_parent»
android: layout_height=«match_parent»
android: id="@+id/parentFrameLayout»>
<fragment
android: id="@+id/beyondarFragment»
android:name="com.beyondar.android.fragment.BeyondarFragmentSupport»
android: layout_width=«match_parent»
android: layout_height=«match_parent» />
</FrameLayout>
Далее создается объект World контейнер объектов дополненной реальности, который затем добавляется во фрагмент BeyondarFragmentSupport.
Метод mBeyondarFragment.showFPS (true) показывает количество кадров в секунду в левом верхнем углу экрана.
Вся магия по созданию объектов дополненной реальности осуществляется в классе CustomWorldHelper.
Здесь создается новый контейнер World, устанавливается его местоположение в реальном мире, а также на основе изображений создаются объекты GeoObject, которые добавляются в контейнер World.
public static World sharedWorld;
sharedWorld = new World (context);
sharedWorld.setGeoPosition (41.90533734214473d, 2.565848038959814d);
GeoObject go4 = new GeoObject (4l);
go4.setGeoPosition (41.90518862002349d, 2.565662767707665d);
go4.setImageUri("assets://creature_7.png»);
go4.setName («Image from assets»);
sharedWorld.addBeyondarObject (go4);
По умолчанию для контейнера World и для его объектов, в классе CustomWorldHelper, задаются фиксированные координаты в реальном мире. Исправим это, привязав координаты контейнера World к местоположению устройства.
Для определения местоположения устройства используем Fused location provider API (Android API Level> v9, Android Build Tools> v21).
Изменим код классов CustomWorldHelper, GoogleMapActivity и SimpleCameraActivity.
import android.annotation.SuppressLint;
import android.content.Context;
import android. location. Location;
import android.widget.Toast;
import com.beyondar.android.world.GeoObject;
import com.beyondar.android. world. World;
@SuppressLint («SdCardPath»)
public class CustomWorldHelper {
public static final int LIST_TYPE_EXAMPLE_1 = 1;
public static World sharedWorld;
public static World generateObjects (Context context, Location mCurrentLocation) {
sharedWorld = new World (context);
// The user can set the default bitmap. This is useful if you are
// loading images form Internet and the connection get lost
sharedWorld.setDefaultImage(R.drawable.beyondar_default_unknow_icon);
// User position (you can change it using the GPS listeners form Android
// API)
if (mCurrentLocation== null) {
mCurrentLocation=new Location (»»);
mCurrentLocation.setLatitude (41.90533734214473d);
mCurrentLocation.setLongitude (2.565848038959814d);
}
sharedWorld.setGeoPosition(mCurrentLocation.getLatitude(),mCurrentLocation.getLongitude ());