Magic ball для андроида

Magic ball для андроида

Краткое описание:
Знаменитый Шар Судьбы.
Шуточный способ предсказывать будущее.
Управление голосом, встряской и касанием.

Описание:
Знаменитый Шар Судьбы.
Шуточный способ предсказывать будущее.
Управление голосом, встряской и касанием.
Теперь вы сами можете выбрать нужный вам способ управления.
Языки: English, Français, Deutsch, Polskie, Русский, Беларуская, Українська.
Все БЕСПЛАТНО и БЕЗ РЕКЛАМЫ!

Инструкция:
Никогда не задавайте один и тот же вопрос шару дважды! НИКОГДА.
Задавайте шару только правильные вопросы, как бы советуясь.
— «Шар, как думаешь, идти сегодня на улицу?»
— «Шар, меня любит Петя?» и т.д.
Не задавайте вопросы такого плана:
— Сколько мне лет?
— Как меня зовут?
такие вопросы неверны.
Запомните, шар может отвечать лишь да нет не знаю и так далее.


Google Play: https://play.google.com/store/apps/details?id=net.alexplay.mystical_ball

Русский интерфейс: Да
Системные требования: андроид 2.2 и выше

Скачать: версия: 1.0a
MagicBall8.apk ( 4.63 МБ )

Источник

Скачать Шар Судьбы / Magic Ball / Magical Ball на андроид v.8.0.3

Когда постоянно сомневаешься в правильном выборе как нельзя, кстати, выручает это приложение. Просто решайте скачать Шар Судьбы / Magic Ball / Magical Ball на андроид и узнаете, какой выбор сделать правильнее. Вы навсегда сможете забыть о сомнениях, которые постигают. Заходите в эту игру, задавайте вопрос и получайте на него ответ. Возможно, именно этот метод сможет исправить ситуацию и поможет выбрать правильное действие. Все это действительно поможет и даже даст уверенности человеку. Поэтому у каждого должно быть это приложение. Задав вопрос, жмите на шар, и он выдаст ответ, которым уже вы будете решать пользоваться или нет.

Почему стоит скачать Шар Судьбы / Magic Ball / Magical Ball на андроид?

Обязательное условие приложение кроется в самом вопросе. Игроку нужно задавать только прямые вопросы, ответы на которые следуют либо «Да» либо «Нет». Внимательно подумайте над вопросом, который задали, сконцентрируйтесь на нем и постоянно думайте. После этого нажмите на шар и не прекращайте думать о своем вопросе. Шар выдаст результат, который можно будет прочесть. Просто вам нужно скачать Шар Судьбы / Magic Ball / Magical Ball на андроид и жизнь станет намного проще, а моментов, в которых нужно выбирать, будет меньше. Главное очень усердно думать об этом, и тогда все может получиться. В игре используется множество красочных тем для выбора шара. Так игрок сможет подобраться шар под собственный стиль, а также фон, на котором он будет расположен. Узнай, что говорят о тебе знаки прямо сейчас. Главное помни, что не всегда шар будет помощником и создан он в первую очередь для того, чтобы повеселиться. Это лишь имитация, которая может придать уверенности. Над каждым вопросом, над которым мы думает заранее уже есть ответ, и он дается нами лично. Задавая его, мы точно знаем, какой хотим услышать ответ, и возможно, если это подтвердит шар. Вам будет проще реагировать на действительно и делать правильный выбор.

Читайте также:  Rpg maker для андроида

Источник

Шар судьбы (Magic 8 ball)

Мы напишем программу Шар судьбы (Magic 8-Ball), которому можно будет задать вопрос, потрясти и получить ответ. Небольшая вибрация оповестит нас о том, что тряски достаточно.

Полная версия исходного кода лежит на google code.

Локализация

Создадим несколько наборов ресурсов, первый — по умолчанию res/values/strings.xml, а также создадим папку res/values-ru для русской локализации, в которой также будет находиться файл strings.xml, содержащий название приложения, заголовки и ответы магического шара, которые хранятся в массиве responses.

Разметка, анимация и вибрация

