Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Digetix
104 / 104 / 1
Регистрация: 09.04.2012
Сообщений: 651
#1

Разные drawable для маркера Google Maps - Программирование Android

09.02.2013, 16:14. Просмотров 871. Ответов 12
Метки нет (Все метки)

Здравствуйте. Есть код главной активити
Кликните здесь для просмотра всего текста
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
@Override
     public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main); 
       
         mapView = (MapView) findViewById(R.id.mapview);
         mapView.setBuiltInZoomControls(true);
         mapController = mapView.getController();
         mapController.setZoom(17);
         
         mapOverlays = mapView.getOverlays();
         drawable = this.getResources().getDrawable(R.drawable.red);         
         itemizedoverlay = new HelloItemizedOverlay(drawable, MainActivity.this);
                                       
         ParseQuery query = new ParseQuery("MyObject");
         query.findInBackground(new FindCallback() {
           public void done(List<ParseObject> myObject, ParseException e) {
             if (e == null) {
                  
                for ( i = 0; i < myObject.size(); i++) {
                 
                 textGet = myObject.get(i).getString("Text");
                 numbGet = myObject.get(i).getNumber("Numb");
                 geo1Dub = myObject.get(i).getParseGeoPoint("location").getLatitude();
                 geo2Dub = myObject.get(i).getParseGeoPoint("location").getLongitude();
                 geo1Int = (int) (geo1Dub*1E6);
                 geo2Int = (int) (geo2Dub*1E6);
                 pointGet = new GeoPoint(geo1Int, geo2Int);
                                                  
                 OverlayItem overlayitem = new OverlayItem(pointGet, numbGet.toString(),  textGet);
                 itemizedoverlay.addOverlay(overlayitem);
                                  
                } 
               
                mapOverlays.add(itemizedoverlay);
                mapView.postInvalidate();           
             } else {
               
                 Toast.makeText(getBaseContext(), "Не работает", Toast.LENGTH_SHORT).show();
                 
             }
           }
         });  
                                  
     }    
}


И есть класс наложения маркеров
Кликните здесь для просмотра всего текста
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
public class HelloItemizedOverlay extends ItemizedOverlay {
 
    private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
 
    Context mContext;
    Drawable drawable;
    
    public HelloItemizedOverlay(Drawable defaultMarker, Context context) {        
        super(boundCenterBottom(defaultMarker));
        
        mContext = context;        
        drawable = mContext.getResources().getDrawable(R.drawable.red);
    }
 
    public void addOverlay(OverlayItem overlay) {
        mOverlays.add(overlay);
        populate();
    }
    
    @Override
    protected OverlayItem createItem(int i) {
        return mOverlays.get(i);
        
    }
 
    @Override
    public int size() {
        return mOverlays.size();
    }
    @Override
    protected boolean onTap(int index) {
            
       OverlayItem item = mOverlays.get(index);
       AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
       dialog.setTitle(item.getTitle());
       dialog.setMessage(item.getSnippet());
       dialog.setIcon(drawable);
       dialog.setPositiveButton("ОК", 
                new DialogInterface.OnClickListener() {                 
                       public void onClick(DialogInterface dialog, int which) {
                            }});       
       dialog.show();
       return true;
    }
}


Подскажите, пожалуйста, как использовать разный drawable для dialog.setIcon(drawable); ?
То есть в главной активити загружается число numbGet = myObject.get(i).getNumber("Numb"); и нужно сделать, чтоб если numbGet == 1, то drawable = mContext.getResources().getDrawable(R.drawable.red);, иначе drawable = mContext.getResources().getDrawable(R.drawable.green);
Пробовал делать static drawable и numbGet и делать проверки и в главной активити, и в классе, ничего не выходит, приложение вылетает с ошибкой.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.02.2013, 16:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Разные drawable для маркера Google Maps (Программирование Android):

