Пишем
игру для Андроид
Часть вторая.
Установка оригинальных иконок и заднего фона.
Добавим в
наше приложение оригинальные иконки.
Иконки,
которые автоматически вставила Андроид Студио, находятся в папке нашего проекта
res/mipmap.
Студия
переспросит вас, нужно перезаписать? Смело отвечаем, Overwrite!
Теперь,
если запустить наше приложение, мы увидим снова
“Hello
world!”, но когда
закроем приложение, на экране будет красоваться наша иконка!
Размещение фона MoonBase
Сначала
нашу картинку с фоном нужно разместить в папку, где будут храниться все наши
изображения res/drawable.
Теперь
разместим рисунок на главном окне, вместо Hello world.
Посмотрим
файл главного активити MainActivity.java (он
находится в папке java).
Вот его фрагмент.
package com.adc2017gmail.moonbase;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
В начале,
идет ссылка на пакет, где сохраняется весь наш проект
package com.adc2017gmail.moonbase;
Потом импортируются нужные библиотеки. Студия автоматически будет их
добавлять и убирать, взамисимости от того, какие используете.
Потом объявляется класс MainActivity, который наследуется от
ActionBarActivity. Это наследование в итоге создает нам
черную полоску вверху с названием приложения. Нам это не нужно, поэтому будем
наследоваться от класса Activity. Студия сразу предложит импортировать нужную библиотеку, соглашайтесь.
public class MainActivity extends
Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
Теперь разберемся с тем, что мы видим в главном окне. У нас работает
метод onCreate, который устанавливает (setContentView(R.layout.activity_main);) то, что прописано в файле activity_main.xml, который часто называют файлом разметки.
Открываем файл ресурсов res/layout/ activity_main.xml.
Смело удаляем ту разметку, которая там была и
вставляем следующее
<FrameLayout 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=".MainActivity"
android:background="@android:color/black">
/>
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/imageView1"
android:layout_gravity="center"
android:scaleType="fitXY"
android:src="@drawable/moon_base"
android:contentDescription="@string/bg"
/>
</FrameLayout>
Студия начинает ругаться, что в ресурсах строк нет такого описания bg, поэтому нужно открыть файл res/values/strings.xml и вставить строчку
<string name="bg">background</string>
<resources>
<string name="app_name">MoonBase</string>
<string name="hello_world">Hello world!</string>
<string name="action_settings">Settings</string>
<string name="bg">background</string>
</resources>
Теперь разберемся с тем, что написано в activity_main.xml..
Мы выбрали тип верстки FrameLayout, при этом может отображаться только один элемент в строке. Т.е. если внутри FrameLayout мы поместим несколько элементов, то следующий будет отображаться поверх предыдущего. Нам это и нужно, ведь поверх нашего фона мы хотим расположим кнопку.
Мы разместили в ФрэймЛэйауте пока только один элемент ImageView. Стараемся, чтобы картинка растянулась на весь экран, а они у нас могут быть самые разные! И тут нас спасает замечательная строка
android:scaleType="fitXY"
т.е. наша картинка будет полностью втиснута в наш экран. Студия в режиме Design показывает нам activity_main.xml, вроде все хорошо.
Открываем файл манифеста AndroidManifest.xml и после строчки
android:label="@string/app_name"
вставляем строчку
android:screenOrientation="portrait"
Теперь при повороте планшета, картинка меняться не будет и останется только в вертикальной.
В следующей части, наконец-то, установим кнопку и сделаем переход на новое активити.
Отсюда можно скачать иконки и фото лунной базы
https://drive.google.com/open?id=0B-ReL1Efi6XVflZXMVk3ZUhtNl94YWVYWm5nVWhxOU9fM29saG1uaTQyUDZxWXZHQVc2SEE
Файлы приложения на данный момент
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.adc2017gmail.moonbase" >
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.adc2017gmail.moonbase" >
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
MainActivity.java
package com.adc2017gmail.moonbase;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
activity_main.xml
<FrameLayout 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=".MainActivity"
android:background="@android:color/black">
/>
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/imageView1"
android:layout_gravity="center"
android:scaleType="fitXY"
android:src="@drawable/moon_base"
android:contentDescription="@string/bg"
/>
</FrameLayout>
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:background="@android:color/black">
/>
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/imageView1"
android:layout_gravity="center"
android:scaleType="fitXY"
android:src="@drawable/moon_base"
android:contentDescription="@string/bg"
/>
</FrameLayout>
strings.xml
<resources>
<string name="app_name">MoonBase</string>
<string name="hello_world">Hello world!</string>
<string name="action_settings">Settings</string>
<string name="bg">background</string>
</resources>
<string name="app_name">MoonBase</string>
<string name="hello_world">Hello world!</string>
<string name="action_settings">Settings</string>
<string name="bg">background</string>
</resources>
Комментариев нет:
Отправить комментарий