Для фона возьмем картинку с изображением космоса. На нем лежит элемент ImageView с изображением шара, а сообщения будут выводиться с помощью TextView (файл main.xml):

Реализуем возможность получить ответ с помощью меню. Создадим файл menu.xml в папке res/menu/, который содержит пункты Shake и Preference:

Для появляющегося ответа будем использовать класс AlphaAnimation, который как нельзя кстати подходит для нашей задачи, позволяя объектам появляться и исчезать, используя alpha-уровень объекта.

Перед тем как дать ответ Magic 8-Ball завибрирует на время VIBRATE_TIME, взятое из настроек (о них ниже). По умолчанию это значение равно 250мс. Вибрацию с маленькой длительностью (50мс) можно использовать в приложениях как ответную реакцию на действия пользователя. Для корректной работы с классом Vibrator нужно не забыть объявить uses-permission в файле AndroidManifest.xml:

Методы для меню

Класс MenuInflater используется для создания объектов Меню из xml-файла. В метод onOptionsItemSelected мы попадаем в момент выбора элемента меню. При нажатии на кнопку Shake, мы получим ответ. Кнопка Preferences предназначена для настроек.

Работа с сенсором

Для взаимодействий с сенсором нам нужно имплементировать интерфейс SensorEventListener. У него объявлены два метода:

  • onAccuracyChanged — вызывается когда изменилась точность датчика, он нам не нужен
  • onSensorChanged — вызывается при изменениях значений датчика, этот нам нужен

Еще один немаловажный момент — чтобы работать с сенсором нам нужно его найти и зарегистрироваться у SensorManager.

Заметим, что мы получаем сенсор с атрибутом Sensor.TYPE_ACCELEROMETER, это означает, что данные приходящие в метод onSensorChanged будут в единицах ускорения (м/с^2). Значениям по трем осям X, Y и Z будут соответствовать значения event.values[0], event.values[1], event.values[2] класса SensorEvent.

Временем жизни нашей активности управляет Android, и нам не нужно чтобы наше приложение вибрировало от случайных трясок в кармане, поэтому мы перестаем работать с сенсором, как только приложение становится неактивно. Также, если сенсор не найден, то мы не предлагаем трясти устройство.

Настройки

Тестирование на различных телефонах показало необходимость задавать порог силы встряхивания — threshold. Между HTC Wildfire, Motorola Milestone и, например, Highscreen Zeus, это значение отличалось раза в три. Это ставит перед нами задачи:

  • Нужно окно настроек, где пользователь может вручную задать значение порога и другие параметры
  • Эти значения настроек надо где-то хранить и откуда-то читать.

Воспользуемся для этих целей готовыми классами PreferenceActivity (для отображения настроек) и SharedPreferences (для хранения настроек).

PreferenceActivity — класс, который визуально отображает нам иерархию объектов preference. Он загружает контент из xml-файла методом addPreferencesFromResource. Он автоматически взаимодействует с объектом класса SharedPreferences и сохраняет настройки по указанному ключу. Создадим xml-файл наших настроек и надуем (inflate) наш PreferenceActivity.

Читайте также:  Выбираем андроид медиаплеер 4pda

В нашем файле все вложенные элементы — EditTextPreference. Этот класс удобен для показа пользователю диалогового окна с текстовыми полями, в которые можно ввести значения.

Источник

Пишем Magic 8-Ball для Android

В данной статье мы напишем локализованный Magic 8-Ball для Android, которому можно будет задать вопрос, потрясти и получить ответ. Небольшая вибрация оповестит нас о том, что тряски достаточно.

Статья рассчитана на тех, кто уже написал хелловорлд под Android и собирается идти дальше в этом направлении. Полная версия исходного кода лежит на google code. Там же можно попробовать файл magic-8-ball 1.1.apk во вкладке download.

Для успешной работы нам будут нужны установленные jdk, android sdk, eclipse и ADT плагин. Как это сделать, доступно написано здесь.

Локализация

География Android устройств обширна, поэтому вопрос локализации занимает ключевое место при разработке приложений под эту платформу. К счастью, нам не придется изобретать велосипед, Google позаботился о программистах в этом вопросе.

