2016-02-04 6 views
0

У меня есть приложение, которое работает с SDK Google и API карты google.android - изображение имеет разные размеры на разных телефонах

На HomeActivity, я получаю изображение профиля пользователя и рисую его на карте Google в качестве маркера.

public void loadProfilePicture(String picUrl, final Location location) { 
    Picasso.with(getActivity()).load(picUrl).into(new Target() { 
     @Override 
     public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { 
      drawCanvas(location, bitmap); 
     } 

     @Override 
     public void onBitmapFailed(Drawable errorDrawable) { 

     } 

     @Override 
     public void onPrepareLoad(Drawable placeHolderDrawable) { 

     } 
    }); 
} 

private void drawCanvas(Location location, Bitmap bitmap) { 
    photoMarker = getMap().addMarker(new MarkerOptions().position(new LatLng(location.getLatitude(), location.getLongitude())) 
      .icon(BitmapDescriptorFactory.fromBitmap(bitmap)) 
      .anchor(0.5f, 1)); 
} 

Моя проблема - при запуске приложения на различных устройствах (OnePlusOne и Samsung GT-18190, например), он рисует образ больше на Самсунга GT- 18190 устройство (что странно, меньше).

Я проверил picUrl в методе loadProfilePicture, и оба они выглядят одинаково на хроме, но на разных устройствах разного размера.

что я делаю неправильно?

ответ

1

Samsung имеет половину плотности пикселей OnePlusOne (~ 233ppi против ~ 401ppi), поэтому, если битмап, который вы загружаете на любом телефоне, имеет такое же разрешение, он будет больше на Samsung.

Что вы можете сделать, это взять растровое изображение, возвращенное из Picasso, и создать масштабированную версию с помощью функции Bitmap.createScaledBitmap и файла ресурсов с некоторыми независимыми от плотности измерениями. Например:

В файле ресурса dimen.xml. (Используйте любые значения dp для своей заявки)

<?xml version="1.0" encoding="utf-8"?> 
    <resources> 
     <dimen name="profile_width">200dp</dimen> 
     <dimen name="profile_height">200dp</dimen> 
    </resources> 

Внутри вашей домашней деятельности.

@Override 
    public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { 
     int width = (int) getResources().getDimension(R.dimen.profile_width); 
     int height = (int) getResources().getDimension(R.dimen.profile_height); 
     drawCanvas(location, Bitmap.createScaledBitmap(bitmap, width, height, false)); 
    } 
+0

Я вижу, спасибо за ваш ответ. Как я могу сделать метод общим для всех устройств? что означает, что метод будет рисовать изображение одинакового размера на всех телефонах? –

+0

Обновленный ответ с примером того, как вы можете это сделать. – Joopkins

+0

большое спасибо! прекрасно работает –

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