Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android-image在不同的手机上有不同的尺寸_Android_Image_Bitmap_Google Maps Markers_Picasso - Fatal编程技术网

android-image在不同的手机上有不同的尺寸

android-image在不同的手机上有不同的尺寸,android,image,bitmap,google-maps-markers,picasso,Android,Image,Bitmap,Google Maps Markers,Picasso,我有一个与Facebook SDK和谷歌地图API一起工作的应用程序 在HomeActivity上,我获得了用户配置文件图片,并将其作为标记绘制在谷歌地图上 public void loadProfilePicture(String picUrl, final Location location) { Picasso.with(getActivity()).load(picUrl).into(new Target() { @Override public

我有一个与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));
}
我的问题是-当我在不同的设备上运行应用程序时(例如,OnePlusOne三星gt-18190),它会在三星gt-18190设备上绘制图像更大

我检查了
loadProfilePicture
方法中的
picUrl
,它们在chrome上看起来大小相同,但在不同的设备上,大小不同


我做错了什么?

三星的像素密度只有OnePlusOne的一半(~233ppi vs~401ppi),因此,如果您在任何一款手机上加载的位图分辨率相同,那么它在三星手机上会显得更大

您可以做的是获取毕加索返回的位图,并使用bitmap.createScaledBitmap函数和具有一些密度无关维度的资源文件创建一个缩放版本。例如:

在资源dimen.xml文件中。(使用适用于您的应用程序的任何dp值)


三星的像素密度只有OnePlusOne的一半(~233ppi vs~401ppi),因此,如果您在任何一款手机上加载的位图的分辨率相同,那么它在三星手机上会显得更大

您可以做的是获取毕加索返回的位图,并使用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));
    }