Итак, концепция локализации приложений такова, мы создаем несколько наборов ресурсов, первый — по умолчанию res/values/strings.xml , остальные для нужной нам локали res/values- /strings.xml , например, values-en для английского или values-ja для японского. При запуске Android выбирает какие ресурсы загрузить, основываясь на локали самого устройства. К слову, под ресурсами в Android подразумеваются не только текстовые строки, а также layout’ы, звуковые файлы, графика и другие статические данные.

Для нашего приложения мы создадим папки res/values/ , res/values-en и res/values-ru , в них будут лежать файлы strings.xml. Эти файлы содержат название приложения, заголовки и ответы магического шара, которые хранятся в массиве responses. Выглядит это так:

xml version =»1.0″ encoding =»utf-8″ ? >
resources >
string name =»app_name» > Magic 8-Ball string >
string name =»shake_me_caption» > Shake Me string >
string name =»press_menu_shake_caption» > Press Menu\n- Shake string >
string name =»menu_shake_caption» > Shake string >
string name =»menu_preferences_caption» > Preferences string >

string name =»preferences_section_title» > Magic 8-ball Preferences string >

string name =»shake_count_id» > shakeCount string >
string name =»shake_count_title» > Shake count string >
.
string-array name =»responses» >
item > As I see\nit, yes item >
item > It is\ncertain item >
item > It is\ndecidedly\nso item >
item > Most\nlikely item >
item > Outlook\ngood item >
item > Signs point\nto yes item >
item > Without\na doubt item >
item > Yes item >
item > Yes -\ndefinitely item >
.
item > Very\ndoubtful item >
string-array >

* This source code was highlighted with Source Code Highlighter .

Еще нюанс, android developer’s guide предупреждает нас о необходимости иметь точную копию какой-нибудь локализации в качестве ресурса по умолчанию, чаще всего — английскую. И приводит пример, что если не будет хватать строки в файле res/values/strings.xml , которая есть в res/values-en/strings.xml и используется в приложении, то возможно все скомпилируется без проблем, но в локали отличной от английской пользователь увидит сообщение об ошибке и кнопку Force Close.

Layout, анимация и вибрация

xml version =»1.0″ encoding =»utf-8″ ? >
FrameLayout xmlns:android =»http://schemas.android.com/apk/res/android»
android:layout_width =»fill_parent»
android:layout_height =»fill_parent»
android:background =»@drawable/bg» >
ImageView android:layout_width =»fill_parent»
android:layout_height =»fill_parent»
android:src =»@drawable/eight_ball»
android:layout_gravity =»center_vertical»
android:layout_margin =»10px»/>
LinearLayout xmlns:android =»http://schemas.android.com/apk/res/android»
android:orientation =»vertical»
android:layout_width =»fill_parent»
android:layout_height =»fill_parent»
android:gravity =»center» >
TextView android:id =»@+id/MessageTextView»
android:layout_width =»wrap_content»
android:layout_height =»wrap_content»
android:layout_gravity =»center»
android:background =»@drawable/triangle»
android:text =»@string/shake_me_caption»
android:focusable =»false»
android:gravity =»center_vertical|center» android:layout_marginTop =»14dip» >
TextView >
LinearLayout >
FrameLayout >
* This source code was highlighted with Source Code Highlighter .

private void showMessage( String message) <
TextView triangle = (TextView) findViewById(R.id.MessageTextView);
triangle.setVisibility(TextView.INVISIBLE);
triangle.setText(message);

AlphaAnimation animation = new AlphaAnimation(0, 1);
animation.setStartOffset(Defaults.START_OFFSET);
triangle.setVisibility(TextView.VISIBLE);
animation.setDuration(Defaults.FADE_DURATION);
triangle.startAnimation(animation);

Читайте также:  Как вернуть картинку андроид

vibrator.vibrate(Integer.parseInt(preferences.getString(
getString(R. string .vibrate_time_id), Defaults.VIBRATE_TIME)));
>

* This source code was highlighted with Source Code Highlighter .

