2015-10-17 3 views
0

Да, я знаю, еще одна тема об изменении значков в osmdroid. Но нет никаких хороших объяснений!Как расширить интерфейс ResourceProxy в osmdroid?

Я сделал много исследований, и это frequently asked topic. Почему бы не дать ясный ответ на данный момент для всех пользователей, которым необходимо указать свои собственные ресурсы?

Все имеющиеся материалы - «Have a look at ResourceProxy.java» или «Передача растрового изображения в конструктор». Ни в коем случае, это не сработает для меня, я даже не знаю, как простой интерфейс может найти мой доступный в моей папке res! Я пытался передать некоторые .PNG-файлы с теми же именами, что и osmdroid (например, «person.png»), но когда я запускаю приложение, у меня все еще есть ресурс по умолчанию.

Может кто-то объяснить ясно, как писать «собственный ResourceProxy» шаг за шагом? Not brievely like that because I followed the steps and didn't manage to success.

Я знаю, что osmdroid was fixed recently в github, но .aar старше, чем исправление. Здесь вы можете найти Resource Proxy class.

ответ

1

При создании в экземпляре MapView вам необходимо передать ссылку на реализацию «ResourceProxy». По умолчанию он загружает «DefaultResourceProxyImpl». Чтобы переопределить, создайте новый класс, который расширяет DefaultResourceProxyImpl, а затем вы можете переопределить getBitmap и getDrawable. Там на самом деле пример, который переопределяет DefaultResourceProxyImpl здесь:

https://github.com/osmdroid/osmdroid/blob/master/OpenStreetMapViewer/src/main/java/org/osmdroid/ResourceProxyImpl.java

Только для вас, я работаю в том числе такой пример с osmdroid пример приложения. Это будет выглядеть как этот

public class CustomResourceProxy extends DefaultResourceProxyImpl { 

     private final Context mContext; 
     public CustomResourceProxy(Context pContext) { 
      super(pContext); 
     mContext = pContext; 
     } 

     @Override 
    public Bitmap getBitmap(final bitmap pResId) { 
     switch (pResId){ 
       case person: 
        //your image goes here!!! 
        return BitmapFactory.decodeResource(mContext.getResources(),org.osmdroid.example.R.drawable.sfgpuci); 

      } 
      return super.getBitmap(pResId); 
    } 

    @Override 
    public Drawable getDrawable(final bitmap pResId) { 
     switch (pResId){ 
       case person: 
        //your image goes here!!! 
        return mContext.getResources().getDrawable(org.osmdroid.example.R.drawable.sfgpuci); 
      } 
      return super.getDrawable(pResId); 
    } 

} 

Edit: сделано См https://github.com/osmdroid/osmdroid/blob/master/OpenStreetMapViewer/src/main/java/org/osmdroid/CustomResourceProxy.java

Edit: Edit: Wiki обновляется, см https://github.com/osmdroid/osmdroid/wiki/How-to-use-the-osmdroid-library

Смежные вопросы