Разработка Android-приложений с Augmented Reality - страница 11




Активность 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, рисующего дополненную реальность.

Для этого используется файл компоновки.

android: layout_width=«match_parent»

android: layout_height=«match_parent»

android: id="@+id/parentFrameLayout»>


android: id="@+id/beyondarFragment»

android:name="com.beyondar.android.fragment.BeyondarFragmentSupport»

android: layout_width=«match_parent»

android: layout_height=«match_parent» />


Далее создается объект 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).