Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Тяжело ли ГЛОБАЛЬНО перехватить нажатия пальца?

Хочу в своей программе (куча окошек) провети частотный анализ "зон" клика пальцем.
В разрезе каждого активити или/и общий для всей программы.
Хочу нарисовать картинку типа (первый раз подключаю картинку к форуму):

для оптимизации дизайна и перестановки элементов...

OnTouch вроде получает только те элементы на которые я "назначил" обработчик. Если же что-то пропустил. Или там уже был другой обработчик, то возникают проблемы. В винде было понятие Hook - перехват ЛЮБЫХ действий пользователя. Результат хочу писать в базу/таблицу в виде "date,time,activity,X,W,Y,H" для дальнейшего анализа...

Возможно ли подобное? Нужен для этого рут и хитрые дрова или возможно штатными средствами? Может можно положить невидимое "окно" поверх остальных, но не блокировать клик на лежащих под ним кнопках?
Ответ: Потратил на этот проект еще несколько часов... Итак...
1) Судя по всему нажатия на чужих активити перехватить стандартными средствами НЕ РЕАЛЬНО!!! (очень много документации перечитал) Но можно перехватывать все нажатия в СВОЕЙ программе.
2) Можно перехватить лишь нажатия! Ни о "драгах", ни о мультитатче речь даже не идет! Получаю лишь первое нажатия из драга первым пальцем. Причем идет событие "нажато вне вьюва" (из списка "нажали/отпустили/тащим/вне вьюва")
3) При переходе на чужое активити или Home-screen продолжаю получать факт нажатия, но уже без координат (x=0, y=0)
4) Нажатия не особо точные. Возможно плохой монитор, но разброс внизу стабильно на 2 миллиметра выше нажатых, а вверху почти ровно (кнопки на которые нажимаю обрабатываются правильно, а линию рисует чуть выше кнопок - а вверху совпадают).
5) как я уже писал ТЕОРЕТИЧЕСКИ можно перехватывать все нажатия если обладать рутом (доступ к ADB) и расшифровать события от нажатий (вроде только поймать нужные и перевести из хекс-а)

...В результате получил инструмент - пишу все события в аррэй (могу и в базу) и вывожу их на другое полупрозрачное (затемненное) "проницаемое для нажатий" окно поверх остальных активити сочной контрастной ломанной. При сворачивании моего активити темное окно остается пока не нажму еще раз (уже по другому активити или хоум-скрину) - тогда скрывается. Может кому идея пригодится... Например для анализа "как пользователь держит планшет и какой зоной чаще пользуется" (хотя не смогу поймать - "нажал вверху, а отпустил внизу").

Короче... спорное достижение... для отладки нужно многое прописать внутри "отлаживаемого проекта". Проект снова уходит в архив - пока негде инструмент применять...

Если я в чем-то ошибся - поправьте...
Вопрос: Основы ORMLite

Гуру, кто-нибудь подобным пользуется???

Обьясните "на пальцах" что такое ORMLite и чем оно облегчает работу???

Раньше для этих задач использовал ОЧЕНЬ СЛОЖНЫЙ "самопал" - не все случаи учтены, возможны мелкие ошибки...
Сейчас хочу попробовать выучить нормальные/современны технологии, но не знаю с какой стороны подойти и есть ли подобные технологии вообще...

Задача:
1) создать КЛАСС, в котором через список создать структуру таблиц, обновлять базу (где-то встречал как все структуры таблиц в XML хранят)

Не по теме:

раньше делал примерно так (в специальном классе "структуры"):
version=12;
t1=addtable("table1");
t1.addfield("field1", type_int);
t1.addfield("field2", type_str);
t1.addfield("field3", type_rec_id, "table3"); // ссылка на id другой таблицы
update_structure();
при этом если баз нет, то создаются, если полей нет- добавляются, если поля лишние-удаляются... есть проверка версии структуры через специальную системную таблицу и параметр там - это поможет сделать "обработку" перед исправлением структуры (например field2=field2+field1, перед удалением field1)


