
com.qozix.tileview.detail.DetailLevel Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of TileView Show documentation
Show all versions of TileView Show documentation
The TileView widget is a subclass of ViewGroup that provides a mechanism to asynchronously display tile-based images, with additional functionality for 2D dragging, flinging, pinch or double-tap to zoom, adding overlaying Views (markers), built-in Hot Spot support, dynamic path drawing, multiple levels of detail, and support for any relative positioning or coordinate system.
The newest version!
package com.qozix.tileview.detail;
import java.util.LinkedList;
import android.graphics.Rect;
import android.util.Log;
import com.qozix.tileview.tiles.Tile;
public class DetailLevel implements Comparable {
private static final int DEFAULT_TILE_SIZE = 256;
private double scale;
private int tileWidth = DEFAULT_TILE_SIZE;
private int tileHeight = DEFAULT_TILE_SIZE;
private String pattern;
private String downsample;
private DetailManager detailManager;
private Rect viewport = new Rect();
public DetailLevel( DetailManager zm, float s, String p, String d, int tw, int th ) {
detailManager = zm;
scale = s;
pattern = p;
downsample = d;
tileWidth = tw;
tileHeight = th;
}
public DetailLevel( DetailManager zm, float s, String p, String d ) {
this( zm, s, p, d, DEFAULT_TILE_SIZE, DEFAULT_TILE_SIZE );
}
public LinkedList getIntersections() {
double relativeScale = getRelativeScale();
int drawableWidth = (int) ( detailManager.getWidth() * getScale() * relativeScale );
int drawableHeight = (int) ( detailManager.getHeight() * getScale() * relativeScale );
double offsetWidth = ( tileWidth * relativeScale );
double offsetHeight = ( tileHeight * relativeScale );
LinkedList intersections = new LinkedList();
viewport.set( detailManager.getComputedViewport() );
// TODO test if mins are right
viewport.top = Math.max( viewport.top, 0 );
viewport.left = Math.max( viewport.left, 0 );
viewport.right = Math.min( viewport.right, drawableWidth );
viewport.bottom = Math.min( viewport.bottom, drawableHeight );
int startingRow = (int) Math.floor( viewport.top / offsetHeight );
int endingRow = (int) Math.ceil( viewport.bottom / offsetHeight );
int startingColumn = (int) Math.floor( viewport.left / offsetWidth );
int endingColumn = (int) Math.ceil( viewport.right / offsetWidth );
DetailLevelPatternParser parser = detailManager.getDetailLevelPatternParser();
for ( int iterationRow = startingRow; iterationRow < endingRow; iterationRow++ ) {
for ( int iterationColumn = startingColumn; iterationColumn < endingColumn; iterationColumn++ ) {
String fileName = parser.parse( pattern, iterationRow, iterationColumn );
int left = iterationColumn * tileWidth;
int top = iterationRow * tileHeight;
Tile tile = new Tile( left, top, tileWidth, tileHeight, fileName );
intersections.add( tile );
}
}
return intersections;
}
public double getScale(){
return scale;
}
public double getRelativeScale(){
return detailManager.getScale() / scale;
}
public int getTileWidth() {
return tileWidth;
}
public int getTileHeight() {
return tileHeight;
}
public String getPattern() {
return pattern;
}
public String getDownsample() {
return downsample;
}
@Override
public int compareTo( DetailLevel o ) {
return (int) Math.signum( getScale() - o.getScale() );
}
@Override
public boolean equals( Object o ) {
if ( o instanceof DetailLevel ) {
DetailLevel zl = (DetailLevel) o;
return ( zl.getScale() == getScale() );
}
return false;
}
@Override
public int hashCode() {
long bits = ( Double.doubleToLongBits( getScale() ) * 43 );
return ( ( (int) bits ) ^ ( (int) ( bits >> 32 ) ) );
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy