// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov. // Jad home page: http://www.kpdus.com/jad.html // Decompiler options: packimports(3) // Source File Name: DraggableOverlay.java package com.bocai.map; import android.graphics.Point; import android.graphics.drawable.Drawable; import android.view.*; import android.widget.ImageView; import android.widget.ScrollView; import com.google.android.maps.*; import java.util.*; public class DraggableOverlay extends ItemizedOverlay { public DraggableOverlay(Drawable drawable, ImageView imageview) { super(drawable); boundCenterBottom(drawable); items = new ArrayList(); draggedItem = null; scrollView = null; wasDragged = false; defaultMarker = drawable; draggableView = imageview; draggableParent = (View)draggableView.getParent(); markerAnchorX = imageview.getDrawable().getIntrinsicWidth() / 2; markerAnchorY = imageview.getDrawable().getIntrinsicHeight(); yOff = 0; xOff = 0; tmpPoint = new Point(0, 0); ViewParent viewparent = imageview.getParent(); do { if(viewparent == null) return; if(viewparent != null && (viewparent instanceof ScrollView)) { scrollView = (ScrollView)viewparent; return; } viewparent = viewparent.getParent(); } while(true); } private void moveDraggableTo(int i, int j) { android.view.ViewGroup.LayoutParams layoutparams = draggableView.getLayoutParams(); if(layoutparams instanceof com.google.android.maps.MapView.LayoutParams) { com.google.android.maps.MapView.LayoutParams layoutparams1 = (com.google.android.maps.MapView.LayoutParams)layoutparams; int k = xOff; int l = i - k; layoutparams1.x = l; int i1 = yOff; int j1 = j - i1; layoutparams1.y = j1; draggableView.setLayoutParams(layoutparams1); return; } if(!(layoutparams instanceof android.view.ViewGroup.MarginLayoutParams)) { return; } else { int i2 = draggableParent.getHeight() - draggableView.getHeight(); int k2 = j - markerAnchorY; int i3 = Math.min(k2 - yOff, i2); android.view.ViewGroup.MarginLayoutParams marginlayoutparams = (android.view.ViewGroup.MarginLayoutParams)layoutparams; int k3 = i - markerAnchorX; int i4 = k3 - xOff; marginlayoutparams.setMargins(i4, i3, 0, 0); draggableView.setLayoutParams(marginlayoutparams); return; } } public void add(GeoPoint geopoint, String s, String s1) { OverlayItem overlayitem = new OverlayItem(geopoint, s, s1); items.add(overlayitem); populate(); } public void centerOnDraggable(MapView mapview, boolean flag) { if(items == null) return; if(items.size() <= 0) return; GeoPoint geopoint = ((OverlayItem)items.get(0)).getPoint(); int i; int j; if(flag) mapview.getController().animateTo(geopoint); else mapview.getController().setCenter(geopoint); i = draggableParent.getWidth() / 2; j = draggableParent.getHeight() / 2; yOff = 0; xOff = 0; moveDraggableTo(i, j); } public void clear() { items.clear(); populate(); } protected OverlayItem createItem(int i) { return (OverlayItem)items.get(i); } public boolean onTouchEvent(MotionEvent motionevent, MapView mapview) { int i = motionevent.getAction(); int j = (int)motionevent.getX(); int k = (int)motionevent.getY(); boolean flag = false; boolean flag2; if(i == 0) { Iterator iterator = items.iterator(); do { if(!iterator.hasNext()) break; OverlayItem overlayitem = (OverlayItem)iterator.next(); Projection projection = mapview.getProjection(); GeoPoint geopoint = overlayitem.getPoint(); Point point = tmpPoint; projection.toPixels(geopoint, point); Drawable drawable = defaultMarker; int i1 = j - tmpPoint.x; int k1 = k - tmpPoint.y; if(!hitTest(overlayitem, drawable, i1, k1)) continue; flag = true; draggedItem = overlayitem; items.remove(draggedItem); populate(); xOff = 0; yOff = 0; moveDraggableTo(tmpPoint.x, tmpPoint.y); draggableView.setVisibility(0); xOff = j - tmpPoint.x; yOff = k - tmpPoint.y; break; } while(true); if(scrollView != null) scrollView.requestDisallowInterceptTouchEvent(true); } else if(i == 2 && draggedItem != null) { moveDraggableTo(j, k); flag = true; } else if(i == 1 && draggedItem != null) { wasDragged = true; Projection projection1 = mapview.getProjection(); int k3 = j - xOff; int i4 = k - yOff; GeoPoint geopoint1 = projection1.fromPixels(k3, i4); OverlayItem overlayitem2 = new OverlayItem(geopoint1, draggedItem.getTitle(), draggedItem.getSnippet()); items.add(overlayitem2); populate(); draggedItem = null; flag = true; moveDraggableTo(j, k); draggableView.setVisibility(8); } if(flag) flag2 = true; else flag2 = super.onTouchEvent(motionevent, mapview); return flag2; } public int size() { return items.size(); } private Drawable defaultMarker; private View draggableParent; private View draggableView; private OverlayItem draggedItem; private List items; private int markerAnchorX; private int markerAnchorY; private ScrollView scrollView; private Point tmpPoint; public boolean wasDragged; private int xOff; private int yOff; }