2) добавить запись через класс указывая лишь нужные поля.

Не по теме:

Раньше делал примерно так
t1=struct1.gettable("table1");
rec1 = t1.new();
rec1.set("field1", 123);
rec1.set("field2", "hello");
rec1.save();


3) поиск по фильтрам
4) заготовка для вывода списка в list

Не по теме:

для этого писал свой класс списка



Надо написать СЛОЖНУЮ учетную систему с десятком-двумя связанных таблиц в базе (и часто менять структуру у клиентов без потери данных), списками записей, редакторами записей!

Накидайте пли-и-из с какой стороны подойти??? Есть ли технологии, которые помогут в этом или стоит доработать свой "велосипед"?
Ответ:
Сообщение от Mikalai
водим в гугл "SugarOrm". Первая ссылка -
и??? вижу очередную РЕКЛАМУ! Какой "SugarOrm" класный, хороший и как много он умеет... Мне КОД нужен!!!
С этой страницы меня послали на
И опять... используете это... или это... или это... И куски кода, которые НЕ РАБОТАЮТ!!! Все успешно запускается, но база так и не создается!! И ни слова о том где поля определять, куда базу сложить... Не говоря о том что имя базы создается похоже в МАНИФЕСТЕ! (я что не могу динамически управлять путем и названием? Не могу переложить "на лету"?)

Дайте ЧЕЛОВЕЧЕСКУЮ инструкцию пожалуйста! Чтобы увидеть базу после запуска!!!
 Комментарий модератора 
давайте бороться за уменьшение количества восклицательных знаков в постах


Добавлено через 18 часов 35 минут
UP!

Мне все еще нужен работающий кусочек кода, а не ссылка на официальный сайт одного из ORM! пли-и-из!
Ну очень надо! помогите "стартануть" технологию!
Вопрос: Приложение обои - Сделать выплывающее меню при "чиркании" пальцем

Доброго времени суток!

Суть проблемы такова: Обучаюсь разработке под Андроид. Естественно начал с изучения Java и еще параллельно прохожу различные курсы для Андроид. Встала передо мной задача сделать приложение с обоями. Разобрался с тем, как выводить картинки, создал кнопочку для установки. Все работает и запускается. Теперь необходимо: 1. Сделать выплывающее меню при "чиркании" пальцем слева(наподобие приложения вконтакте) и создание там категорий картинок. 2. Как вывести, чтобы картинки размещались небольшим размером, по несколько на главном экране и при нажатии на нее она увеличивается и , соответственно , вылазит картинка во весь экран с кнопочкой "установить обои"( наподобие альбомов вконтакте).

Не судите строго, только учусь. Сейчас , вполне вероятно меня закидают фразами, мол надо начинать с чего-нибудь попроще. Прекрасно понимаю это, но мне довольно за короткий срок нужно реализовать это приложенице.

Подскажите пожалуйста в какую сторону копать, т.к. ни у Хорстмана , ни в Философии Java этих вещей не нашел. И не нашел на startandroid.
Ответ:
Вопрос: Webview содержимое показывается только после проведения пальцем по элементу

Здравствуйте. Приложение содержит бегущюю HTML строкой (тэг<marquee>).
Есть функция, которая получает эту самую строку, создает WebView и добовляет его в LinearLayout.
Все хорошо работает,кроме того момента, что что-бы увидеть эту строку пользователю нужно провести пальцем снизу вверх по элементу ее содержащему ее.
Как избавиться от этой необходимости(проводить пальцем по элементу)

