【问题标题】:android - image has different sizes on different phonesandroid - 图像在不同的手机上有不同的尺寸
【发布时间】:2016-05-14 09:28:29
【问题描述】:

我有一个与 Facebook SDK 和谷歌地图 API 配合使用的应用程序。

HomeActivity 上,我获取了用户头像并将其作为标记在谷歌地图上绘制。

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));
}

我的问题是 - 当我在不同的设备(例如 OnePlusOnesamsung gt-18190)上运行应用程序时,它会绘制samsung gt-18190 设备上的图像更大(奇怪的是,更小)。

我在loadProfilePicture方法中检查了picUrl,它们在chrome上看起来都一样,但在不同的设备上,尺寸不同。

我做错了什么?

【问题讨论】:

    标签: android image bitmap google-maps-markers picasso


    【解决方案1】:

    三星的像素密度是 OnePlusOne 的一半(~233ppi vs ~401ppi),所以如果您在任一手机上加载的位图分辨率相同,三星上会显得更大。

    您可以做的是获取从 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));
        }
    

    【讨论】:

    • 我明白了,谢谢你的回答。如何使该方法适用于所有设备?意思是如何确保该方法将在所有手机上绘制相同大小的图像?
    • 更新了答案,并举例说明了如何做到这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多