Перед тем как дать ответ Magic 8-Ball завибрирует на время VIBRATE_TIME, взятое из настроек (о них ниже). По дефолту это значение 250мс. Вибрацию маленькой длительностью (50мс) можно использовать в приложениях как ответную реакцию на действия пользователя. Для корректной работы с классом Vibrator нужно не забыть объявить uses-permission в файле AndroidManifest.xml: uses-permission android:name =»android.permission.VIBRATE»/>

xml version =»1.0″ encoding =»utf-8″ ? >
menu xmlns:android =»http://schemas.android.com/apk/res/android» >
item android:id =»@+id/shake»
android:title =»@string/menu_shake_caption»
android:icon =»@android:drawable/ic_menu_always_landscape_portrait»/>
item android:id =»@+id/preferences»
android:title =»@string/menu_preferences_caption»
android:icon =»@android:drawable/ic_menu_preferences»/>
menu >
* This source code was highlighted with Source Code Highlighter .

@Override
public boolean onCreateOptionsMenu(Menu menu) <
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.menu, menu);
return super.onCreateOptionsMenu(menu);
>

@Override
public boolean onOptionsItemSelected(MenuItem item) <
switch (item.getItemId()) <
case R.id.shake:
showMessage(getAnswer());
return true ;
case R.id.preferences:
startActivity( new Intent( this , Preferences. class ));
return true ;
>
return false ;
>

* This source code was highlighted with Source Code Highlighter .

Класс MenuInflater используется для создания объектов Меню из xml файла. В метод onOptionsItemSelected мы попадаем в момент выбора элемента меню, о чем говорит нам само название метода. При нажатии на кнопку Shake, мы получим ответ. О кнопке Preferences расскажет глава Настройки.

Работа с сенсором

sensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

public void onSensorChanged(SensorEvent event ) <
if ( event .sensor.getType() == Sensor.TYPE_ACCELEROMETER)
if (isShakeEnough( event .values[0], event .values[1], event .values[2]))
showMessage(getAnswer());
>

private boolean isShakeEnough( float x, float y, float z) <
double force = 0.0d;
force += Math .pow((x — lastX) / SensorManager.GRAVITY_EARTH, 2.0);
force += Math .pow((y — lastY) / SensorManager.GRAVITY_EARTH, 2.0);
force += Math .pow((z — lastZ) / SensorManager.GRAVITY_EARTH, 2.0);
force = Math .sqrt(force);

lastX = x;
lastY = y;
lastZ = z;

if (force > Float.parseFloat(preferences.getString(
getString(R. string .threshold_id), Defaults.THRESHOLD))) <
shakeCount++;
if (shakeCount > Integer.parseInt(preferences.getString(
getString(R. string .shake_count_id), Defaults.SHAKE_COUNT))) <
shakeCount = 0;
lastX = 0;
lastY = 0;
lastZ = 0;
return true ;
>
>
return false ;
>

* This source code was highlighted with Source Code Highlighter .

@Override
public void onResume() <
super.onResume();
registerSensorListener();
if (isSensorRegistered())
showMessage(getString(R. string .shake_me_caption));
else
showMessage(getString(R. string .menu_shake_caption));
>

@Override
public void onPause() <
unregisterSensorListener();
super.onPause();
>

* This source code was highlighted with Source Code Highlighter .

Настройки

Наконец, мы дошли до настроек. Тестирование на различных телефонах показало необходимость задавать порог силы встряхивания — threshold. Между HTC Wildfire, Motorola Milestone и, например, Highscreen Zeus, это значение отличалось раза в три. Это ставит перед нами задачи:

  1. Нужно окно настроек, где пользователь может вручную задать значение порога и другие параметры
  2. Эти значения настроек надо где-то хранить и откуда-то читать.

Тут в помощь нам приходят два уже готовых класса PreferenceActivity для отображения настроек и SharedPreferences для их хранения. Теперь более подробно.

PreferenceActivity — класс, который визуально отображает нам иерархию объектов preference. Он загружает контент из xml файла методом addPreferencesFromResource. Он автоматически взаимодействует с объектом класса SharedPreferences и сохраняет настройки по указанному ключу. Создадим xml файл наших настроек и надуем (inflate) наш PreferenceActivity.

Источник

Оцените статью