Вот функция
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
public void setMarqueeString(String marqueeString) {
        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.WRAP_CONTENT,
                LinearLayout.LayoutParams.MATCH_PARENT);
 
        final LinearLayout news_holder = (LinearLayout) findViewById(R.id.news_holder);
        WebView webView = new WebView(getApplicationContext());
 
        news_holder.removeAllViews();
        news_holder.addView(webView);
 
        webView.setLayoutParams(layoutParams);
        webView.setBackgroundColor(getResources().getColor(R.color.black));
        webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
 
        String html;
        if (marqueeString != null && marqueeString != "") {
            html = "<html><body>" +
                    "<font color='white'><marquee scrollamount='2' direction='right' loop='true'>" + marqueeString + "</marquee></font>" +
                    "</body></html>";
        } else {
            html = "<html><body>" +
                    "<FONT color='white' width='100%' height='100%'><center>" + getString(R.string.news_default_text) + "</center></FONT>" +
                    "</body></html>";
        }
        webView.loadDataWithBaseURL(null, html, "text/html", "utf-8", null);
 
        webView.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                view.setActivated(true);
                view.pageDown(true);
                view.setVerticalScrollbarOverlay(false);
                view.setHorizontalScrollbarOverlay(false);
                news_holder.setFocusable(true);
                Toast.makeText(Main.this, "page loaded", Toast.LENGTH_SHORT).show();
            }
        });
    }
Спасибо

Добавлено через 1 час 59 минут
так-же пробывал заменить
Java(TM) 2 Platform Standard Edition 5.0
1
webView.loadDataWithBaseURL(null, html, "text/html", "utf-8", null);
на
Java(TM) 2 Platform Standard Edition 5.0
1
webView.loadData(html, "text/html", "utf-8");
текст показывается автоматически, но начинается где-то с середины...
Пожалуйста, помогите разобраться с этим косячком..
Всем больше спасибо
Ответ: 1) вместо marquee сделайте javascript функцию.
2) сделайте html-файл, покажите его в webview, добейтесь, что бы работал.
3) передайте строку из java кода в javascript функцию.
Вопрос: Как работать со сканером отпечатка пальцев

Тестирую работу сканера отпечатков пальцев.
Вот есть MainActivity
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
...
 @TargetApi(Build.VERSION_CODES.M)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        keyguardManager =
                (KeyguardManager) getSystemService(KEYGUARD_SERVICE);
 
        if (Build.VERSION.SDK_INT > 22) {
            fingerprintManager =
                    (FingerprintManager) getSystemService(FINGERPRINT_SERVICE);
        }else{
          Toast.makeText(this,
                  "Ошибка 56",
                  Toast.LENGTH_LONG).show();
          }
 
        if (!keyguardManager.isKeyguardSecure()) {
 
            Toast.makeText(this,
                    "Lock screen security not enabled in Settings",
                    Toast.LENGTH_LONG).show();
            return;
        }
 
        if (ActivityCompat.checkSelfPermission(this,
                Manifest.permission.USE_FINGERPRINT) !=
                PackageManager.PERMISSION_GRANTED) {
            Toast.makeText(this,
                    "Fingerprint authentication permission not enabled",
                    Toast.LENGTH_LONG).show();
 
            return;
        }
 
        if (!fingerprintManager.hasEnrolledFingerprints()) {
 
            // This happens when no fingerprints are registered.
            Toast.makeText(this,
                    "Register at least one fingerprint in Settings",
                    Toast.LENGTH_LONG).show();
            return;
        }
 
        if (!fingerprintManager.hasEnrolledFingerprints()) {
 
            // This happens when no fingerprints are registered.
            Toast.makeText(this,
                    "Register at least one fingerprint in Settings",
                    Toast.LENGTH_LONG).show();
            return;
        }
 
        generateKey();
 
 
 
    }
 
 
