Пишем игру для Андроид
Часть третья. Установка кнопки с переходом на второе активити
Решим для себя, какую мы хотим видеть кнопку. Наша кнопка будет оригинальной и находиться по центру нижней части экрана на главном активити. При нажатии кнопка будет менять цвет и запустит переход на новое активити.
Мы отказались от стандартных кнопок Андроида, поэтому нужно иметь собственные изображения кнопки в нерабочем и нажатом состоянии. Я выбрал ненавязчивые кнопки, которые, как мне кажется, будут гармонировать с лунным пейзажем.
Теперь нужно решить проблему расположения кнопки. Она в том, что на разных экранах наша кнопка должна располагаться примерно в одном и том же месте относительно заднего фона. Я воспользовался методом разметки TableLayout. Фактически мы разобьем экран на 9 прозрачных ячеек (3 строки и 3 столбца). В 8 ячейку вставим изображение светлой кнопки.
Нажимаем Finish. Наше активити создано, также автоматически прописано в манифесте, созданы для него лэйаут и меню ресурсов.
Пора разместить кнопки. Скопируем их изображения и вставим в папку drawable как btn1(светлая) и btn2(темная).
Поверх нашего фона вставляем еще один слой в виде таблицы TableLayout.
<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"
/>
<TableLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:stretchColumns="*"
>
<TableRow
android:layout_weight="1"
android:gravity="center">
<ImageButton
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/transparent"
android:scaleType="center"
android:adjustViewBounds="true"
android:padding="10dp"
android:contentDescription="@string/btn1" />
<ImageButton
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/transparent"
android:scaleType="center"
android:adjustViewBounds="true"
android:padding="10dp"
android:contentDescription="@string/btn2" />
<ImageButton
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/transparent"
android:scaleType="center"
android:adjustViewBounds="true"
android:padding="10dp"
android:contentDescription="@string/btn3" />
</TableRow>
<TableRow
android:layout_weight="1"
android:gravity="center">
<ImageButton
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/transparent"
android:scaleType="center"
android:adjustViewBounds="true"
android:padding="10dp"
android:contentDescription="@string/btn4" />
<ImageButton
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/transparent"
android:scaleType="center"
android:adjustViewBounds="true"
android:padding="10dp"
android:contentDescription="@string/btn5" />
/>
<ImageButton
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/transparent"
android:scaleType="center"
android:adjustViewBounds="true"
android:padding="10dp"
android:contentDescription="@string/btn6" />
/>
</TableRow>
<TableRow
android:layout_weight="1"
android:gravity="center">
<ImageButton
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/transparent"
android:scaleType="center"
android:adjustViewBounds="true"
android:padding="10dp"
android:contentDescription="@string/btn7" />
<ImageButton
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/image_button8"
android:background="@android:color/transparent"
android:src="@drawable/btn1"
android:scaleType="center"
android:adjustViewBounds="true"
android:contentDescription="@string/btn8"
android:padding="10dp" />
<ImageButton
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/transparent"
android:scaleType="center"
android:adjustViewBounds="true"
android:padding="10dp"
android:contentDescription="@string/btn9" />
/>
</TableRow>
</TableLayout>
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"
/>
<TableLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:stretchColumns="*"
>
<TableRow
android:layout_weight="1"
android:gravity="center">
<ImageButton
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/transparent"
android:scaleType="center"
android:adjustViewBounds="true"
android:padding="10dp"
android:contentDescription="@string/btn1" />
<ImageButton
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/transparent"
android:scaleType="center"
android:adjustViewBounds="true"
android:padding="10dp"
android:contentDescription="@string/btn2" />
<ImageButton
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/transparent"
android:scaleType="center"
android:adjustViewBounds="true"
android:padding="10dp"
android:contentDescription="@string/btn3" />
</TableRow>
<TableRow
android:layout_weight="1"
android:gravity="center">
<ImageButton
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/transparent"
android:scaleType="center"
android:adjustViewBounds="true"
android:padding="10dp"
android:contentDescription="@string/btn4" />
<ImageButton
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/transparent"
android:scaleType="center"
android:adjustViewBounds="true"
android:padding="10dp"
android:contentDescription="@string/btn5" />
/>
<ImageButton
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/transparent"
android:scaleType="center"
android:adjustViewBounds="true"
android:padding="10dp"
android:contentDescription="@string/btn6" />
/>
</TableRow>
<TableRow
android:layout_weight="1"
android:gravity="center">
<ImageButton
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/transparent"
android:scaleType="center"
android:adjustViewBounds="true"
android:padding="10dp"
android:contentDescription="@string/btn7" />
<ImageButton
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/image_button8"
android:background="@android:color/transparent"
android:src="@drawable/btn1"
android:scaleType="center"
android:adjustViewBounds="true"
android:contentDescription="@string/btn8"
android:padding="10dp" />
<ImageButton
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/transparent"
android:scaleType="center"
android:adjustViewBounds="true"
android:padding="10dp"
android:contentDescription="@string/btn9" />
/>
</TableRow>
</TableLayout>
</FrameLayout>
Каждой ячейке мы дали «имя» от btn1 до btn9. Их также нужно прописать в строковых ресурсах.
Все ячейки прозрачны (android:background="@android:color/transparent")и пусты, кроме btn8 (android:src="@drawable/btn1").
В режиме дизайна можем проконтролировать, как разбит экран на ячейки.
Делаем кнопку активной. В MainActivity.java после строки
setContentView(R.layout.activity_main);
пишем следующее:
Создаем ImageButton объект с именем imgbtn8, и подключаем к нему чувствительность к касанию с помощью метода setOnClickListener . Теперь при касании данной области экрана будет происходить два события метода onClick.
Во-первых, будет выводиться новое изображение кнопки btn2 (по умолчанию мы в разметке назначили btn1.
Во-вторых, с помощью намерения по имени intent8 (по названию кнопки) и метода startActivity мы переходим на новое активити SecondActivity .
final ImageButton imgbtn8 = (ImageButton)findViewById(R.id.image_button8);
imgbtn8.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
// меняем изображение кнопки делаем переход на SecondActivity
imgbtn8.setImageResource(R.drawable.btn2);
Intent intent8 = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent8);
}
});
imgbtn8.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
// меняем изображение кнопки делаем переход на SecondActivity
imgbtn8.setImageResource(R.drawable.btn2);
Intent intent8 = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent8);
}
});
Посмотрим, как выглядит наша кнопка на разных устройствах.
Теперь проверим её работоспособность. Для этого я сделал маленькое видео.
В следующей статье мы рассмотрим проблемы создания игрового цикла и создадим первый игровой объект.
Ссылка на скачивание изображений кнопок.
Файлы приложения на данный момент.
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>
<activity
android:name=".SecondActivity"
android:label="@string/title_activity_second" >
</activity>
</application>
</manifest>
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>
<activity
android:name=".SecondActivity"
android:label="@string/title_activity_second" >
</activity>
</application>
</manifest>
MainActivity.java
package com.adc2017gmail.moonbase;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.MenuItem;import android.view.View;import android.widget.ImageButton;public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ImageButton imgbtn8 = (ImageButton)findViewById(R.id.image_button8);
imgbtn8.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
// меняем изображение кнопки делаем переход на SecondActivity
imgbtn8.setImageResource(R.drawable.btn2);
Intent intent8 = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent8);
}
});
}
@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);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ImageButton imgbtn8 = (ImageButton)findViewById(R.id.image_button8);
imgbtn8.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
// меняем изображение кнопки делаем переход на SecondActivity
imgbtn8.setImageResource(R.drawable.btn2);
Intent intent8 = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent8);
}
});
}
@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);
}
}
SecondActivity.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 SecondActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
}
@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_second, 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);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
}
@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_second, 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);
}
}
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>
<string name="btn1">btn1</string>
<string name="btn2">btn2</string>
<string name="btn3">btn3</string>
<string name="btn7">btn7</string>
<string name="btn8">btn8</string>
<string name="title_activity_second">SecondActivity</string>
<string name="btn4">btn4</string>
<string name="btn5">btn5</string>
<string name="btn6">btn6</string>
<string name="btn9">btn9</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>
<string name="btn1">btn1</string>
<string name="btn2">btn2</string>
<string name="btn3">btn3</string>
<string name="btn7">btn7</string>
<string name="btn8">btn8</string>
<string name="title_activity_second">SecondActivity</string>
<string name="btn4">btn4</string>
<string name="btn5">btn5</string>
<string name="btn6">btn6</string>
<string name="btn9">btn9</string>
</resources>
ativity_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"
/>
<TableLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:stretchColumns="*"
>
<TableRow
android:layout_weight="1"
android:gravity="center">
<ImageButton
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/transparent"
android:scaleType="center"
android:adjustViewBounds="true"
android:padding="10dp"
android:contentDescription="@string/btn1" />
<ImageButton
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/transparent"
android:scaleType="center"
android:adjustViewBounds="true"
android:padding="10dp"
android:contentDescription="@string/btn2" />
<ImageButton
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/transparent"
android:scaleType="center"
android:adjustViewBounds="true"
android:padding="10dp"
android:contentDescription="@string/btn3" />
</TableRow>
<TableRow
android:layout_weight="1"
android:gravity="center">
<ImageButton
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/transparent"
android:scaleType="center"
android:adjustViewBounds="true"
android:padding="10dp"
android:contentDescription="@string/btn4" />
<ImageButton
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/transparent"
android:scaleType="center"
android:adjustViewBounds="true"
android:padding="10dp"
android:contentDescription="@string/btn5" />
/>
<ImageButton
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/transparent"
android:scaleType="center"
android:adjustViewBounds="true"
android:padding="10dp"
android:contentDescription="@string/btn6" />
/>
</TableRow>
<TableRow
android:layout_weight="1"
android:gravity="center">
<ImageButton
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/transparent"
android:scaleType="center"
android:adjustViewBounds="true"
android:padding="10dp"
android:contentDescription="@string/btn7" />
<ImageButton
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/image_button8"
android:background="@android:color/transparent"
android:src="@drawable/btn1"
android:scaleType="center"
android:adjustViewBounds="true"
android:contentDescription="@string/btn8"
android:padding="10dp" />
<ImageButton
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/transparent"
android:scaleType="center"
android:adjustViewBounds="true"
android:padding="10dp"
android:contentDescription="@string/btn9" />
/>
</TableRow>
</TableLayout>
</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"
/>
<TableLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:stretchColumns="*"
>
<TableRow
android:layout_weight="1"
android:gravity="center">
<ImageButton
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/transparent"
android:scaleType="center"
android:adjustViewBounds="true"
android:padding="10dp"
android:contentDescription="@string/btn1" />
<ImageButton
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/transparent"
android:scaleType="center"
android:adjustViewBounds="true"
android:padding="10dp"
android:contentDescription="@string/btn2" />
<ImageButton
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/transparent"
android:scaleType="center"
android:adjustViewBounds="true"
android:padding="10dp"
android:contentDescription="@string/btn3" />
</TableRow>
<TableRow
android:layout_weight="1"
android:gravity="center">
<ImageButton
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/transparent"
android:scaleType="center"
android:adjustViewBounds="true"
android:padding="10dp"
android:contentDescription="@string/btn4" />
<ImageButton
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/transparent"
android:scaleType="center"
android:adjustViewBounds="true"
android:padding="10dp"
android:contentDescription="@string/btn5" />
/>
<ImageButton
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/transparent"
android:scaleType="center"
android:adjustViewBounds="true"
android:padding="10dp"
android:contentDescription="@string/btn6" />
/>
</TableRow>
<TableRow
android:layout_weight="1"
android:gravity="center">
<ImageButton
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/transparent"
android:scaleType="center"
android:adjustViewBounds="true"
android:padding="10dp"
android:contentDescription="@string/btn7" />
<ImageButton
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/image_button8"
android:background="@android:color/transparent"
android:src="@drawable/btn1"
android:scaleType="center"
android:adjustViewBounds="true"
android:contentDescription="@string/btn8"
android:padding="10dp" />
<ImageButton
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/transparent"
android:scaleType="center"
android:adjustViewBounds="true"
android:padding="10dp"
android:contentDescription="@string/btn9" />
/>
</TableRow>
</TableLayout>
</FrameLayout>
activity_second.xml
<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" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.adc2017gmail.moonbase.SecondActivity">
<TextView android:text="@string/hello_world" android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.adc2017gmail.moonbase.SecondActivity">
<TextView android:text="@string/hello_world" android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
Комментариев нет:
Отправить комментарий