Android Open Source - android-mapviewballoons Balloon Overlay View






From Project

Back to project page android-mapviewballoons.

License

The source code is released under:

Apache License

If you think the Android project android-mapviewballoons listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/***
 * Copyright (c) 2010 readyState Software Ltd
 * // ww  w .  j  av a 2s.  c om
 * Licensed under the Apache License, Version 2.0 (the "License"); you may
 * not use this file except in compliance with the License. You may obtain
 * a copy of the License at
 * http://www.apache.org/licenses/LICENSE-2.0
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * 
 */

package com.readystatesoftware.mapviewballoons;

import android.content.Context;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.google.android.maps.OverlayItem;

/**
 * A view representing a MapView marker information balloon.
 * 
 * @author Jeff Gilfelt
 *
 */
public class BalloonOverlayView<Item extends OverlayItem> extends FrameLayout {

  private LinearLayout layout;
  private TextView title;
  private TextView snippet;

  /**
   * 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);

    setPadding(10, 0, 10, balloonBottomOffset);
    
    layout = new LimitLinearLayout(context);
    layout.setVisibility(VISIBLE);

    setupView(context, layout);

    FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
        LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    params.gravity = Gravity.NO_GRAVITY;

    addView(layout, params);

  }

  /**
   * Inflate and initialize the BalloonOverlayView UI. Override this method
   * to provide a custom view/layout for the balloon. 
   * 
   * @param context - The activity context.
   * @param parent - The root layout into which you must inflate your view.
   */
  protected void setupView(Context context, final ViewGroup parent) {
    
    LayoutInflater inflater = (LayoutInflater) context
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View v = inflater.inflate(R.layout.balloon_overlay, parent);
    title = (TextView) v.findViewById(R.id.balloon_item_title);
    snippet = (TextView) v.findViewById(R.id.balloon_item_snippet);
    
  }
  
  /**
   * Sets the view data from a given overlay item.
   * 
   * @param item - The overlay item containing the relevant view data. 
   */
  public void setData(Item item) {
    layout.setVisibility(VISIBLE);
    setBalloonData(item, layout);
  }
  
  /**
   * Sets the view data from a given overlay item. Override this method to create
   * your own data/view mappings.
   * 
   * @param item - The overlay item containing the relevant view data.
   * @param parent - The parent layout for this BalloonOverlayView.
   */
  protected void setBalloonData(Item item, ViewGroup parent) {
    if (item.getTitle() != null) {
      title.setVisibility(VISIBLE);
      title.setText(item.getTitle());
    } else {
      title.setText("");
      title.setVisibility(GONE);
    }
    if (item.getSnippet() != null) {
      snippet.setVisibility(VISIBLE);
      snippet.setText(item.getSnippet());
    } else {
      snippet.setText("");
      snippet.setVisibility(GONE);
    }
  }
  
  private class LimitLinearLayout extends LinearLayout {

      private static final int MAX_WIDTH_DP = 280;
      
      final float SCALE = getContext().getResources().getDisplayMetrics().density;

      public LimitLinearLayout(Context context) {
          super(context);
      }

      public LimitLinearLayout(Context context, AttributeSet attrs) {
          super(context, attrs);
      }

      @Override
      protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
          int mode = MeasureSpec.getMode(widthMeasureSpec);
          int measuredWidth = MeasureSpec.getSize(widthMeasureSpec);
          int adjustedMaxWidth = (int)(MAX_WIDTH_DP * SCALE + 0.5f);
          int adjustedWidth = Math.min(measuredWidth, adjustedMaxWidth);
          int adjustedWidthMeasureSpec = MeasureSpec.makeMeasureSpec(adjustedWidth, mode);
          super.onMeasure(adjustedWidthMeasureSpec, heightMeasureSpec);
      }
  }

}




Java Source Code List

com.readystatesoftware.maps.OnSingleTapListener.java
com.readystatesoftware.maps.TapControlledMapView.java
com.readystatesoftware.mapviewballoons.BalloonItemizedOverlay.java
com.readystatesoftware.mapviewballoons.BalloonOverlayView.java
mapviewballoons.Main.java
mapviewballoons.example.custom.CustomBalloonOverlayView.java
mapviewballoons.example.custom.CustomItemizedOverlay.java
mapviewballoons.example.custom.CustomMap.java
mapviewballoons.example.custom.CustomOverlayItem.java
mapviewballoons.example.simple.SimpleItemizedOverlay.java
mapviewballoons.example.simple.SimpleMap.java
mapviewballoons.example.tapcontrolled.TapControlledMap.java