// нажимая на кнопку запускаю работу сканера
    @TargetApi(Build.VERSION_CODES.M)
    public void  gh(View view){
 
        if (cipherInit()) {
            cryptoObject =
                    new FingerprintManager.CryptoObject(cipher);
            helper = new FingerprintHandler(this);
 
            helper.startAuth(fingerprintManager, cryptoObject);
 
 
        }
 
 
 
        
 
 
 
    }
 
 
 
 
    @TargetApi(Build.VERSION_CODES.M)
    protected void generateKey() {
        try {
            keyStore = KeyStore.getInstance("AndroidKeyStore");
        } catch (Exception e) {
            e.printStackTrace();
        }
 
        try {
            keyGenerator = KeyGenerator.getInstance(
                    KeyProperties.KEY_ALGORITHM_AES,
                    "AndroidKeyStore");
        } catch (NoSuchAlgorithmException |
                NoSuchProviderException e) {
            throw new RuntimeException(
                    "Failed to get KeyGenerator instance", e);
        }
 
        try {
            keyStore.load(null);
            keyGenerator.init(new
                    KeyGenParameterSpec.Builder(KEY_NAME,
                    KeyProperties.PURPOSE_ENCRYPT |
                            KeyProperties.PURPOSE_DECRYPT)
                    .setBlockModes(KeyProperties.BLOCK_MODE_CBC)
                    .setUserAuthenticationRequired(true)
                    .setEncryptionPaddings(
                            KeyProperties.ENCRYPTION_PADDING_PKCS7)
                    .build());
            keyGenerator.generateKey();
        } catch (NoSuchAlgorithmException |
                InvalidAlgorithmParameterException
                | CertificateException | IOException e) {
            throw new RuntimeException(e);
        }
    }
 
    @TargetApi(Build.VERSION_CODES.M)
    public boolean cipherInit() {
        try {
Сам класс FingerprintHandler

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
...
@TargetApi(Build.VERSION_CODES.M)
public class FingerprintHandler extends
        FingerprintManager.AuthenticationCallback {
 
    private CancellationSignal cancellationSignal;
    private Context appContext;
 
 
    public FingerprintHandler(Context context) {
        appContext = context;
    }
 
    public void startAuth(FingerprintManager manager,
                          FingerprintManager.CryptoObject cryptoObject) {
 
        cancellationSignal = new CancellationSignal();
 
        if (ActivityCompat.checkSelfPermission(appContext,
                Manifest.permission.USE_FINGERPRINT) !=
                PackageManager.PERMISSION_GRANTED) {
            return;
        }
        manager.authenticate(cryptoObject, cancellationSignal, 0, this, null);
    }
 
    @Override
    public void onAuthenticationError(int errMsgId,
                                      CharSequence errString) {
     //   Toast.makeText(appContext,
        //        "Authentication error\n" + errString,
           //     Toast.LENGTH_LONG).show();
    }
 
    @Override
    public void onAuthenticationHelp(int helpMsgId,
                                     CharSequence helpString) {
        Toast.makeText(appContext,
                "Authentication help\n" + helpString,
                Toast.LENGTH_LONG).show();
    }
 
    @Override
    public void onAuthenticationFailed() {
        Toast.makeText(appContext,
                "Authentication failed.",
                Toast.LENGTH_LONG).show();
    }
 
    @Override
    public void onAuthenticationSucceeded(
            FingerprintManager.AuthenticationResult result) {
 
 
 
 
        Toast.makeText(appContext,
                "Authentication succeeded.",
                Toast.LENGTH_LONG).show();
 
 
    }
 
 
}
Запускаю все работает сообщения из методов onAuthenticationSucceeded onAuthenticationFailed и onAuthenticationError
появляются, но адальше как мне в активити обработать результат ?
Другими словами поставил палец он подтвердился методом onAuthenticationSucceeded и дальше например
сменился layout блокировки на layout основного тела программы.
Помогите пожалуйста.
Ответ: Вот тут вроде то, что вам нужно
Вопрос: Swipe навигация в приложении

Здравствуйте.
Возникла потребность в навигации между активити жестами(свайп). Ведешь пальцем влево и переходит в нужное активити.
Нагуглил я очень много всего, куча всяких разных методов, все очень громозкое и сложное.
Хочется просто в обработчик запихать интент с передачей данных и открытие нового класса(нового активити). С этим проблемм нет. Проблема в том что не знаю подходящего метода для свайпа. Может кто подскажет? Буду благодарен.
Ответ: spydark91, вот тчо выдает на ваш код
(Пытаюсь реализовать свайп между актвити)
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.LinearLayout.setOnTouchListener(android.view.View$OnTouchListener)' on a null object reference
 
///////////////////////////////////////////////
package com.example.navigate.potehki_v01; 
 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.GestureDetector; 
import android.view.MotionEvent; 
import android.view.View; 
import android.widget.LinearLayout; 
import android.widget.Toast; 
 
 
public class MainActivity extends AppCompatActivity { 
private GestureDetector gestureDetector; 
Last Stand 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 
 
// 
LinearLayout bg = (LinearLayout)findViewById(R.id.activity2); 
bg.setOnTouchListener(new View.OnTouchListener() { 
Last Stand 
public boolean onTouch(View v, MotionEvent event) { 
return false; 
} 
public boolean onSwipeTop() { 
Toast.makeText(MainActivity.this, "top", Toast.LENGTH_SHORT).show(); 
return true; 
} 
public boolean onSwipeRight() { 
Toast.makeText(MainActivity.this, "right", Toast.LENGTH_SHORT).show(); 
return true; 
} 
public boolean onSwipeLeft() { 
Toast.makeText(MainActivity.this, "left", Toast.LENGTH_SHORT).show(); 
return true; 
} 
public boolean onSwipeBottom() { 
Toast.makeText(MainActivity.this, "bottom", Toast.LENGTH_SHORT).show(); 
return true; 
} 
}); 
 
} 
 
}
Вопрос: В чем разница (View view) и (View v)

Я только начинаю изучать программирование под андроид (до этого вобще программированием не занимался), по гуглу удалось найти только описание для варианта "(View v)" http://developer.android.com/referen...kListener.html

Вот например код:
Код Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
public void onClick(View view) {
        TextView helloTextView = (TextView)findViewById(R.id.textView);
        helloTextView.setText("Hello Kitty!");
    }
Почему в документации написано "onClick(View v)" а тут в коде "onClick(View view)"? Это что, просто сокращение чтобы меньше писать? Или (View view) и (View v) означают разные вещи? Разъясните, пожалуйста
Ответ:
Цитата Сообщение от krionic Посмотреть сообщение
или это как-то автоматически подразумевается исходя из принципов ООП
Это даже не совсем ООП... Это скорее API андроида! При создании класа активити(формочек) создатели (гугл) решили что в функцию обработки нажатия полезно передать ссылку на саму кнопочку... И сделали... И скупо описали в своей документации... ООП здесь только в принципах назначения обработчика и при анализе исходников "предка"(термин смотри в теории ООП) твоего активити.

Короче... много надо просто "принять", "запомнить" и использовать не до конца вдаваясь в принципы... просто те кто это писал до тебя решили что это всем будет полезно...

Попробую "на пальцах"...
на активити рисуешь две кнопки
ОБЕИМ назначаешь ОДНУ И ТУ-ЖЕ обработку нажатия. Но благодаря наличию переменной в параметрах фукнций (название можешь любое задать, но обязательно должно быть хоть какое-нибудь) можешь получить ссылку на саму кнопку и например изменить конкретно у нее название, цвет.
Или в зависимости от текста кнопки можно делать в одной и той-же функции разные действия.
Вопрос: YandexMapKit vs Yandex

Сорри, в тему забыл добавить Yandex Maps JS API WebView.
Итак, парни, решил я залезть в одну и ту же реку дважды.
Потребовалось выбрать движок для карт. Google maps не подошли по причине не очень высокого покрытия. Решили взять карты от "Яндекс". Потратив некоторое время, нашёл пару рабочих примеров:

(ссылка на 83 слайде).
Запустил, первый визуально помедленнее. На эмуляторе x86 запустить не смог, требовался ARM, наверное. Функционал победнее. Поддержка YMK, как вы понимаете, была заморожена 3 года назад, сейчас что-то возобновили (см. ).
Второй побыстрее, больше функций (есть слои, светофор, поиск), запускается и на эмуляторе (правда, со второго раза). Думаю, что можно прямо по карте строить пути.
По картам есть такие неплохие ссылки:


Выбор за вами.

Добавлено через 4 часа 7 минут
Оба варианта не допускают использование оффлайн-карт (лицензионное соглашение). Соответственно, доступ к Интернету обязан быть. В случае с YMK требуется прописать ещё несколько разрешений, поэтому, опять же, способ с WebView предпочтительнее.
После нескольких часов мучений написал более-менее вменяемый интерфейс для карты. Этот HTML-файл надо положить в папку assets и получать доступ через WebView. Как это сделано, указано в примере на 83 слайде.
А вот и сама разметка:
Кликните здесь для просмотра всего текста
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Размещение интерактивной карты на странице</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta name="viewport"
          content="initial-scale=1.0, user-scalable=no, maximum-scale=1"/>
    <script src="//api-maps.yandex.ru/2.1.38/?lang=ru_RU"
            type="text/javascript"></script>
    <script type="text/javascript">
        ymaps.ready(init);
 
        function init(){
            var myMap = new ymaps.Map("map", {
                center: [55.76, 37.64],
                zoom: 14,
                controls: ["default","routeEditor"]
            });
            //myMap.setType('yandex#satellite');
 
            var myPlacemark = new ymaps.Placemark([55.76, 37.64], {
                hintContent: 'Москва!',
                balloonContent: 'Столица России'
            });
 
            myMap.geoObjects.add(myPlacemark);
        }
    </script>
    <style>
        html, body, #map {
            width: 100%;
            height: 100%;
            margin: 0;
            padding: 0;
        }
        #map {
            background-color: #888;
        }
    </style>
