Radar.java :  » App » quaddroid » com » magnitude » gui » Android Open Source

Android Open Source » App » quaddroid 
quaddroid » com » magnitude » gui » Radar.java
package com.magnitude.gui;

import java.util.Enumeration;
import java.util.Vector;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Region;
import android.view.MotionEvent;
import android.widget.Toast;

import com.magnitude.ARKitapi.MagnitudeStaticView;
import com.magnitude.ARKitapi.ARLayout;
import com.magnitude.ARKitapi.ARSphericalView;
import com.magnitude.app.R;
import com.magnitude.libs.MagnitudePOI;

public class Radar extends MagnitudeStaticView{
  
  private int icon;
  private Bitmap image;
  private Resources res = getResources();
  private ARLayout ar; 
  
  // List of all POI on the radar
  private Vector<PoiRadar> Pois = new Vector<PoiRadar>();
  
  public Radar(Context ctx, ARLayout ar) {
    super(ctx);
    setAr(ar);
    setIcon(R.drawable.radar);
  }
  
  /**
   * Update of the vector status. If a POI is visible, then we add it.
   */
  public void update() {
    Enumeration<ARSphericalView> e = getAr().getArViews().elements();
    Pois = new Vector<PoiRadar>();
    while(e.hasMoreElements())
    {
      ARSphericalView view = e.nextElement();
      if(((MagnitudePOI)view).isVisibleDist()) {
        float alpha = view.getAzimuth()-ar.getDirection();
        if(alpha > 0) alpha = 360 - alpha;
        else alpha = -alpha ;
        Pois.add(new PoiRadar(getCtx(),this.getX()+this.getImage().getWidth()/2,this.getY()+this.getImage().getWidth()/2,alpha,(view.getDistance()*(this.getImage().getWidth()/2))/ar.getMaxDistance()));
      }
    }
  }
  
  public void updateLayout() {
    layout((int)getX(),(int)getY(),(int)getX()+getImage().getWidth(),(int)getY()+getImage().getHeight());  
  }
  
  @Override
  public void draw(Canvas c)
  {
    if(isVisible() && getImage() != null) {
      c.drawBitmap(getImage(), getLeft(), getTop(), getP());
      Enumeration<PoiRadar> e = Pois.elements();
      while(e.hasMoreElements())
      {
        PoiRadar view = e.nextElement();
        view.draw(c);
      }    
    }
  }


  public int getIcon() {
    return icon;
  }
  
  /**
   * Set the icon, the image is updated automatically 
   * @param icone
   */
  public void setIcon(int icon) {
    this.icon = icon;
    image = BitmapFactory.decodeResource(res, icon);
  }
  
  public Bitmap getImage() {
    return image;
  }
  
  private String mOrKm(float value) {
    String result;
    float tmp = value;
    if(value > 1000) {
      tmp /= 1000;
      result = new String(""+Math.round(tmp*100)/100+" km");
    }
    else result = new String(""+Math.round(tmp)+" m");
    return result;
  }
  public boolean onTouchEvent(MotionEvent event) {
    int action = event.getAction();
        if (action == MotionEvent.ACTION_DOWN) {
          if(new Region(getLeft(),getTop(),getRight(),getBottom()).contains(
          (int)event.getX(),
          (int)event.getY())) {
        Toast.makeText(getCtx(), "Maximum distance : "+mOrKm(ar.getMaxDistance())+"\n"+Pois.size()+" Pois", Toast.LENGTH_SHORT).show();
        return true;
      }
        }
       return false;
  }

  public void setAr(ARLayout ar) {
    this.ar = ar;
  }

  public ARLayout getAr() {
    return ar;
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.