从该URL中获取的资源绘制内显示标记标记、资源、URL

2023-09-06 04:37:27 作者:半夏微凉、暖冬依旧

下面的地图页面我,这说明我的应用程序的所有用户。另外,图像(标记)是从我的服务器提供的URL获得。这些标记具有把一个可绘制里面(一般的图像圈为示出)。我使用画布的URL创建位图一样的圆。

Here is the map page I have, which shows all the users of my App. Also the images(markers) are obtained from the URL given from my server. These markers has to put inside a Drawable(a circle like image as shown). I created a circle like Bitmap from the url using Canvas.

    public Drawable showMe(String url)
    {
        Bitmap bitmap=null;
         try {
                URL newurl = new URL(url);
                bitmap = BitmapFactory.decodeStream(newurl.openConnection().getInputStream());
            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } 
        bitmap=getBitmap(url);
        Paint paint = new Paint();
           paint.setFilterBitmap(true);
           int targetWidth  = 30;
           int targetHeight = 30;
           Bitmap targetBitmap = Bitmap.createBitmap(targetWidth, targetHeight,Bitmap.Config.ARGB_8888);
           RectF rectf = new RectF(0, 0, 30, 30);
           Canvas canvas = new Canvas(targetBitmap);
           Path path = new Path();
          path.addRoundRect(rectf, targetWidth, targetHeight, Path.Direction.CW);
        canvas.clipPath(path);
          canvas.drawBitmap( bitmap, new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()),
                           new Rect(0, 0, targetWidth, targetHeight), paint);

           Matrix matrix = new Matrix();
           matrix.postScale(1f, 1f);
           Bitmap resizedBitmap = Bitmap.createBitmap(targetBitmap, 0, 0, 30, 30, matrix, true);
           Bitmap bitmap_circle=mergeBitmaps(resizedBitmap);
           BitmapDrawable bd = new BitmapDrawable(bitmap_circle);



          return bd;
    }

上述功能将创建最终可绘为marker.Also的mergeBitmaps()函数合并两者的资源抽拉及位映像一起..

The above function will create the final drawable for the marker.Also the mergeBitmaps() function merge the both the resource drawable and the bit map together..

public Bitmap mergeBitmaps(Bitmap manBitmap){

            try{

                Bitmap markerBitmap = BitmapFactory.decodeResource( this.getResources(), R.drawable.circle_bg);
                Bitmap bmOverlay = Bitmap.createBitmap(markerBitmap.getWidth(), markerBitmap.getHeight(), markerBitmap.getConfig());
                Canvas canvas = new Canvas(bmOverlay);
                Matrix matrix = new Matrix();
                matrix.postScale(1f, 1f);
                canvas.drawBitmap(markerBitmap, matrix, null);
                canvas.drawBitmap(manBitmap, 5, 5, null);
                return bmOverlay;

            }
            catch(Exception ex){
                ex.printStackTrace();
                return null;
            }

        }

但问题是,这种位图不是为了得到一种感觉,两者一起将使单个图像的背景可绘制内最适合。

But the problem is, this bitmap is not best fit inside the background Drawable in order to get a feeling that both together will give a single image.

谁能帮我?

推荐答案

变更

canvas.drawBitmap(manBitmap, 5, 5, null);

要smtg像

canvas.drawBitmap(manBitmap, (markerBitmap.getWidth()-manbitmap.getWidth())/2, 
    (markerBitmap.getHeight()-manbitmap.getHeight())/2, null);