Несколько snippet для маркера Google Maps v.2 - Программирование Android
Пользуюсь картами Google Maps v.2, там маркер добавляется вот так markerOptions = new MarkerOptions(); markerOptions.position(new...

Привязка маркера к камере в google maps - Программирование Android
Нужно сделать так что бы маркер добавленый на карту двигался вместе с камерой как вот здесь : http://jsfiddle.net/doktormolle/jcHqt/ ...

Google Maps 2. Ограничение на количество запросов к google - Программирование Android
Google накладывает ограничение на количество запросов в день к Google Maps (2500 в день на ключ). Скажите, как можно узнать, какое кол-во...

Google maps метод поиска фрагмента карт на разметке для разных версий андроид - Программирование Android
Столкнулся с такой проблемой. в андройде 6 работает один метод поиска фрагмента карт на разметке а в 5 и ранее - другой. //api 21+ ...

Разные ключи google для debug и signed приложений - Программирование Android
При компиляции с дебажным ключом в манифесте нужно указывать один API_KEY для google.maps, а для signed ключа - другой API_KEY. Значит...

Google Maps - Программирование Android
Здравствуйте! Подскажите для начала как можно тестировать Google Maps на эмуляторах и на пример на каком, сейчас использую droid4x. ...

12
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
09.02.2013, 17:49 #2
Java
1
2
3
4
5
if(numbGet == 1){
   dialog.setIcon(drawable1);
} else {
   dialog.setIcon(drawable2);
}
0
Digetix
104 / 104 / 1
Регистрация: 09.04.2012
Сообщений: 651
11.02.2013, 15:11  [ТС] #3
Цитата Сообщение от V0v1k Посмотреть сообщение
Java
1
2
3
4
5
if(numbGet == 1){
   dialog.setIcon(drawable1);
} else {
   dialog.setIcon(drawable2);
}
Я такое знаю. У меня HelloItemizedOverlay идёт отдельным файлом. В него нужно передать значение numbGet == 1
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
11.02.2013, 15:53 #4
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
itemizedoverlay .setObject(myObject);
....
@Override
    protected boolean onTap(int index) {
            
       OverlayItem item = mOverlays.get(index);
       AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
       dialog.setTitle(item.getTitle());
       dialog.setMessage(item.getSnippet());
   if(myObject.get(index).getNumber("Numb") == 1){
dialog.setIcon(drawable1);
} else {
       dialog.setIcon(drawable2);
}
       dialog.setPositiveButton("ОК", 
                new DialogInterface.OnClickListener() {                 
                       public void onClick(DialogInterface dialog, int which) {
                            }});       
       dialog.show();
       return true;
    }
0
Digetix
104 / 104 / 1
Регистрация: 09.04.2012
Сообщений: 651
11.02.2013, 16:48  [ТС] #5
Цитата Сообщение от V0v1k Посмотреть сообщение
Java
1
itemizedoverlay .setObject(myObject);
Эта строка ставиться в главной активити? После
Java
1
itemizedoverlay = new HelloItemizedOverlay(drawable, MainActivity.this);
И drawable указать в главной активити или в HelloItemizedOverlay ?
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
11.02.2013, 16:51 #6
Цитата Сообщение от Digetix Посмотреть сообщение
Эта строка ставиться в главной активити? После
да.


Цитата Сообщение от Digetix Посмотреть сообщение
И drawable указать в главной активити или в HelloItemizedOverlay ?
лучше в активити.
0
Digetix
104 / 104 / 1
Регистрация: 09.04.2012
Сообщений: 651
11.02.2013, 17:43  [ТС] #7
Делаю в активити вот так:
Java
1
2
3
4
5
mapOverlays = mapView.getOverlays();
drawable = MainActivity.this.getResources().getDrawable(R.drawable.red);
drawable2 = MainActivity.this.getResources().getDrawable(R.drawable.green);
itemizedoverlay = new HelloItemizedOverlay(drawable, MainActivity.this);
itemizedoverlay.setObject(myObject);
А в HelloItemizedOverlay вот так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
protected boolean onTap(int index) {
            
       OverlayItem item = mOverlays.get(index);
       AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
       dialog.setTitle(item.getTitle());
       dialog.setMessage(item.getSnippet());
       if(myObject.get(index).getNumber("Numb") == 1){
              dialog.setIcon(drawable1);
               } else {
              dialog.setIcon(drawable2);
              }
       dialog.setPositiveButton("ОК", 
                new DialogInterface.OnClickListener() {                 
                       public void onClick(DialogInterface dialog, int which) {
                            }});       
       dialog.show();
       return true;
    }
При onTap вылетает. Как правильно myObject передать из активити в отдельный файл HelloItemizedOverlay ?
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
11.02.2013, 17:53 #8
а вы как передали?

Добавлено через 7 секунд
покажите весь код.
0
Digetix
104 / 104 / 1
Регистрация: 09.04.2012
Сообщений: 651
11.02.2013, 19:24  [ТС] #9
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
public class MainActivity extends MapActivity { 
 
List<ParseObject> myObject;
Drawable drawable, drawable2;
 
@Override
     public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main); 
       
         mapView = (MapView) findViewById(R.id.mapview);
         mapView.setBuiltInZoomControls(true);
         mapController = mapView.getController();
         mapController.setZoom(17);
         
         mapOverlays = mapView.getOverlays();
         drawable = this.getResources().getDrawable(R.drawable.red);
         drawable2 = this.getResources().getDrawable(R.drawable.green);          
         itemizedoverlay = new HelloItemizedOverlay(drawable, MainActivity.this);
         itemizedoverlay.setObject(myObject);
                                       
         ParseQuery query = new ParseQuery("MyObject");
         query.findInBackground(new FindCallback() {
           public void done(List<ParseObject> myObject, ParseException e) {
             if (e == null) {
                  
                for ( i = 0; i < myObject.size(); i++) {
                 
                 textGet = myObject.get(i).getString("Text");
                 numbGet = myObject.get(i).getNumber("Numb");
                 geo1Dub = myObject.get(i).getParseGeoPoint("location").getLatitude();
                 geo2Dub = myObject.get(i).getParseGeoPoint("location").getLongitude();
                 geo1Int = (int) (geo1Dub*1E6);
                 geo2Int = (int) (geo2Dub*1E6);
                 pointGet = new GeoPoint(geo1Int, geo2Int);
                                                  
                 OverlayItem overlayitem = new OverlayItem(pointGet, numbGet.toString(),  textGet);
                 itemizedoverlay.addOverlay(overlayitem);
                                  
                } 
               
                mapOverlays.add(itemizedoverlay);
                mapView.postInvalidate();           
             } else {
               
                 Toast.makeText(getBaseContext(), "Не работает", Toast.LENGTH_SHORT).show();
                 
             }
           }
         });  
                                  
     }    
}


