Разработка Android-приложений с Augmented Reality. Тимур Машнин

Читать онлайн книгу.

Разработка Android-приложений с Augmented Reality - Тимур Машнин


Скачать книгу
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 ());

      // Create an object with an image in the app resources.

      // And the same goes for the app assets

      GeoObject go = new GeoObject (1l);

      go.setGeoPosition(mCurrentLocation.getLatitude()+0.00005,mCurrentLocation.getLongitude () -0.0001);

      go.setImageUri("assets://creature_7.png»);

      go.setName («Image from assets»);

      //


Скачать книгу