【问题标题】:Image with border in map overlay using android使用android在地图叠加层中带有边框的图像
【发布时间】:2011-12-07 17:09:30
【问题描述】:

我显示此链接,但答案只是显示气球。

Picture with a border as a map overlay

但我发现就像带有边框的显示图像......像这样。

如果有人知道如何做到这一点,请帮助我。

我已完成在地图中显示 3-5 幅图像。但现在我只想显示带有边框的图像。

提前致谢。

【问题讨论】:

    标签: android map overlay


    【解决方案1】:

    你需要像这样创建图像

    这是 9 补丁图像。

    现在您需要创建自定义布局来处理此自定义布局文件以显示气球

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:orientation="horizontal" 
        android:paddingBottom="35dip"
        android:paddingLeft="10dip"  
        android:id="@+id/balloon_main_layout"
        android:background="@drawable/balloon_overlay_bg_selector" 
        android:paddingTop="0dip"
        android:paddingRight="0dip">
           <ImageView android:layout_width="wrap_content"
            android:layout_height="wrap_content" 
            android:src="@drawable/your_default_image"
            android:id="@+id/img_button" 
            android:paddingLeft="10dip"
            android:paddingBottom="10dip" 
            android:paddingRight="8dip"
            android:paddingTop="8dip"></ImageView>
    </LinearLayout>
    

    现在您可以创建这种类型的图像并设置为布局背景,并在该图像视图中根据您的要求显示不同的图像

    【讨论】:

      【解决方案2】:

      这里有一些画圆的代码:

      private class ProximityOverlay extends Overlay {
      
          public void draw(Canvas canvas, MapView mapview, boolean b) {
              // draw some stuff in here, like
              Paint paint = new Paint();
              paint.setAntiAlias(true);
              paint.setStrokeWidth(2.0f);
              double latitude = location.getLatitude();
              double longitude = location.getLongitude();
              Projection projection = mapView.getProjection();
              GeoPoint leftGeo = new GeoPoint((int) (latitude * 1e6),
                      (int) (longitude * 1e6));
              Point left = new Point();
              projection.toPixels(leftGeo, left);
      
              paint.setColor(Color.parseColor("#00CCFF"));
              paint.setStyle(Style.FILL);
              canvas.drawCircle(left.x, left.y, 9, paint);
              paint.setColor(Color.parseColor("#003399"));
              paint.setStyle(Style.STROKE);
              canvas.drawCircle(left.x, left.y, 10, paint);
      
      
      
          }
      

      你可以修改它来画一个黑色的矩形:

      canvas.drawRect(left, top, right, bottom, paint);
      

      【讨论】:

        【解决方案3】:

        按照here 中的建议创建一个类 BalloonItemizedOverlay

        并根据需要创建 xml 以显示覆盖(例如,我已经创建了这样的)

            <?xml version="1.0" encoding="utf-8"?>
        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content"
            android:orientation="horizontal" 
            android:paddingBottom="5dip"
            android:paddingLeft="5dip" 
        
            android:id="@+id/balloon_main_layout"
            android:background="@drawable/popupbg"
            android:paddingTop="0dip"
            >
        <ImageView android:layout_width="40dp"
                android:layout_height="40dp" 
        
                android:id="@+id/diseaseImg" 
                android:padding="5dp"
                android:layout_gravity="center_vertical"
                ></ImageView>
            <LinearLayout 
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content"
                android:orientation="vertical" 
                android:layout_weight="1"
                android:paddingTop="10dip" 
                android:paddingRight="30dip"
                android:id="@+id/balloon_inner_layout">
                <TextView android:layout_height="wrap_content"
                    android:layout_width="wrap_content" 
                    android:id="@+id/balloon_item_title"
                    android:text="balloon_item_title" 
                    android:layout_marginLeft="2dp"
                    android:textSize="14dip"
                    android:paddingBottom="5dp"
                    android:textColor="#FF000000"></TextView>
        
            </LinearLayout>
        
            <ImageView android:layout_width="30dp"
                android:layout_height="30dp" 
                android:src="@android:drawable/ic_menu_close_clear_cancel"
                android:id="@+id/close_img_button" 
                android:layout_gravity="right"
                android:paddingLeft="10dip"
                android:paddingBottom="10dip" 
                android:paddingRight="8dip"
                android:paddingTop="2dip"></ImageView>
        
        </LinearLayout>
        

        并像下面一样创建类 BalloonOverlayView

        import android.app.Activity;
        import android.content.Context;
        import android.content.Intent;
        import android.view.Gravity;
        import android.view.LayoutInflater;
        import android.view.View;
        import android.widget.FrameLayout;
        import android.widget.ImageView;
        import android.widget.LinearLayout;
        import android.widget.TextView;
        import android.widget.ImageView.ScaleType;
        
        import com.google.android.maps.OverlayItem;
        import com.healthcarealert.R;
        
        
        
        public class BalloonOverlayView extends FrameLayout {
        
            private LinearLayout layout;
            private TextView title;
            private TextView snippet;
            private ImageView diseaseImg;
            public static boolean isPopupClicked = false;
            private Context con = null;
            /**
             * Create a new BalloonOverlayView.
             * 
             * @param context - The activity context.
             * @param balloonBottomOffset - The bottom padding (in pixels) to be applied
             * when rendering this view.
             */
            public BalloonOverlayView(Context context, int balloonBottomOffset) {
        
                super(context);
                this.con =context;
                setPadding(10, 0, 10, balloonBottomOffset);
                layout = new LinearLayout(context);
                layout.setVisibility(VISIBLE);
        
                LayoutInflater inflater = (LayoutInflater) context
                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                View v = inflater.inflate(R.layout.balloon_map_overlay, layout);
                title = (TextView) v.findViewById(R.id.balloon_item_title);
            //  snippet = (TextView) v.findViewById(R.id.balloon_item_snippet);
                diseaseImg = (ImageView)v.findViewById(R.id.diseaseImg);
                ImageView close = (ImageView) v.findViewById(R.id.close_img_button);
                close.setOnClickListener(new OnClickListener() {
                    public void onClick(View v) {
                        layout.setVisibility(GONE);
                    }
                });
        
                FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
                        LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
                params.gravity = Gravity.NO_GRAVITY;
        
                addView(layout, params);
        
            }
        
            /**
             * Sets the view data from a given overlay item.
             * 
             * @param item - The overlay item containing the relevant view data 
             * (title and snippet). 
             */
            public void setData(OverlayItem item) {
        
                layout.setVisibility(VISIBLE);
                if (item.getTitle() != null) {
                    title.setVisibility(VISIBLE);
                    title.setText(item.getTitle());
                } else {
                    title.setVisibility(GONE);
                }
                /*if (item.getSnippet() != null) {
                    snippet.setVisibility(VISIBLE);
                    snippet.setText(item.getSnippet());
        
                } else {
                    snippet.setVisibility(GONE);
                }*/
            }   
        
        public void setImage(String item) {
        
                layout.setVisibility(VISIBLE);
                if (item != null) {
                    diseaseImg.setVisibility(VISIBLE);
                    ImageLoader imageLoader =  new ImageLoader(this.con);;
                    diseaseImg.setTag("http://healthcarealert.com/healthcaretest/" + item);
                    diseaseImg.setScaleType(ScaleType.FIT_XY);
        
        
                        imageLoader.DisplayImage("http://healthcarealert.com/healthcaretest/" + item,
                                HotSpotsMapActivity.activity,   diseaseImg);
        
        
        
                } else {
                    diseaseImg.setVisibility(GONE);
                }
        }
        }
        

        这个类有方法 setImage(String item)

        其中字符串包含图片的 URL

        在带有图片url路径的HelloItemised覆盖的onTap方法中调用此方法

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-05-23
          • 2019-10-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-11-26
          相关资源
          最近更新 更多