</head>
<body>
    <div id="map"></div>
</body>
</html>

Для работы с кнопками на карте рекомендую почитать .

Добавлено через 37 минут
Если требуется отобразить несколько объектов на карте, подойдёт следующий способ. В теге <script> пропишите код (
Кликните здесь для просмотра всего текста

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
        ymaps.ready(init);
 
        function init(){
            var myMap = new ymaps.Map("map", {
                center: [55.76, 37.64],
                zoom: 14,
                controls: ["default","routeEditor"]
            });
            //myMap.setType('yandex#satellite');
 
            var myPlacemark = new ymaps.Placemark([55.76, 37.64], {
                hintContent: 'Москва!',
                balloonContent: 'Столица России'
            });
 
            myMap.geoObjects.add(myPlacemark);
 
            // Добавляем в геокодер список адресов
            var objects = ymaps.geoQuery(
                    ymaps.geocode('Москва, Слесарный переулок, д.3'))
                    .add(ymaps.geocode('Люберцы, Октябрьский проспект д.143'))
                    .add(ymaps.geocode('Москва, ул. Льва Толстого, 16'))
                    .addToMap(myMap);
            // Создаем коллекцию геообъектов, в котором будут находиться эти адреса
            var geoObjectsCollection = new ymaps.GeoObjectCollection();
            // После того, как поиск вернул результат, вызывается callback-функция
            objects.then(function () {
                // добавляем координаты адресов в коллекцию geoObjectsCollection
                objects.each(function (object) {
                    var coordinates = object.geometry.getCoordinates();
                    geoObjectsCollection.add( new ymaps.Placemark(coordinates) );
                });
                // Добавляем коллекцию геообъектов на карту
                myMap.geoObjects.add(geoObjectsCollection);
                // Спозиционируем карту так, чтобы на ней были видны все объекты.
                //myMap.setBounds(geoObjectsCollection.getBounds());
                myMap.setBounds(myMap.geoObjects.getBounds(), {checkZoomRange:true}).then(function(){
                    if(myMap.getZoom() > 15) myMap.setZoom(15); // Если значение zoom превышает 15, то устанавливаем 15.
                });
            });
       }

Видно, что находятся дома с такими же адресами и в городах Подмосковья.
Ответ: Сделал на основе статьи передачу данных (массива точек) из Андроид-программы в HTML-страницу. Если кому надо, могу написать код. Проверил на API 15, 21 - всё работает. На 10 не установилась.

Добавлено через 2 минуты
В предыдущем сообщении забыл добавить одну строку:
Javascript
1
                        clusterCaption: item.name, // Для отображения имени в списке в кластере.
Её нужно вставить после 68 строки, чтобы отображались названия при разных видах кластеров.

Добавлено через 4 часа 50 минут
Вопрос знатокам.
У меня есть список (ListView) с адресами. Пользователь может нажать на любой из них, при этом откроется карта, на ней будет адрес. Загрузка занимает секунд 5. Нажимает кнопку "назад", открывает следующий адрес.
Карту можно поворачивать на 90 градусов.
Как сделать так, чтобы при нажатии на следующий адрес время загрузки карты было минимальным?
Вопрос: CustomView как организовать скрол?

Как сделать так что бы CustomView мог скролироваться? Уже все перепробовал. Оборачивал в ScrollView (в этом случае изображение просто не выводится на экран). Помогите, пожалуйса
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
public class MainActivity extends Activity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
 
 
}
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
public class DrawView extends View {
    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.map), 10, 15, null);
    }
 
    public DrawView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
}
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
    android:orientation="vertical"
