Внедрить карту мира Раджавали во фрагмент Android
У меня проблемы с включением карты мира на фрагменте Android, так как действие выполняется следующим образом:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final RajawaliSurfaceView surface = new RajawaliSurfaceView(this);
surface.setFrameRate(60.0);
surface.setRenderMode(IRajawaliSurface.RENDERMODE_CONTINUOUSLY);
// Add mSurface to your root view
addContentView(surface, new ActionB
ar.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT));
renderer = new Renderer(this);
surface.setSurfaceRenderer(renderer);
}
Но когда я хочу сделать это во фрагменте выдает ошибку
addContentView(surface, new ActionBar.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT));
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final RajawaliSurfaceView surface = new RajawaliSurfaceView(getActivity());
surface.setFrameRate(60.0);
surface.setRenderMode(IRajawaliSurface.RENDERMODE_CONTINUOUSLY);
// Add mSurface to your root view
addContentView(surface, new ActionBar.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT));
renderer = new Renderer(getActivity());
surface.setSurfaceRenderer(renderer);
}
1 ответ
Ну, я думаю, вы неправильно понимаете разницу между фрагментом и активностью, это сообщение об ошибке:
не удается найти метод символа addContentView()
указывает на то, что этот метод не существует!
Это очень простой пример того, как загрузить карту Rajawali3D во фрагмент Android.
Создайте Activity, добавив транзакцию Fragment, фрагмент загрузится в map_fragment
контейнер, определенный в act_frag_map
расположение:
public class Map3DFragActivity extends AppCompatActivity {
public RajawaliSurfaceView rajawaliTexture;
Renderer renderer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.act_frag_map);
setFragment();
}
protected void setFragment() {
FragmentManager fragmentManager = getSupportFragmentManager();
Fragment mapFragment = new FragmentMap();
FragmentTransaction ft =
fragmentManager.beginTransaction();
ft.add(R.id.map_fragment, mapFragment).commit();
}
}
Это макет, содержащий фрагмент, добавляющий в свойство android:name
название нашего фрагмента класса:
act_frag_map
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".FragmentExampleActivity" >
<fragment
android:id="@+id/map_fragment"
android:name="com.test.FragmentMap"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
/>
</RelativeLayout>
Это фрагмент, который создает карту!
FragmentMap
import org.rajawali3d.surface.RajawaliSurfaceView;
public class FragmentMap extends Fragment {
public RajawaliSurfaceView rajawaliTexture;
Renderer renderer;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_frag_map,
container, false);
rajawaliTexture = (RajawaliSurfaceView) view.findViewById(R.id.rajawali_surface);
renderer = new Renderer(getActivity());
rajawaliTexture.setSurfaceRenderer(renderer);
return view;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); // make sure this line exists
}
}
activity_frag_map
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:surfaceview="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<org.rajawali3d.surface.RajawaliSurfaceView
android:id="@+id/rajawali_surface"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
surfaceview:frameRate="60.0"
surfaceview:renderMode="RENDER_WHEN_DIRTY"/>
</FrameLayout>