HelloItemizedOverlay
Кликните здесь для просмотра всего текста
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
 
public class HelloItemizedOverlay extends ItemizedOverlay {
 
    private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
 
    List<ParseObject> myObject;
    Drawable drawable, drawable2;
    
    public HelloItemizedOverlay(Drawable defaultMarker, Context context) {        
        super(boundCenterBottom(defaultMarker));
        
        mContext = context;        
    }
 
    public void addOverlay(OverlayItem overlay) {
        mOverlays.add(overlay);
        populate();
    }
    
    @Override
    protected OverlayItem createItem(int i) {
        return mOverlays.get(i);
        
    }
 
    @Override
    public int size() {
        return mOverlays.size();
    }
    @Override
    protected boolean onTap(int index) {
            
       OverlayItem item = mOverlays.get(index);
       AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
       dialog.setTitle(item.getTitle());
       dialog.setMessage(item.getSnippet());
       if(myObject.get(index).getNumber("Numb") == 1){
              dialog.setIcon(drawable);
               } else {
              dialog.setIcon(drawable2);
              }
       dialog.setPositiveButton("ОК", 
                new DialogInterface.OnClickListener() {                 
                       public void onClick(DialogInterface dialog, int which) {
                            }});       
       dialog.show();
       return true;
    }
}
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
11.02.2013, 20:02 #10
не вижу где вы передаете drawable и drawable2, не вижу метода setObject.
0
Digetix
104 / 104 / 1
Регистрация: 09.04.2012
Сообщений: 651
11.02.2013, 20:12  [ТС] #11
Цитата Сообщение от V0v1k Посмотреть сообщение
не вижу где вы передаете drawable и drawable2, не вижу метода setObject.
Строка 5, 18 и 19 в MainActivity и в HelloItemizedOverlay строка 8.

Цитата Сообщение от V0v1k Посмотреть сообщение
не вижу метода setObject.
Java
1
2
3
public void setObject(List<ParseObject> myObject {
        
    }
Он в HelloItemizedOverlay. Его нужно заполнять?
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
11.02.2013, 23:49 #12
как все запущено. возьмите книгу по основам Java и учитесь.
0
Digetix
104 / 104 / 1
Регистрация: 09.04.2012
Сообщений: 651
11.02.2013, 23:55  [ТС] #13
Через static передавать?
0
11.02.2013, 23:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.02.2013, 23:55
Привет! Вот еще темы с ответами:

Google maps - Программирование Android
Уважаемые, подскажите что не так. Пытаюсь подключить карту. mapFragment = (SupportMapFragment) getSupportFragmentManager() ...

Google maps - Программирование Android
Здравствуйте! Недавно начал разработку приложения с использованием google maps и при первом же этапе проектирования возникли проблемы....

Google maps v2 - Программирование Android
Внезапно встала задача запилить приложение на основе сабжа. Опыта разработки под андроид нет. Эклипс установил, сделал все по инструкции...

Подключить Google Maps - Программирование Android
Добрый день подключаю Google Maps. С получением ключей и прочим проблем не возникало. Делаю как здесь сказано...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.