Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.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 调整位图大小以适合其他位图_Android_Bitmap - Fatal编程技术网

Android 调整位图大小以适合其他位图

Android 调整位图大小以适合其他位图,android,bitmap,Android,Bitmap,我在显示位图时遇到问题。我有一个位图(标记),它是从资源中加载并放置在地图上的,我从服务器下载具有特定尺寸的位图(化身)。然后我把化身放在标记的中心。结果是,在一部手机上,每件事都很好,但在另一部手机上,化身比标记器大 我该怎么办 这样做希望对你有帮助 googleMap.addMarker(new MarkerOptions().title(markerData.get(USER_NAME)) .icon(BitmapDescriptor

我在显示位图时遇到问题。我有一个位图(标记),它是从资源中加载并放置在地图上的,我从服务器下载具有特定尺寸的位图(化身)。然后我把化身放在标记的中心。结果是,在一部手机上,每件事都很好,但在另一部手机上,化身比标记器大


我该怎么办

这样做希望对你有帮助

googleMap.addMarker(new MarkerOptions().title(markerData.get(USER_NAME))
                            .icon(BitmapDescriptorFactory.fromBitmap(combineImages(BitmapFactory.decodeResource(getResources(), R.drawable.your_pin_marker_from_resorece), bitmapAvatar)))
                            .position(new LatLng(Double.parseDouble(markerData.get(USER_LAT)), Double.parseDouble(markerData.get(USER_LONG)))));
Combile图像

public Bitmap combineImages(Bitmap frame, Bitmap image) {
         Bitmap bitmapCreate = null;
            Bitmap bitmapScale = null;
        bitmapScale = Bitmap.createScaledBitmap(image, convertSizeToDeviceDependent(45), convertSizeToDeviceDependent(40), true);

        bitmapCreate = Bitmap.createBitmap(frame.getWidth(), frame.getHeight(), Bitmap.Config.ARGB_8888);

        Canvas comboImage = new Canvas(bitmapCreate);

        comboImage.drawBitmap(bitmapScale, convertSizeToDeviceDependent(7), convertSizeToDeviceDependent(7), null);
        comboImage.drawBitmap(frame, 0, 0, null);
        if (frame != null) {
            try {
                bitmapScale.recycle();
                frame.recycle();
                image.recycle();
                bitmapScale = null;
                frame = null;
                image = null;
            } catch (Throwable e) {
            }
        }
        return bitmapCreate;
    }


public int convertSizeToDeviceDependent(int value) {
        DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);
        return ((dm.densityDpi * value) / 160);
    }

你需要合并两个位图,然后将单个位图作为标记。你能给我解释一下convertSizeToDeviceDependent(int-value)方法吗?因为Android设备有很多分辨率和屏幕大小。所以,若我直接添加45个硬编码,它将不会在所有设备中提供相同的输出。这就是为什么这个方法将45转换为设备分辨率和屏幕大小。