Черновик: Пошаговое создание форта на java
Участников: 2
Страница 2 из 2
Страница 2 из 2 • 1, 2
Re: Черновик: Пошаговое создание форта на java
Копирует текст
https://pastebin.com/byfaexHG
в файл main.xml
Здесь
android:id="@+id/btn0" В mainActivity.java переменная будет определяться
Button btn0;
android:text="set on"> - начальный текст на кнопке будет <set on>
так как кнопка находится внутри вложенного LinearLayout, имеющей атрибут
android:orientation="horizontal"> то она расположится по горизонтали
вместе с другими тремя кнопками.
Элемент может растягиваться в разные стороны, в зависимости от размеров текста,
переводов строк итд.
В ява коде ему можно присвоить текст так,
text0.setText("ON " );
для редактирования текста. Извлечь можно
String gtext = edText.getText().toString();
Это не очень простой элемент, почитать можно тут
http://developer.alexanderklimov.ru/android/views/edittext.php
Пожалуй перепишу main.xml сюда
https://pastebin.com/byfaexHG
в файл main.xml
- Код:
<Button
android:id="@+id/btn0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="set on">
</Button>
Здесь
android:id="@+id/btn0" В mainActivity.java переменная будет определяться
Button btn0;
android:text="set on"> - начальный текст на кнопке будет <set on>
так как кнопка находится внутри вложенного LinearLayout, имеющей атрибут
android:orientation="horizontal"> то она расположится по горизонтали
вместе с другими тремя кнопками.
- Код:
<TextView
android:id="@+id/text0"
android:text="nomesssge"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TextView>
Элемент может растягиваться в разные стороны, в зависимости от размеров текста,
переводов строк итд.
В ява коде ему можно присвоить текст так,
text0.setText("ON " );
- Код:
<EditText
android:id="@+id/edText"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</EditText>
для редактирования текста. Извлечь можно
String gtext = edText.getText().toString();
Это не очень простой элемент, почитать можно тут
http://developer.alexanderklimov.ru/android/views/edittext.php
Пожалуй перепишу main.xml сюда
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Пошаговое создание форта на java
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<TextView
android:id="@+id/text0"
android:text="nomesssge"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TextView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/btn0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="set on">
</Button>
<Button
android:id="@+id/btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="set off">
</Button>
<Button
android:id="@+id/btn2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="empty">
</Button>
<Button
android:id="@+id/btn3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="empty">
</Button>
</LinearLayout>
<Button
android:id="@+id/btn4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="get text">
</Button>
<EditText
android:id="@+id/edText"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</EditText>
<TextView
android:id="@+id/text1"
android:text="stat"
android:layout_width="wrap_content"
android:layout_height="35dp">
</TextView>
</LinearLayout>
<!--
comments -->
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<TextView
android:id="@+id/text0"
android:text="nomesssge"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TextView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/btn0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="set on">
</Button>
<Button
android:id="@+id/btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="set off">
</Button>
<Button
android:id="@+id/btn2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="empty">
</Button>
<Button
android:id="@+id/btn3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="empty">
</Button>
</LinearLayout>
<Button
android:id="@+id/btn4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="get text">
</Button>
<EditText
android:id="@+id/edText"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</EditText>
<TextView
android:id="@+id/text1"
android:text="stat"
android:layout_width="wrap_content"
android:layout_height="35dp">
</TextView>
</LinearLayout>
<!--
comments -->
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Пошаговое создание форта на java
Это все для стандартной ориентации экрана.
Если еще требуется использовать ландшафтную(телефон на боку),
то в каталоге res надо добавить подкаталог layout-land,
с именами файлов, что и в подкатологе layout.
Эти xml файлы должны содержать те же элементы,
что и исходные файлы, только расположить их надо
оптимально для ландшафтной ориентации
Читать об этом тут
http://developer.alexanderklimov.ru/android/orientation.php
Важно! Файл, который находится в каталогах layout и layout-land не обязательно должен называться main,
его название должно совпадать с названием, указанным в activity
Об этом дальше
Если еще требуется использовать ландшафтную(телефон на боку),
то в каталоге res надо добавить подкаталог layout-land,
с именами файлов, что и в подкатологе layout.
Эти xml файлы должны содержать те же элементы,
что и исходные файлы, только расположить их надо
оптимально для ландшафтной ориентации
Читать об этом тут
http://developer.alexanderklimov.ru/android/orientation.php
Важно! Файл, который находится в каталогах layout и layout-land не обязательно должен называться main,
его название должно совпадать с названием, указанным в activity
Об этом дальше
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Пошаговое создание форта на java
Теперь переходим в
src/main/java/<path>/MainActivity.java
копируем туда
https://pastebin.com/aUML6mpN
пожалуй проще вставить сюда и комментировать моменты.
//-------------------------------------------------------
package com.virf.less;
// название пакета - совпадает с src/main/java/com/virf/less
// тут находятся файлы java
import android.app.*;
import android.os.*;
import android.os.Bundle;
import android.os.Environment;
import android.util.*;
import android.content.pm.ActivityInfo; // тут нужен для ориентации экрана
import android.app.Activity;
import android.view.KeyEvent.Callback ;
import android.view.*; //KeyEvent SurfaceHolder; SurfaceView;
import android.view.View;
import android.view.View.*; //OnClickListener
import android.widget.*;
import java.util.*;
import java.util.List;
public class MainActivity extends Activity implements OnClickListener {
TextView text0;
TextView text1;
Button btn0;
Button btn1;
Button btn2;
Button btn3;
Button btn4;
EditText edText;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Внимание R.layout.main - здесь main название xml файла в папке res/layout
text0 = (TextView) findViewById(R.id.text0);
text1 = (TextView) findViewById(R.id.text1);
// поиск элементов, описанных в main.xml
btn0=(Button) findViewById(R.id.btn0); // поиск кнопки
btn0.setOnClickListener(this); // и устанавливается обработчик
btn1=(Button) findViewById(R.id.btn1);
btn1.setOnClickListener(this);
btn2=(Button) findViewById(R.id.btn2);
btn2.setOnClickListener(this);
btn3=(Button) findViewById(R.id.btn3);
btn3.setOnClickListener(this);
btn4=(Button) findViewById(R.id.btn4);
btn4.setOnClickListener(this);
edText=(EditText)findViewById(R.id.edText);
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
// Принудительная установка портретной ориентации
// Для ландшафтной следует писать
// setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION__LANDSCAPE);
// Если програмно менять ориентацию экрана в процессе выполнения,
// это будет перевызывать этот метод onCreate
);
}
@Override
public void onClick(View v) {
// по id определеяем кнопку, вызвавшую этот обработчик
switch (v.getId()) {
case R.id.btn0 :
text0.setText("ON " ); //присваивает текстовому полю вверху значение ON
break;
case R.id.btn1 :
text0.setText("OFF " );
break;
case R.id.btn4 :
String gtext = edText.getText().toString(); // получает текст из поля ввода
if ( ! gtext.equals("") ) // если текст не равен ""
btn2.setText(gtext); // то этот текст присваивается 2 кнопке
break;
}//switch
// две кнопки btn2 и btn3 остались без обработчика
}//click
}//all
//----------------------------------------------------
src/main/java/<path>/MainActivity.java
копируем туда
https://pastebin.com/aUML6mpN
пожалуй проще вставить сюда и комментировать моменты.
//-------------------------------------------------------
package com.virf.less;
// название пакета - совпадает с src/main/java/com/virf/less
// тут находятся файлы java
import android.app.*;
import android.os.*;
import android.os.Bundle;
import android.os.Environment;
import android.util.*;
import android.content.pm.ActivityInfo; // тут нужен для ориентации экрана
import android.app.Activity;
import android.view.KeyEvent.Callback ;
import android.view.*; //KeyEvent SurfaceHolder; SurfaceView;
import android.view.View;
import android.view.View.*; //OnClickListener
import android.widget.*;
import java.util.*;
import java.util.List;
public class MainActivity extends Activity implements OnClickListener {
TextView text0;
TextView text1;
Button btn0;
Button btn1;
Button btn2;
Button btn3;
Button btn4;
EditText edText;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Внимание R.layout.main - здесь main название xml файла в папке res/layout
text0 = (TextView) findViewById(R.id.text0);
text1 = (TextView) findViewById(R.id.text1);
// поиск элементов, описанных в main.xml
btn0=(Button) findViewById(R.id.btn0); // поиск кнопки
btn0.setOnClickListener(this); // и устанавливается обработчик
btn1=(Button) findViewById(R.id.btn1);
btn1.setOnClickListener(this);
btn2=(Button) findViewById(R.id.btn2);
btn2.setOnClickListener(this);
btn3=(Button) findViewById(R.id.btn3);
btn3.setOnClickListener(this);
btn4=(Button) findViewById(R.id.btn4);
btn4.setOnClickListener(this);
edText=(EditText)findViewById(R.id.edText);
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
// Принудительная установка портретной ориентации
// Для ландшафтной следует писать
// setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION__LANDSCAPE);
// Если програмно менять ориентацию экрана в процессе выполнения,
// это будет перевызывать этот метод onCreate
);
}
@Override
public void onClick(View v) {
// по id определеяем кнопку, вызвавшую этот обработчик
switch (v.getId()) {
case R.id.btn0 :
text0.setText("ON " ); //присваивает текстовому полю вверху значение ON
break;
case R.id.btn1 :
text0.setText("OFF " );
break;
case R.id.btn4 :
String gtext = edText.getText().toString(); // получает текст из поля ввода
if ( ! gtext.equals("") ) // если текст не равен ""
btn2.setText(gtext); // то этот текст присваивается 2 кнопке
break;
}//switch
// две кнопки btn2 и btn3 остались без обработчика
}//click
}//all
//----------------------------------------------------
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Пошаговое создание форта на java
Скачать можно тут
https://anonfile.com/1c9fr1b4o7/less0_7z
Это простейший проект, слегка отредактировав который, можно использовать
для тестирования компонентов, работающих с некоторыми весьма мутными
функциями android api, прежде, чем тащить их в основной проект.
Добавим еще некоторые полезные элементы.
Работа с несколькими экранами.
Ничего сложного.
Создаем новый проект, назовем less1
копируем файл из main.xml старого проекта, в файл main.xml
нового проекта.
Только заменим в определение самой первой кнопки
<Button
android:id="@+id/btn0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="set on">
</Button>
android:text="set on"> на что то типа android:text="startAbsolute">
Потом создаем новый файл, назовем absl.xml и копируем туда
следующий текст
https://anonfile.com/1c9fr1b4o7/less0_7z
Это простейший проект, слегка отредактировав который, можно использовать
для тестирования компонентов, работающих с некоторыми весьма мутными
функциями android api, прежде, чем тащить их в основной проект.
Добавим еще некоторые полезные элементы.
Работа с несколькими экранами.
Ничего сложного.
Создаем новый проект, назовем less1
копируем файл из main.xml старого проекта, в файл main.xml
нового проекта.
Только заменим в определение самой первой кнопки
<Button
android:id="@+id/btn0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="set on">
</Button>
android:text="set on"> на что то типа android:text="startAbsolute">
Потом создаем новый файл, назовем absl.xml и копируем туда
следующий текст
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Пошаговое создание форта на java
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button
android:id="@+id/btn0"
android:layout_x="10dp"
android:layout_y="5dp"
android:layout_width="70dp"
android:layout_height="70dp"
android:text="jump">
</Button>
<Button
android:id="@+id/btn1"
android:layout_x="90dp"
android:layout_y="5dp"
android:layout_width="70dp"
android:layout_height="70dp"
android:text="Jmp">
</Button>
<Button
android:id="@+id/btn2"
android:layout_x="180dp"
android:layout_y="5dp"
android:layout_width="70dp"
android:layout_height="70dp"
android:text="return">
</Button>
<Button
android:id="@+id/btn3"
android:layout_x="100dp"
android:layout_y="300dp"
android:layout_width="70dp"
android:layout_height="70dp"
android:text="base">
</Button>
<TextView
android:id="@+id/text0"
android:text="nomesssge"
android:layout_x="10dp"
android:layout_y="270dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TextView>
<EditText
android:id="@+id/edText"
android:layout_width="match_parent"
android:layout_height="70dp"
android:layout_x="10dp"
android:layout_y="120dp">
</EditText>
<TextView
android:id="@+id/text1"
android:text="stat"
android:layout_x="10dp"
android:layout_y="90dp"
android:layout_width="wrap_content"
android:layout_height="35dp">
</TextView>
</AbsoluteLayout>
Тут вместо <LinearLayout используется AbsoluteLayout>
Здесь используется прямое указание координат элементов,
а не относительное их расположение. Элементы можно программно
перемещать в процессе работы, что позволяет настраивать экран
хирургически, чтобы нужные кнопки были отжаты до того,
как прибор вытащат из кармана.
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button
android:id="@+id/btn0"
android:layout_x="10dp"
android:layout_y="5dp"
android:layout_width="70dp"
android:layout_height="70dp"
android:text="jump">
</Button>
<Button
android:id="@+id/btn1"
android:layout_x="90dp"
android:layout_y="5dp"
android:layout_width="70dp"
android:layout_height="70dp"
android:text="Jmp">
</Button>
<Button
android:id="@+id/btn2"
android:layout_x="180dp"
android:layout_y="5dp"
android:layout_width="70dp"
android:layout_height="70dp"
android:text="return">
</Button>
<Button
android:id="@+id/btn3"
android:layout_x="100dp"
android:layout_y="300dp"
android:layout_width="70dp"
android:layout_height="70dp"
android:text="base">
</Button>
<TextView
android:id="@+id/text0"
android:text="nomesssge"
android:layout_x="10dp"
android:layout_y="270dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TextView>
<EditText
android:id="@+id/edText"
android:layout_width="match_parent"
android:layout_height="70dp"
android:layout_x="10dp"
android:layout_y="120dp">
</EditText>
<TextView
android:id="@+id/text1"
android:text="stat"
android:layout_x="10dp"
android:layout_y="90dp"
android:layout_width="wrap_content"
android:layout_height="35dp">
</TextView>
</AbsoluteLayout>
Тут вместо <LinearLayout используется AbsoluteLayout>
Здесь используется прямое указание координат элементов,
а не относительное их расположение. Элементы можно программно
перемещать в процессе работы, что позволяет настраивать экран
хирургически, чтобы нужные кнопки были отжаты до того,
как прибор вытащат из кармана.
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Пошаговое создание форта на java
Что бы создать новый экран, нужно прописать новое activity в манифесте
отредактируем файл app/src/main/androidManifest.xml
В содержимое файла
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.examp.abs" >
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme"
android:resizeableActivity = "true">
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
добавим строчки
<activity
android:name=".abslayout">
</activity>
Получим
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.examp.abs" >
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme"
android:resizeableActivity = "true">
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".abslayout">
</activity>
</application>
</manifest>
Здесь ".abslayout" имя класса abslayout.java, который будет обрабатывать
экран.
Каждый экран должен быть прописан в манифесте обязательно.
отредактируем файл app/src/main/androidManifest.xml
В содержимое файла
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.examp.abs" >
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme"
android:resizeableActivity = "true">
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
добавим строчки
<activity
android:name=".abslayout">
</activity>
Получим
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.examp.abs" >
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme"
android:resizeableActivity = "true">
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".abslayout">
</activity>
</application>
</manifest>
Здесь ".abslayout" имя класса abslayout.java, который будет обрабатывать
экран.
Каждый экран должен быть прописан в манифесте обязательно.
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Пошаговое создание форта на java
Копируем в главный класс,
(в aide называется обычно MainActivity.java и первый прорисывается в
манифесте с атрибутом <action android:name="android.intent.action.MAIN")
package com.examp.abs; // эту строчку не копируем - оставляем такой,
// какой сделала среда программирования.
import android.app.*;
import android.os.*;
import android.os.Bundle;
import android.os.Environment;
import android.util.*;
//добавленные api
import android.content.pm.ActivityInfo; // тут нужен для ориентации экрана
import android.content.Intent;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.app.Activity;
import android.view.KeyEvent.Callback ;
import android.view.*; //KeyEvent SurfaceHolder; SurfaceView;
import android.view.View;
import android.view.View.*; //OnClickListener
import android.widget.*;
import java.util.*;
import java.util.List;
public class MainActivity extends Activity implements OnClickListener {
TextView text0;
TextView text1;
Button btn0;
Button btn1;
Button btn2;
Button btn3;
Button btn4;
EditText edText;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
text0 = (TextView) findViewById(R.id.text0);
text1 = (TextView) findViewById(R.id.text1);
btn0=(Button) findViewById(R.id.btn0);
btn0.setOnClickListener(this);
btn1=(Button) findViewById(R.id.btn1);
btn1.setOnClickListener(this);
btn2=(Button) findViewById(R.id.btn2);
btn2.setOnClickListener(this);
btn3=(Button) findViewById(R.id.btn3);
btn3.setOnClickListener(this);
btn4=(Button) findViewById(R.id.btn4);
btn4.setOnClickListener(this);
edText=(EditText)findViewById(R.id.edText);
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}//oncreate
@Override
public void onClick(View v) {
// по id определеяем кнопку, вызвавшую этот обработчик
switch (v.getId()) {
case R.id.btn0 :
Intent intent = new Intent(this, abslayout.class);
startActivity(intent);
// тут abslayout.class, имя вызываемого класса, соответствующий
// abslayout.java
break;
}//switch
}//click
@Override
protected void onPause() {
super.onPause();
}
@Override
protected void onResume() {
super.onResume();
}
@Override
protected void onDestroy() {
super.onDestroy();
}
}//all
(в aide называется обычно MainActivity.java и первый прорисывается в
манифесте с атрибутом <action android:name="android.intent.action.MAIN")
package com.examp.abs; // эту строчку не копируем - оставляем такой,
// какой сделала среда программирования.
import android.app.*;
import android.os.*;
import android.os.Bundle;
import android.os.Environment;
import android.util.*;
//добавленные api
import android.content.pm.ActivityInfo; // тут нужен для ориентации экрана
import android.content.Intent;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.app.Activity;
import android.view.KeyEvent.Callback ;
import android.view.*; //KeyEvent SurfaceHolder; SurfaceView;
import android.view.View;
import android.view.View.*; //OnClickListener
import android.widget.*;
import java.util.*;
import java.util.List;
public class MainActivity extends Activity implements OnClickListener {
TextView text0;
TextView text1;
Button btn0;
Button btn1;
Button btn2;
Button btn3;
Button btn4;
EditText edText;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
text0 = (TextView) findViewById(R.id.text0);
text1 = (TextView) findViewById(R.id.text1);
btn0=(Button) findViewById(R.id.btn0);
btn0.setOnClickListener(this);
btn1=(Button) findViewById(R.id.btn1);
btn1.setOnClickListener(this);
btn2=(Button) findViewById(R.id.btn2);
btn2.setOnClickListener(this);
btn3=(Button) findViewById(R.id.btn3);
btn3.setOnClickListener(this);
btn4=(Button) findViewById(R.id.btn4);
btn4.setOnClickListener(this);
edText=(EditText)findViewById(R.id.edText);
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}//oncreate
@Override
public void onClick(View v) {
// по id определеяем кнопку, вызвавшую этот обработчик
switch (v.getId()) {
case R.id.btn0 :
Intent intent = new Intent(this, abslayout.class);
startActivity(intent);
// тут abslayout.class, имя вызываемого класса, соответствующий
// abslayout.java
break;
}//switch
}//click
@Override
protected void onPause() {
super.onPause();
}
@Override
protected void onResume() {
super.onResume();
}
@Override
protected void onDestroy() {
super.onDestroy();
}
}//all
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Пошаговое создание форта на java
Теперь создаем файл abslayout.java в той же папке, где
MainActivity.java и пишем туда
package com.examp.abs; // тут тоже, что и в MaiActivity
import android.app.*;
import android.os.*;
import android.os.Bundle;
import android.os.Environment;
import android.util.*;
import android.content.pm.ActivityInfo; // тут нужен для ориентации экрана
import android.content.Intent;
import android.content.Context;
import android.app.Activity;
import android.view.KeyEvent.Callback ;
import android.view.*; //KeyEvent SurfaceHolder; SurfaceView;
import android.view.View;
import android.view.View.*; //OnClickListener
import android.widget.*;
import java.util.*;
import java.util.List;
public class abslayout extends Activity implements OnClickListener {
TextView text0;
TextView text1;
Button btn0;
Button btn1;
Button btn2;
Button btn3;
EditText edText;
// названия элементов похожи на те, что и в MainActivity, но это чтоб удобней
// было копипастить, на самом деле они должны соответствовать
// принадлежащему этому активити xml файлу
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.absl); // ссылка absl.xml
text0 = (TextView) findViewById(R.id.text0);
text1 = (TextView) findViewById(R.id.text1);
btn0=(Button) findViewById(R.id.btn0);
btn0.setOnClickListener(this);
btn1=(Button) findViewById(R.id.btn1);
btn1.setOnClickListener(this);
btn2=(Button) findViewById(R.id.btn2);
btn2.setOnClickListener(this);
btn3=(Button) findViewById(R.id.btn3);
btn3.setOnClickListener(this);
edText=(EditText)findViewById(R.id.edText);
}
@Override
public void onClick(View v) {
// по id определеяем кнопку, вызвавшую этот обработчик
switch (v.getId()) {
case R.id.btn0 :
btn3.setText("AAA" );
AbsoluteLayout.LayoutParams OBJ = new
AbsoluteLayout.LayoutParams(70,70,200,400);
btn3.setLayoutParams(OBJ);
// AbsoluteLayout.LayoutParams(width,height,X-position,Y-position)
//3 кнопке присваиваются размеры 70 на 70
// устанавливается в позицию 200 400 и называют ААА
break;
case R.id.btn1 :
btn3.setText("OOO" );
AbsoluteLayout.LayoutParams OBJi = new
AbsoluteLayout.LayoutParams(70,70,100,300);
btn3.setLayoutParams(OBJi);
break;
}//switch
}//click
}//all
здесь демонстрируется перемещение кнопок
MainActivity.java и пишем туда
package com.examp.abs; // тут тоже, что и в MaiActivity
import android.app.*;
import android.os.*;
import android.os.Bundle;
import android.os.Environment;
import android.util.*;
import android.content.pm.ActivityInfo; // тут нужен для ориентации экрана
import android.content.Intent;
import android.content.Context;
import android.app.Activity;
import android.view.KeyEvent.Callback ;
import android.view.*; //KeyEvent SurfaceHolder; SurfaceView;
import android.view.View;
import android.view.View.*; //OnClickListener
import android.widget.*;
import java.util.*;
import java.util.List;
public class abslayout extends Activity implements OnClickListener {
TextView text0;
TextView text1;
Button btn0;
Button btn1;
Button btn2;
Button btn3;
EditText edText;
// названия элементов похожи на те, что и в MainActivity, но это чтоб удобней
// было копипастить, на самом деле они должны соответствовать
// принадлежащему этому активити xml файлу
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.absl); // ссылка absl.xml
text0 = (TextView) findViewById(R.id.text0);
text1 = (TextView) findViewById(R.id.text1);
btn0=(Button) findViewById(R.id.btn0);
btn0.setOnClickListener(this);
btn1=(Button) findViewById(R.id.btn1);
btn1.setOnClickListener(this);
btn2=(Button) findViewById(R.id.btn2);
btn2.setOnClickListener(this);
btn3=(Button) findViewById(R.id.btn3);
btn3.setOnClickListener(this);
edText=(EditText)findViewById(R.id.edText);
}
@Override
public void onClick(View v) {
// по id определеяем кнопку, вызвавшую этот обработчик
switch (v.getId()) {
case R.id.btn0 :
btn3.setText("AAA" );
AbsoluteLayout.LayoutParams OBJ = new
AbsoluteLayout.LayoutParams(70,70,200,400);
btn3.setLayoutParams(OBJ);
// AbsoluteLayout.LayoutParams(width,height,X-position,Y-position)
//3 кнопке присваиваются размеры 70 на 70
// устанавливается в позицию 200 400 и называют ААА
break;
case R.id.btn1 :
btn3.setText("OOO" );
AbsoluteLayout.LayoutParams OBJi = new
AbsoluteLayout.LayoutParams(70,70,100,300);
btn3.setLayoutParams(OBJi);
break;
}//switch
}//click
}//all
здесь демонстрируется перемещение кнопок
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Пошаговое создание форта на java
Теперь уберем виртуальную клавиатуру, которая всплывает,
когда устройство переключается на экран, содержащий
элемент EditText
Для этого добавим в заголовок xml файла две строчки
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:focusable="true"
android:focusableInTouchMode="true"
>
и
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:focusable="true"
android:focusableInTouchMode="true"
>
Это убирает фокус с элемента EditText
когда устройство переключается на экран, содержащий
элемент EditText
Для этого добавим в заголовок xml файла две строчки
- Код:
android:focusable="true"
android:focusableInTouchMode="true"
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:focusable="true"
android:focusableInTouchMode="true"
>
и
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:focusable="true"
android:focusableInTouchMode="true"
>
Это убирает фокус с элемента EditText
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Пошаговое создание форта на java
Продолжаем добавлять плюшки - передаем параметры в активность
и получаем результат из активности.
Создаем файл txtfield.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
>
<TextView
android:id="@+id/text0"
android:text="nomesssge"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TextView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/btn0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="empty">
</Button>
<Button
android:id="@+id/btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="empty">
</Button>
<Button
android:id="@+id/btn2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="return">
</Button>
</LinearLayout>
<EditText
android:id="@+id/edText"
android:layout_width="wrap_content"
android:layout_height="70dp"
android:hint="введите текст сюда"
android:layout_gravity="left"
> </EditText>
</LinearLayout>
тут
android:focusable="true"
android:focusableInTouchMode="true"
не вставляем, (см предыдущеесообщение), так как наоборот заинтересованы, что бы сразу
редактировать текст.
Так же ввели подсказку в EditText
и
будет раздвигаться из середины.
Больше информации о TextEdit , а так же как обрабатывать кнопки виртуальной клавиатуры
http://developer.alexanderklimov.ru/android/views/edittext.php
В манифест внесем информацию о новом activity .
<activity
android:name=".TextFieldTest">
</activity>
Можно еще сразу занести в новое активити информацию о ориенации экрана
<activity
android:name=".TextFieldTest">
android:screenOrientation="portrait"
</activity>
или
android:screenOrientation="landscape"
и получаем результат из активности.
Создаем файл txtfield.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
>
<TextView
android:id="@+id/text0"
android:text="nomesssge"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TextView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/btn0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="empty">
</Button>
<Button
android:id="@+id/btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="empty">
</Button>
<Button
android:id="@+id/btn2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="return">
</Button>
</LinearLayout>
<EditText
android:id="@+id/edText"
android:layout_width="wrap_content"
android:layout_height="70dp"
android:hint="введите текст сюда"
android:layout_gravity="left"
> </EditText>
</LinearLayout>
тут
android:focusable="true"
android:focusableInTouchMode="true"
не вставляем, (см предыдущеесообщение), так как наоборот заинтересованы, что бы сразу
редактировать текст.
Так же ввели подсказку в EditText
- Код:
android:hint="введите текст сюда"
и
- Код:
android:layout_gravity="left"
будет раздвигаться из середины.
Больше информации о TextEdit , а так же как обрабатывать кнопки виртуальной клавиатуры
http://developer.alexanderklimov.ru/android/views/edittext.php
В манифест внесем информацию о новом activity .
<activity
android:name=".TextFieldTest">
</activity>
Можно еще сразу занести в новое активити информацию о ориенации экрана
<activity
android:name=".TextFieldTest">
android:screenOrientation="portrait"
</activity>
или
android:screenOrientation="landscape"
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Пошаговое создание форта на java
В main xml поменяем названия двум кнопкам
и
В MainActivity в метод onClick добавим обработчики этих кнопок
@Override
public void onClick(View v) {
// по id определеяем кнопку, вызвавшую этот обработчик
switch (v.getId()) {
case R.id.btn0 :
Intent intent = new Intent(this, abslayout.class);
startActivity(intent);
// тут abslayout.class, имя вызываемого класса, соответствующий
// abslayout.java
break;
case R.id.btn1 :
Intent intent1 = new Intent(this, TextFieldTest.class);
intent1.putExtra("param0", "создать новый текст");
startActivityForResult(intent1, 1);
break;
case R.id.btn2 :
Intent intent2 = new Intent(this, TextFieldTest.class);
intent2.putExtra("param0", "отредактировать существующий текст");
intent2.putExtra("param1", edText.getText().toString());
startActivityForResult(intent2, 1);
break;
}//switch
}//click
Здесь
Intent intent1 = new Intent(this, TextFieldTest.class); // создается новый интент
// который указывает на
// TextFieldTest.class, который еще не создали
intent1.putExtra("param0", "создать новый текст");
// Через параметр "param0" передается текст.
// в TextFieldTest.java его можно прочесть примерно так
startActivityForResult(intent1, 1);
// по возвращению из активити результат будет обработан асинхронно
//методом
onActivityResult(int requestCode, int resultCode, Intent data)
и 1 в переданном параметре вернется в int requestCode,
это нужно, что бы метод onActivityResult мог различать различные
вызовы startActivityForResult
Кнопка btn2 работает также, только передает еще один параметр,
который забирает из EditText'а " edText.getText().toString()); "
и наконец ассинхронно вызываемая
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (data == null) {return;}
String ed = data.getStringExtra("edits");
edText.setText(ed); возвращает параметр в EditText
}
int requestCode // параметр, переданный при вызове startActivityForResult
int resultCode // разработчик использует этот параметр как хочет
// обычно используют константы RESULT_CANCELED или RESULT_OK
data.getStringExtra("edits"); //в TextFieldTest.java должен быть код
подробнее
https://startandroid.ru/ru/uroki/vse-uroki-spiskom/68-urok-29-vyzyvaem-activity-i-poluchaem-rezultat-metod-startactivityforresult.html
https://startandroid.ru/ru/uroki/vse-uroki-spiskom/67-urok-28-extras-peredaem-dannye-s-pomoschju-intent.html
https://startandroid.ru/ru/uroki/vse-uroki-spiskom/69-urok-30-podrobnee-pro-onactivityresult-zachem-nuzhny-requestcode-i-resultcode.html
Код MainActivity
https://pastebin.com/dt82VGdT
- Код:
<Button
android:id="@+id/btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TxtFieldTest">
</Button>
и
- Код:
<Button
android:id="@+id/btn2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TxtEditTst">
</Button>
В MainActivity в метод onClick добавим обработчики этих кнопок
@Override
public void onClick(View v) {
// по id определеяем кнопку, вызвавшую этот обработчик
switch (v.getId()) {
case R.id.btn0 :
Intent intent = new Intent(this, abslayout.class);
startActivity(intent);
// тут abslayout.class, имя вызываемого класса, соответствующий
// abslayout.java
break;
case R.id.btn1 :
Intent intent1 = new Intent(this, TextFieldTest.class);
intent1.putExtra("param0", "создать новый текст");
startActivityForResult(intent1, 1);
break;
case R.id.btn2 :
Intent intent2 = new Intent(this, TextFieldTest.class);
intent2.putExtra("param0", "отредактировать существующий текст");
intent2.putExtra("param1", edText.getText().toString());
startActivityForResult(intent2, 1);
break;
}//switch
}//click
Здесь
Intent intent1 = new Intent(this, TextFieldTest.class); // создается новый интент
// который указывает на
// TextFieldTest.class, который еще не создали
intent1.putExtra("param0", "создать новый текст");
// Через параметр "param0" передается текст.
// в TextFieldTest.java его можно прочесть примерно так
- Код:
Intent intent = getIntent();
String par0 = intent.getStringExtra("param0");
startActivityForResult(intent1, 1);
// по возвращению из активити результат будет обработан асинхронно
//методом
onActivityResult(int requestCode, int resultCode, Intent data)
и 1 в переданном параметре вернется в int requestCode,
это нужно, что бы метод onActivityResult мог различать различные
вызовы startActivityForResult
Кнопка btn2 работает также, только передает еще один параметр,
который забирает из EditText'а " edText.getText().toString()); "
и наконец ассинхронно вызываемая
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (data == null) {return;}
String ed = data.getStringExtra("edits");
edText.setText(ed); возвращает параметр в EditText
}
int requestCode // параметр, переданный при вызове startActivityForResult
int resultCode // разработчик использует этот параметр как хочет
// обычно используют константы RESULT_CANCELED или RESULT_OK
data.getStringExtra("edits"); //в TextFieldTest.java должен быть код
- Код:
intent.putExtra("edits", " некий текст" );
подробнее
https://startandroid.ru/ru/uroki/vse-uroki-spiskom/68-urok-29-vyzyvaem-activity-i-poluchaem-rezultat-metod-startactivityforresult.html
https://startandroid.ru/ru/uroki/vse-uroki-spiskom/67-urok-28-extras-peredaem-dannye-s-pomoschju-intent.html
https://startandroid.ru/ru/uroki/vse-uroki-spiskom/69-urok-30-podrobnee-pro-onactivityresult-zachem-nuzhny-requestcode-i-resultcode.html
Код MainActivity
https://pastebin.com/dt82VGdT
Последний раз редактировалось: vikt144 (Сб Фев 22, 2020 2:49 am), всего редактировалось 1 раз(а)
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Пошаговое создание форта на java
Наконец текст TextFieldTest.java
package com.examp.abs;
import android.app.*;
import android.os.*;
import android.os.Bundle;
import android.os.Environment;
import android.util.*;
import android.content.pm.ActivityInfo; // тут нужен для ориентации экрана
import android.content.Intent;
import android.content.Context;
import android.app.Activity;
import android.view.KeyEvent.Callback ;
import android.view.*; //KeyEvent SurfaceHolder; SurfaceView;
import android.view.View;
import android.view.View.*; //OnClickListener
import android.widget.*;
import java.util.*;
import java.util.List;
public class TextFieldTest extends Activity implements OnClickListener {
TextView text0;
// TextView text1;
Button btn0;
Button btn1;
Button btn2;
// Button btn3;
EditText edText;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.txtfield);
text0 = (TextView) findViewById(R.id.text0);
btn0=(Button) findViewById(R.id.btn0);
btn0.setOnClickListener(this);
btn1=(Button) findViewById(R.id.btn1);
btn1.setOnClickListener(this);
btn2=(Button) findViewById(R.id.btn2);
btn2.setOnClickListener(this);
edText=(EditText)findViewById(R.id.edText);
Intent intent = getIntent();
String par0 = intent.getStringExtra("param0");
String par1 = intent.getStringExtra("param1");
text0.setText(par0);
edText.setText(par1);
}
@Override
public void onClick(View v) {
// по id определеяем кнопку, вызвавшую этот обработчик
switch (v.getId()) {
case R.id.btn0 :
text0.setText("ON " );
break;
case R.id.btn1 :
text0.setText("OFF " );
break;
case R.id.btn2 :
Intent intent = new Intent();
intent.putExtra("edits", edText.getText().toString());
setResult(RESULT_OK, intent);
finish();
}
}
}//all
Результат возвращается при обработке кнопки btn2
intent.putExtra("edits", edText.getText().toString());
процедура finish() закрывает окно и возвращает значения,
которые будут обработаны в
onActivityResult
Если это окно закрыть друким способом, нажав клавищу
back например, то окно ничего не возвратит
Если нужно этого избежать, то на клавишу back надо
повесить обработчик , что то вроде
import android.view.KeyEvent.Callback
--------
@Override
public void onBackPressed() {
Intent intent = new Intent();
intent.putExtra("edits", edText.getText().toString());
setResult(RESULT_OK, intent);
finish();
, super.onBackPressed();
}
но это надо еще протестировать.
Еще, параметры, передаваемые таким способом, надо вероятно
тестировать на null, на всякий случай.
В общем, параметры, это очень полезная штука в android программировании,
очень повысит функциональность скриптов.
package com.examp.abs;
import android.app.*;
import android.os.*;
import android.os.Bundle;
import android.os.Environment;
import android.util.*;
import android.content.pm.ActivityInfo; // тут нужен для ориентации экрана
import android.content.Intent;
import android.content.Context;
import android.app.Activity;
import android.view.KeyEvent.Callback ;
import android.view.*; //KeyEvent SurfaceHolder; SurfaceView;
import android.view.View;
import android.view.View.*; //OnClickListener
import android.widget.*;
import java.util.*;
import java.util.List;
public class TextFieldTest extends Activity implements OnClickListener {
TextView text0;
// TextView text1;
Button btn0;
Button btn1;
Button btn2;
// Button btn3;
EditText edText;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.txtfield);
text0 = (TextView) findViewById(R.id.text0);
btn0=(Button) findViewById(R.id.btn0);
btn0.setOnClickListener(this);
btn1=(Button) findViewById(R.id.btn1);
btn1.setOnClickListener(this);
btn2=(Button) findViewById(R.id.btn2);
btn2.setOnClickListener(this);
edText=(EditText)findViewById(R.id.edText);
Intent intent = getIntent();
String par0 = intent.getStringExtra("param0");
String par1 = intent.getStringExtra("param1");
text0.setText(par0);
edText.setText(par1);
}
@Override
public void onClick(View v) {
// по id определеяем кнопку, вызвавшую этот обработчик
switch (v.getId()) {
case R.id.btn0 :
text0.setText("ON " );
break;
case R.id.btn1 :
text0.setText("OFF " );
break;
case R.id.btn2 :
Intent intent = new Intent();
intent.putExtra("edits", edText.getText().toString());
setResult(RESULT_OK, intent);
finish();
}
}
}//all
Результат возвращается при обработке кнопки btn2
intent.putExtra("edits", edText.getText().toString());
процедура finish() закрывает окно и возвращает значения,
которые будут обработаны в
onActivityResult
Если это окно закрыть друким способом, нажав клавищу
back например, то окно ничего не возвратит
Если нужно этого избежать, то на клавишу back надо
повесить обработчик , что то вроде
import android.view.KeyEvent.Callback
--------
@Override
public void onBackPressed() {
Intent intent = new Intent();
intent.putExtra("edits", edText.getText().toString());
setResult(RESULT_OK, intent);
finish();
, super.onBackPressed();
}
но это надо еще протестировать.
Еще, параметры, передаваемые таким способом, надо вероятно
тестировать на null, на всякий случай.
В общем, параметры, это очень полезная штука в android программировании,
очень повысит функциональность скриптов.
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Пошаговое создание форта на java
Поздравляю! На кошачьем форуме заметили. Срочно реанимируют старую тему про FORTH на КПК...
Gudleifr- Admin
- Сообщения : 3244
Дата регистрации : 2017-03-29
Re: Черновик: Пошаговое создание форта на java
Спасибо! Но скорее идея просто витает в воздухе, не меньше, чем 15 лет.
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Пошаговое создание форта на java
Теперь хранение данных.
Чтение и запись файлов - делается все как в ява.
На всякий случай
https://startandroid.ru/ru/uroki/vse-uroki-spiskom/138-urok-75-hranenie-dannyh-rabota-s-fajlami.html
Есть проблемы с записью данных на sd карту на android версий от 4.4
и кажется меньше 7. Это маразматики из гугола якобы в целях безопасности
что-то наворотили. Для обхода проблемы смотрите статью
https://2keep.net/android-4-4-problems-writing-to-microsd/
Еще в андроид api есть sql база данных.
Так же есть простое в использовании Preferences.
Значения сохраняются в виде пары: имя, значение.
Как это работает, описано здесь.
https://startandroid.ru/ru/uroki/vse-uroki-spiskom/73-urok-33-hranenie-dannyh-preferences.html
Отредактирую готовые функции оттуда.
Сохранить значение
Прочитать значение
тут defvalue - строка по умолчанию, которая вернется, если
значения с ключем key не окажется.
Более подробный обзор Preferences
http://developer.alexanderklimov.ru/android/theory/sharedpreferences.php
Теперь напишем пример использования Preferences
Попробуем переключится на другой экран во время старта программы.
Если значение параметра screen в Preferences == "main", загружается
главный экран, иначе - экран absolute.
Для этого в MainActivity добавим две ф-ции, ранее описанных.
Затем, в onCreate добавим код
String screenloader = loadPref( "screen", "" );
if ( screenloader.equals("") ) { // если поле screen не создано
text0.setText("not init");
btn3.setText("set_abs"); // кнопке btn3 присваиваем текст "set_abs"
savePref( "screen", "main" ); // присваиваем полю screen значение main
} else
if ( screenloader.equals("absolute") ) { // если "absolute"
btn3.setText("set_main"); // кнопке btn3 присваиваем текст "set_main"
Intent intent = new Intent(this, abslayout.class);
startActivity(intent); // запускаем другое окно
}
else btn3.setText("set_abs"); // иначе присваиваем btn3 текст "set_abs"
}
в onClick добавим обработчик кнопки btn3
case R.id.btn3 :
if ( loadPref( "screen", "main" ).equals("main") ) {
savePref("screen", "absolute");
btn3.setText("set_main");
} else
{ savePref("screen", "main");
btn3.setText("set_abs");
}
break;
тут просто меняет значение в Preferenses и текст кнопки на противоположное.
текст программы
https://pastebin.com/PNVCWCvh
Нажатие кнопки btn3 записывает в Preferences, какой экран будет загружен при
следующем старте программы.
На реальном устройстве работает, но явно мутно.
Наверно надо выполнять смену экрана в onStart.
О состояниях активити (onStart, onPause итд см
https://startandroid.ru/ru/uroki/vse-uroki-spiskom/60-urok-23-activity-lifecycle-v-kakih-sostojanijah-mozhet-byt-activity.html
)
Тщательнее буду тестировать это непосредственно на телефоне,
после того, как встрою скриптовый язык.
Чтение и запись файлов - делается все как в ява.
На всякий случай
https://startandroid.ru/ru/uroki/vse-uroki-spiskom/138-urok-75-hranenie-dannyh-rabota-s-fajlami.html
Есть проблемы с записью данных на sd карту на android версий от 4.4
и кажется меньше 7. Это маразматики из гугола якобы в целях безопасности
что-то наворотили. Для обхода проблемы смотрите статью
https://2keep.net/android-4-4-problems-writing-to-microsd/
Еще в андроид api есть sql база данных.
Так же есть простое в использовании Preferences.
Значения сохраняются в виде пары: имя, значение.
Как это работает, описано здесь.
https://startandroid.ru/ru/uroki/vse-uroki-spiskom/73-urok-33-hranenie-dannyh-preferences.html
Отредактирую готовые функции оттуда.
- Код:
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
Сохранить значение
- Код:
void savePref(String key, String value) {
SharedPreferences sPref = getPreferences(MODE_PRIVATE);
Editor ed = sPref.edit();
ed.putString(key , value);
ed.commit();
}
Прочитать значение
- Код:
String loadPref(String key, String defvalue) {
SharedPreferences sPref = getPreferences(MODE_PRIVATE);
return sPref.getString(key , defvalue );
}
тут defvalue - строка по умолчанию, которая вернется, если
значения с ключем key не окажется.
Более подробный обзор Preferences
http://developer.alexanderklimov.ru/android/theory/sharedpreferences.php
Теперь напишем пример использования Preferences
Попробуем переключится на другой экран во время старта программы.
Если значение параметра screen в Preferences == "main", загружается
главный экран, иначе - экран absolute.
Для этого в MainActivity добавим две ф-ции, ранее описанных.
Затем, в onCreate добавим код
String screenloader = loadPref( "screen", "" );
if ( screenloader.equals("") ) { // если поле screen не создано
text0.setText("not init");
btn3.setText("set_abs"); // кнопке btn3 присваиваем текст "set_abs"
savePref( "screen", "main" ); // присваиваем полю screen значение main
} else
if ( screenloader.equals("absolute") ) { // если "absolute"
btn3.setText("set_main"); // кнопке btn3 присваиваем текст "set_main"
Intent intent = new Intent(this, abslayout.class);
startActivity(intent); // запускаем другое окно
}
else btn3.setText("set_abs"); // иначе присваиваем btn3 текст "set_abs"
}
в onClick добавим обработчик кнопки btn3
case R.id.btn3 :
if ( loadPref( "screen", "main" ).equals("main") ) {
savePref("screen", "absolute");
btn3.setText("set_main");
} else
{ savePref("screen", "main");
btn3.setText("set_abs");
}
break;
тут просто меняет значение в Preferenses и текст кнопки на противоположное.
текст программы
https://pastebin.com/PNVCWCvh
Нажатие кнопки btn3 записывает в Preferences, какой экран будет загружен при
следующем старте программы.
На реальном устройстве работает, но явно мутно.
Наверно надо выполнять смену экрана в onStart.
О состояниях активити (onStart, onPause итд см
https://startandroid.ru/ru/uroki/vse-uroki-spiskom/60-urok-23-activity-lifecycle-v-kakih-sostojanijah-mozhet-byt-activity.html
)
Тщательнее буду тестировать это непосредственно на телефоне,
после того, как встрою скриптовый язык.
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Пошаговое создание форта на java
Еще немного android api.
Всплывающие сообщения
import android.widget.Toast;
Toast.makeText(this, "Некий текст", Toast.LENGTH_LONG).show();
можно вместо Toast.LENGTH_LONG использовать
Toast.LENGTH_SHORT, тогда время показа будет короче
Закрытие экрана двойным нажатием кнопки back
import android.view.KeyEvent ;
import android.view.KeyEvent.Callback ;
int back_pressed
@Override
public void onBackPressed() {
if (back_pressed + 2000 > System.currentTimeMillis())
super.onBackPressed();
else
back_pressed = System.currentTimeMillis();
Toast.makeText(this, "Press again to exit",
Toast.LENGTH_SHORT).show();
}
больше по экранной клавиатуре и прочем здесь
http://developer.alexanderklimov.ru/android/keyboard.php
Всплывающие сообщения
import android.widget.Toast;
Toast.makeText(this, "Некий текст", Toast.LENGTH_LONG).show();
можно вместо Toast.LENGTH_LONG использовать
Toast.LENGTH_SHORT, тогда время показа будет короче
Закрытие экрана двойным нажатием кнопки back
import android.view.KeyEvent ;
import android.view.KeyEvent.Callback ;
int back_pressed
@Override
public void onBackPressed() {
if (back_pressed + 2000 > System.currentTimeMillis())
super.onBackPressed();
else
back_pressed = System.currentTimeMillis();
Toast.makeText(this, "Press again to exit",
Toast.LENGTH_SHORT).show();
}
больше по экранной клавиатуре и прочем здесь
http://developer.alexanderklimov.ru/android/keyboard.php
Последний раз редактировалось: vikt144 (Вт Фев 25, 2020 1:18 am), всего редактировалось 1 раз(а)
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Пошаговое создание форта на java
Добавлю еще работу со звуками, принципы работы с датчиками устройства
(гироскопы, датчик приближения итп ), и естественно геолокацией.
Если дойдут руки, возможно еще и фото/видео.
После, внедрение скриптового языка во все это хозяйство.
Затем графика и навигационная программа.
(гироскопы, датчик приближения итп ), и естественно геолокацией.
Если дойдут руки, возможно еще и фото/видео.
После, внедрение скриптового языка во все это хозяйство.
Затем графика и навигационная программа.
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Пошаговое создание форта на java
Более тонкое управление кнопками - регистрация нажатия и отпускания кнопки.
Создадим новый проект less2
В main.xml скопируем текст из поста
https://gudleifr.forum2x2.ru/t92p25-topic#1427
только уберем EditText - тут он не нужен.
Работать будем с кнопкой btn4: короткое нажатие - текст кнопки изменится
на название следующей настройки, длинное - загрузится окно
редактирования этой настройки. После, отредактированный текст настройки
загрузится в preferences.
В main активити загрузим текст
package com.devises; // замените на свой
import android.app.*;
import android.os.*;
import android.os.Bundle;
import android.os.Environment;
import android.util.*;
//добавленные api
import android.content.pm.ActivityInfo; // тут нужен для ориентации экрана
import android.content.Intent;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.app.Activity;
import android.view.KeyEvent.Callback ;
import android.view.*; //KeyEvent SurfaceHolder; SurfaceView;
import android.view.View;
import android.view.View.*; //OnClickListener
import android.widget.*;
import java.util.*;
import java.util.List;
public class MainActivity extends Activity implements OnClickListener , OnTouchListener{
// добавлен OnTouchListener
TextView text0;
TextView text1;
Button btn0;
Button btn1;
Button btn2;
Button btn3;
Button btn4;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
text0 = (TextView) findViewById(R.id.text0);
text1 = (TextView) findViewById(R.id.text1);
btn0=(Button) findViewById(R.id.btn0);
btn0.setOnClickListener(this);
btn1=(Button) findViewById(R.id.btn1);
btn1.setOnClickListener(this);
btn2=(Button) findViewById(R.id.btn2);
btn2.setOnClickListener(this);
btn3=(Button) findViewById(R.id.btn3);
btn3.setOnClickListener(this);
btn4=(Button) findViewById(R.id.btn4);
// btn4.setOnClickListener(this);
btn4.setOnTouchListener(this);
// btn4 теперь обрабатывает setOnTouchListener
}// onCreate
long lastKeyPressed=0; // время, когда была нажата кнопка
int keyPointer=0; // указатель в массиве настроек
String[] buttonString = {"sndDir" , "other" };
// массив настроек - первые две не используются,
@Override
public void onClick(View v) { //Обычная обработка кнопки
// по id определеяем кнопку, вызвавшую этот обработчик
switch (v.getId()) {
case R.id.btn0 :
// заготовка ничего не делает
break;
case R.id.btn1 :
////////
break;
}//switch
}
@Override // тонкая обработка кнопок, присвоен кнопке btn4
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) { //при нажатии
lastKeyPressed=System.currentTimeMillis();
}
if (event.getAction() == MotionEvent.ACTION_UP) { // при отпускании
if ( ( lastKeyPressed+1500) > //если меньше полторы секунды
System.currentTimeMillis() ) {
if ( keyPointer == buttonString.length -1)
keyPointer=0;
else keyPointer++;
btn4.setText("edit " + buttonString[keyPointer] );
}
else { // иначе загрузка нужной настройки
// и редактирование
text1.setText("edit " + buttonString[keyPointer]);
String prf = loadPref(buttonString[keyPointer],"");
Intent intent = new Intent(this, simpleTextEdit.class);
intent.putExtra("param0", "edit " + buttonString[keyPointer] );
intent.putExtra("param1", prf);
startActivityForResult(intent, 3); // см ранее
}
}
return false;
}//onTouch
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (data == null) {return;}
switch (requestCode) {
case 3 : // этот код "3" был передан в процессе вызова
// "startActivityForResult(intent, 3);"
String ed = data.getStringExtra("edits");
savePref(buttonString[keyPointer], ed );
break;
} //switch
}
////////////////////////////////////////////////////utils/////////////////////////
//import android.content.SharedPreferences;
//import android.content.SharedPreferences.Editor;
void savePref(String key, String value) {
SharedPreferences sPref = getPreferences(MODE_PRIVATE);
Editor ed = sPref.edit();
ed.putString(key , value);
ed.commit();
}
String loadPref(String key, String defvalue) {
SharedPreferences sPref = getPreferences(MODE_PRIVATE);
return sPref.getString(key , defvalue );
}
/////////////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\
}//all
Создадим новый проект less2
В main.xml скопируем текст из поста
https://gudleifr.forum2x2.ru/t92p25-topic#1427
только уберем EditText - тут он не нужен.
Работать будем с кнопкой btn4: короткое нажатие - текст кнопки изменится
на название следующей настройки, длинное - загрузится окно
редактирования этой настройки. После, отредактированный текст настройки
загрузится в preferences.
В main активити загрузим текст
package com.devises; // замените на свой
import android.app.*;
import android.os.*;
import android.os.Bundle;
import android.os.Environment;
import android.util.*;
//добавленные api
import android.content.pm.ActivityInfo; // тут нужен для ориентации экрана
import android.content.Intent;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.app.Activity;
import android.view.KeyEvent.Callback ;
import android.view.*; //KeyEvent SurfaceHolder; SurfaceView;
import android.view.View;
import android.view.View.*; //OnClickListener
import android.widget.*;
import java.util.*;
import java.util.List;
public class MainActivity extends Activity implements OnClickListener , OnTouchListener{
// добавлен OnTouchListener
TextView text0;
TextView text1;
Button btn0;
Button btn1;
Button btn2;
Button btn3;
Button btn4;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
text0 = (TextView) findViewById(R.id.text0);
text1 = (TextView) findViewById(R.id.text1);
btn0=(Button) findViewById(R.id.btn0);
btn0.setOnClickListener(this);
btn1=(Button) findViewById(R.id.btn1);
btn1.setOnClickListener(this);
btn2=(Button) findViewById(R.id.btn2);
btn2.setOnClickListener(this);
btn3=(Button) findViewById(R.id.btn3);
btn3.setOnClickListener(this);
btn4=(Button) findViewById(R.id.btn4);
// btn4.setOnClickListener(this);
btn4.setOnTouchListener(this);
// btn4 теперь обрабатывает setOnTouchListener
}// onCreate
long lastKeyPressed=0; // время, когда была нажата кнопка
int keyPointer=0; // указатель в массиве настроек
String[] buttonString = {"sndDir" , "other" };
// массив настроек - первые две не используются,
@Override
public void onClick(View v) { //Обычная обработка кнопки
// по id определеяем кнопку, вызвавшую этот обработчик
switch (v.getId()) {
case R.id.btn0 :
// заготовка ничего не делает
break;
case R.id.btn1 :
////////
break;
}//switch
}
@Override // тонкая обработка кнопок, присвоен кнопке btn4
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) { //при нажатии
lastKeyPressed=System.currentTimeMillis();
}
if (event.getAction() == MotionEvent.ACTION_UP) { // при отпускании
if ( ( lastKeyPressed+1500) > //если меньше полторы секунды
System.currentTimeMillis() ) {
if ( keyPointer == buttonString.length -1)
keyPointer=0;
else keyPointer++;
btn4.setText("edit " + buttonString[keyPointer] );
}
else { // иначе загрузка нужной настройки
// и редактирование
text1.setText("edit " + buttonString[keyPointer]);
String prf = loadPref(buttonString[keyPointer],"");
Intent intent = new Intent(this, simpleTextEdit.class);
intent.putExtra("param0", "edit " + buttonString[keyPointer] );
intent.putExtra("param1", prf);
startActivityForResult(intent, 3); // см ранее
}
}
return false;
}//onTouch
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (data == null) {return;}
switch (requestCode) {
case 3 : // этот код "3" был передан в процессе вызова
// "startActivityForResult(intent, 3);"
String ed = data.getStringExtra("edits");
savePref(buttonString[keyPointer], ed );
break;
} //switch
}
////////////////////////////////////////////////////utils/////////////////////////
//import android.content.SharedPreferences;
//import android.content.SharedPreferences.Editor;
void savePref(String key, String value) {
SharedPreferences sPref = getPreferences(MODE_PRIVATE);
Editor ed = sPref.edit();
ed.putString(key , value);
ed.commit();
}
String loadPref(String key, String defvalue) {
SharedPreferences sPref = getPreferences(MODE_PRIVATE);
return sPref.getString(key , defvalue );
}
/////////////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\
}//all
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Пошаговое создание форта на java
Добавим к файлу main.xml файл txtfield.xml c содержимым, как в
https://gudleifr.forum2x2.ru/t92p25-topic#1437
В AndroidManifest.xml добавим активность
Создадим файл simpleTextEdit.java
package com.devises;
import android.app.*;
import android.os.*;
import android.os.Bundle;
import android.os.Environment;
import android.util.*;
import android.content.pm.ActivityInfo; // тут нужен для ориентации экрана
import android.content.Intent;
import android.content.Context;
import android.app.Activity;
import android.view.KeyEvent.Callback ;
import android.view.*; //KeyEvent SurfaceHolder; SurfaceView;
import android.view.View;
import android.view.View.*; //OnClickListener
import android.widget.*;
import java.util.*;
import java.util.List;
public class simpleTextEdit extends Activity implements OnClickListener {
TextView text0;
// TextView text1;
Button btn0;
Button btn1;
Button btn2;
// Button btn3;
EditText edText;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.txtfield);
text0 = (TextView) findViewById(R.id.text0);
btn0=(Button) findViewById(R.id.btn0);
btn0.setOnClickListener(this);
btn1=(Button) findViewById(R.id.btn1);
btn1.setOnClickListener(this);
btn2=(Button) findViewById(R.id.btn2);
btn2.setOnClickListener(this);
edText=(EditText)findViewById(R.id.edText);
Intent intent = getIntent();
String par0 = intent.getStringExtra("param0");
String par1 = intent.getStringExtra("param1");
text0.setText(par0);
edText.setText(par1);
}
@Override
public void onClick(View v) {
// по id определеяем кнопку, вызвавшую этот обработчик
switch (v.getId()) {
case R.id.btn0 :
///////
break;
case R.id.btn1 :
/////
break;
case R.id.btn2 :
Intent intent = new Intent();
intent.putExtra("edits", edText.getText().toString());
setResult(RESULT_OK, intent);
finish();
}
}
}//all
Это простенький редактор, может использоваться для редактирования
текстовых полей. Можно развесить плюшками, в будущем в него можно
будет прокинуть скрипт через параметры.
https://gudleifr.forum2x2.ru/t92p25-topic#1437
В AndroidManifest.xml добавим активность
- Код:
<activity
android:name=".simpleTextEdit">
</activity>
Создадим файл simpleTextEdit.java
package com.devises;
import android.app.*;
import android.os.*;
import android.os.Bundle;
import android.os.Environment;
import android.util.*;
import android.content.pm.ActivityInfo; // тут нужен для ориентации экрана
import android.content.Intent;
import android.content.Context;
import android.app.Activity;
import android.view.KeyEvent.Callback ;
import android.view.*; //KeyEvent SurfaceHolder; SurfaceView;
import android.view.View;
import android.view.View.*; //OnClickListener
import android.widget.*;
import java.util.*;
import java.util.List;
public class simpleTextEdit extends Activity implements OnClickListener {
TextView text0;
// TextView text1;
Button btn0;
Button btn1;
Button btn2;
// Button btn3;
EditText edText;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.txtfield);
text0 = (TextView) findViewById(R.id.text0);
btn0=(Button) findViewById(R.id.btn0);
btn0.setOnClickListener(this);
btn1=(Button) findViewById(R.id.btn1);
btn1.setOnClickListener(this);
btn2=(Button) findViewById(R.id.btn2);
btn2.setOnClickListener(this);
edText=(EditText)findViewById(R.id.edText);
Intent intent = getIntent();
String par0 = intent.getStringExtra("param0");
String par1 = intent.getStringExtra("param1");
text0.setText(par0);
edText.setText(par1);
}
@Override
public void onClick(View v) {
// по id определеяем кнопку, вызвавшую этот обработчик
switch (v.getId()) {
case R.id.btn0 :
///////
break;
case R.id.btn1 :
/////
break;
case R.id.btn2 :
Intent intent = new Intent();
intent.putExtra("edits", edText.getText().toString());
setResult(RESULT_OK, intent);
finish();
}
}
}//all
Это простенький редактор, может использоваться для редактирования
текстовых полей. Можно развесить плюшками, в будущем в него можно
будет прокинуть скрипт через параметры.
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Пошаговое создание форта на java
Озвучивание проекта.
Почитать можно тут.
http://www.mobilab.ru/androiddev/androidsoundpoolmediaplayer.html
и
тут
https://startandroid.ru/ru/uroki/vse-uroki-spiskom/239-urok-127-media-soundpool.html
отсюда выкачаем пару звуковых файлов.
http://yadi.sk/d/3KpXK2qD55QCh
http://yadi.sk/d/-_UUl8L555QCN
Кстати, поиск звуков в интернете оказался довольно сложным делом.
Слишком длинные они в основном.
Возможно поможет эта статья.
https://habr.com/ru/company/audiomania/blog/471550/
В ранее приведенных примерах, звук инициировался и исполнялся в
одном окне.
Хотелось бы, что бы soundpool размещался в одном месте,
а все activity(экраны) обращались бы к нему.
Но повидимому, с activity нельзя обращаться как с обычным java
классом, и передавать soundpool как объект.
Создавать к каждому activity свой soundpool видимо тоже
не хорошая идея, на моем htc это работало видимо глюкаво.
Видимо, надо реализовывать сервисы
https://startandroid.ru/ru/uroki/vse-uroki-spiskom/157-urok-92-service-prostoj-primer.html
Но это отложим на потом, иначе никогда не доберемся до скриптов.
Озвучим предыдущий пример: выбор настройки - один звук, переход
к настройке - другой.
Почитать можно тут.
http://www.mobilab.ru/androiddev/androidsoundpoolmediaplayer.html
и
тут
https://startandroid.ru/ru/uroki/vse-uroki-spiskom/239-urok-127-media-soundpool.html
отсюда выкачаем пару звуковых файлов.
http://yadi.sk/d/3KpXK2qD55QCh
http://yadi.sk/d/-_UUl8L555QCN
Кстати, поиск звуков в интернете оказался довольно сложным делом.
Слишком длинные они в основном.
Возможно поможет эта статья.
https://habr.com/ru/company/audiomania/blog/471550/
В ранее приведенных примерах, звук инициировался и исполнялся в
одном окне.
Хотелось бы, что бы soundpool размещался в одном месте,
а все activity(экраны) обращались бы к нему.
Но повидимому, с activity нельзя обращаться как с обычным java
классом, и передавать soundpool как объект.
Создавать к каждому activity свой soundpool видимо тоже
не хорошая идея, на моем htc это работало видимо глюкаво.
Видимо, надо реализовывать сервисы
https://startandroid.ru/ru/uroki/vse-uroki-spiskom/157-urok-92-service-prostoj-primer.html
Но это отложим на потом, иначе никогда не доберемся до скриптов.
Озвучим предыдущий пример: выбор настройки - один звук, переход
к настройке - другой.
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Пошаговое создание форта на java
Создадим в каталоге main/res/ каталог raw и туда скопируем выкачанные
файлы explosion.ogg и shot.ogg.
Затем в каталоге, где находятся java файлы, создадим каталог
multimediad.
Создадим файл soundplay.java со следущим содержимым
package com.devises.multimediad;
import android.app.*;
import android.content.Context;
import android.media.AudioManager;
import android.media.SoundPool;
import android.media.SoundPool.OnLoadCompleteListener;
import java.lang.*;
public class soundplay {
///sounds
private SoundPool soundPool;
boolean loaded=false;
int num=0;
/////////////
//Создаем soundPool.
public void createSoundPool( int qu , int sr ) {
soundPool=new SoundPool(10, AudioManager.STREAM_MUSIC,0);
//устанавливаем call-back функцию, которая вызывается по
//завершению загрузки файла в память
soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener(){
@Override
public void onLoadComplete(SoundPool soundPool, int sampleId, int status){
loaded=true;
}
});
}
//Загружаем звуки в память
public int soundPoolLoad(Context con , int resId ) {
return soundPool.load(con , resId, 1 );
}
/* параметры play
ID файла. Тот самый, который мы получили от метода load.
- громкость левого канала (от 0.0 до 1.0)
- громкость правого канала (от 0.0 до 1.0)
- приоритет. Этот приоритет уже не декоративный, а вполне себе используемый. Далее увидим, где он нужен.
- количество повторов. Т.е. файл будет воспроизведен один раз точно + то количество раз, которое вы здесь укажете
- скорость воспроизведения. Можно задать от половины нормальной скорости до двойной (0.5 - 2).
Метод play возвращает ID потока, используемого для проигрывания файла. Этот ID можно использовать для дальнейшего
изменения настроек в процессе проигрывания файла, а также для паузы.
*/
public void pla(int soundId) {
soundPool.play(soundId,1,1,1,0,1f);//volume,volume, 1,0, 1f); // 1.0f, 1.0f, 1, 0, 1);
}
public void bgPlay(int soundId) { // проигрывание звуков в фоновом потоке
final int snd = soundId;
Thread t = new Thread(new Runnable() {
public void run() {
pla(snd);
}
});
t.start();
}//void
} //all
Так как работу со звуком планируется вынести в сервис,
тут используется самая примитивная реализация, просто,
что бы протестировать.
В MainActivity добавляем
import com.devises.multimediad.*;
( com.devices замените на ваши пути)
soundplay SP = new soundplay(); ////////////////////snd/////////////
int vo0,vo1;
В onCreate добавим
SP.createSoundPool( 10 , 0 ) ; // 10 проигр зв одновременно
vo0 = SP.soundPoolLoad( this , R.raw.shot);
vo1 = SP.soundPoolLoad( this , R.raw.explosion);
в onTouch добавим SP.bgPlay(vo0) // проиграть звук в фоне
и SP.bgPlay(vo1)
получим
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
lastKeyPressed=System.currentTimeMillis();
}
if (event.getAction() == MotionEvent.ACTION_UP) {
if ( ( lastKeyPressed+2000) > System.currentTimeMillis() ) {
if ( keyPointer == buttonString.length -1)
keyPointer=0;
else keyPointer++;
btn4.setText("edit " + buttonString[keyPointer] );
SP.bgPlay(vo0); // SP.pla(vo0);
}
else {
text1.setText("edit " + buttonString[keyPointer]);
String prf = loadPref(buttonString[keyPointer],"");
Intent intent = new Intent(this, simpleTextEdit.class);
intent.putExtra("param0", "edit " + buttonString[keyPointer] );
intent.putExtra("param1", prf);
SP.bgPlay(vo1); // SP.pla(vo1);
startActivityForResult(intent, 3);
}
}
return false;
}//onTouch
можно протестировать проигрывание звуков в фоновом потоке,
SP.bgPlay(vo1), затем заменить на (SP.pla(vo1) )
перекомпилировать и проиграть звук в основном потоке.
файлы explosion.ogg и shot.ogg.
Затем в каталоге, где находятся java файлы, создадим каталог
multimediad.
Создадим файл soundplay.java со следущим содержимым
package com.devises.multimediad;
import android.app.*;
import android.content.Context;
import android.media.AudioManager;
import android.media.SoundPool;
import android.media.SoundPool.OnLoadCompleteListener;
import java.lang.*;
public class soundplay {
///sounds
private SoundPool soundPool;
boolean loaded=false;
int num=0;
/////////////
//Создаем soundPool.
public void createSoundPool( int qu , int sr ) {
soundPool=new SoundPool(10, AudioManager.STREAM_MUSIC,0);
//устанавливаем call-back функцию, которая вызывается по
//завершению загрузки файла в память
soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener(){
@Override
public void onLoadComplete(SoundPool soundPool, int sampleId, int status){
loaded=true;
}
});
}
//Загружаем звуки в память
public int soundPoolLoad(Context con , int resId ) {
return soundPool.load(con , resId, 1 );
}
/* параметры play
ID файла. Тот самый, который мы получили от метода load.
- громкость левого канала (от 0.0 до 1.0)
- громкость правого канала (от 0.0 до 1.0)
- приоритет. Этот приоритет уже не декоративный, а вполне себе используемый. Далее увидим, где он нужен.
- количество повторов. Т.е. файл будет воспроизведен один раз точно + то количество раз, которое вы здесь укажете
- скорость воспроизведения. Можно задать от половины нормальной скорости до двойной (0.5 - 2).
Метод play возвращает ID потока, используемого для проигрывания файла. Этот ID можно использовать для дальнейшего
изменения настроек в процессе проигрывания файла, а также для паузы.
*/
public void pla(int soundId) {
soundPool.play(soundId,1,1,1,0,1f);//volume,volume, 1,0, 1f); // 1.0f, 1.0f, 1, 0, 1);
}
public void bgPlay(int soundId) { // проигрывание звуков в фоновом потоке
final int snd = soundId;
Thread t = new Thread(new Runnable() {
public void run() {
pla(snd);
}
});
t.start();
}//void
} //all
Так как работу со звуком планируется вынести в сервис,
тут используется самая примитивная реализация, просто,
что бы протестировать.
В MainActivity добавляем
import com.devises.multimediad.*;
( com.devices замените на ваши пути)
soundplay SP = new soundplay(); ////////////////////snd/////////////
int vo0,vo1;
В onCreate добавим
SP.createSoundPool( 10 , 0 ) ; // 10 проигр зв одновременно
vo0 = SP.soundPoolLoad( this , R.raw.shot);
vo1 = SP.soundPoolLoad( this , R.raw.explosion);
в onTouch добавим SP.bgPlay(vo0) // проиграть звук в фоне
и SP.bgPlay(vo1)
получим
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
lastKeyPressed=System.currentTimeMillis();
}
if (event.getAction() == MotionEvent.ACTION_UP) {
if ( ( lastKeyPressed+2000) > System.currentTimeMillis() ) {
if ( keyPointer == buttonString.length -1)
keyPointer=0;
else keyPointer++;
btn4.setText("edit " + buttonString[keyPointer] );
SP.bgPlay(vo0); // SP.pla(vo0);
}
else {
text1.setText("edit " + buttonString[keyPointer]);
String prf = loadPref(buttonString[keyPointer],"");
Intent intent = new Intent(this, simpleTextEdit.class);
intent.putExtra("param0", "edit " + buttonString[keyPointer] );
intent.putExtra("param1", prf);
SP.bgPlay(vo1); // SP.pla(vo1);
startActivityForResult(intent, 3);
}
}
return false;
}//onTouch
можно протестировать проигрывание звуков в фоновом потоке,
SP.bgPlay(vo1), затем заменить на (SP.pla(vo1) )
перекомпилировать и проиграть звук в основном потоке.
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Пошаговое создание форта на java
Внезапная заминка.
Среда AIDE, которое на мой взгляд лучшее SDK для андроид, в бесплатной
версии, отказывается компилировать проект, состоящий больше, чем из пяти java файлов.
К счастью, в андроид API есть возможность вызывать интенты и сервисы
из других программ, так что не коммерческую программу можно разбить
на несколько небольших программ, а для коммерческих проектов можно
и раскошелится примерно на 1000 рублей на закупку aide.
Оно вполне стоит, чтобы не связываться с дикостью гугол,
которое например снесло 32 битную версию android studio.
Мне теперь что, линукс переустанавливать? А потом что им взбредет в голову?
Среда AIDE, которое на мой взгляд лучшее SDK для андроид, в бесплатной
версии, отказывается компилировать проект, состоящий больше, чем из пяти java файлов.
К счастью, в андроид API есть возможность вызывать интенты и сервисы
из других программ, так что не коммерческую программу можно разбить
на несколько небольших программ, а для коммерческих проектов можно
и раскошелится примерно на 1000 рублей на закупку aide.
Оно вполне стоит, чтобы не связываться с дикостью гугол,
которое например снесло 32 битную версию android studio.
Мне теперь что, линукс переустанавливать? А потом что им взбредет в голову?
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Страница 2 из 2 • 1, 2
Страница 2 из 2
Права доступа к этому форуму:
Вы не можете отвечать на сообщения
|
|