android:id="@+id/horizontalScrollView" >
 
        <android.test.exampleproject.DrawView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/view" />
</LinearLayout>
Ответ: Mikalai, очень спасибо. Вот что потребовалось изменить, что бы это заработало
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public class DrawView extends View {
 
    private final GestureDetector gestureDetector;
 
    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.wagon), 10, 15, null);
    }
 
    public DrawView(Context context, AttributeSet attrs) {
        super(context, attrs);
        setFocusable(true);
        gestureDetector = new GestureDetector(context, new MyGestureListener());
    }
 
    /**
     * Перехватывает нажатие пальцев, собственно суть скролла состоит в том,
     * что пользователь перетягивает изображение пальцем.
     * @param event
     * @return
     */
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (gestureDetector.onTouchEvent(event)) return true;
        return true;
    }
 
    /**
     * Непосредственно двигает изображение, на дистанцию которую
     * пользователь перетягивает пальцем.
     */
    private class MyGestureListener extends GestureDetector.SimpleOnGestureListener{
        @Override
        public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
            scrollBy((int)distanceX, (int)distanceY);
            return true;
        }
    }
Вопрос: OnTouchListener и толстый дрожащий палец :)

суть проблемы... жму в экран, двигаю, отпускаю, получаю события ACTION_DOWN, ACTION_UP, ACTION_MOVE... при длительном нажатии желаю получить какое-то особое действие (пусть будет вывод диалога)...
на эмуляторе все красиво, мышкой делаю тыцк, не шевелюсь 3секунды, отпускаю кнопочку - диалог выводится.
на смартфоне добиться такого не смог ни разу (( что можно сделать в этом случае? палец подточить не вариант
и отработать событие необходимо именно в текущей точке код ничем не примечателен, все как у всех, ниже привел.

на крайний случай планирую временную переменную типа ОтклонениеПоХ если в итоге менее 2-3px, значит событие отработает...


Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
    public boolean onTouch(View v, MotionEvent event) {
 
        try {
            Thread.sleep(50);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
 
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                isDown = true;
                x = event.getX();
                y = event.getY();
                break;
            case MotionEvent.ACTION_UP:
                isUp = true;
                x = event.getX();
                y = event.getY();
                break;
            case MotionEvent.ACTION_MOVE:
                isMoved = true;
                Log.d(LOG_TAG,"движуха");
                x = event.getX();
                y = event.getY();
                break;
        }
        return true;
    }
Ответ: к вопросу применения
Сообщение от dimon4
timeEnd = System.currentTimeMillis()

был сдвиг или нет решается запоминанием начальных координат касания

для остальных извращений есть