如何在单击时选择特定的图块并在tileview android中为其上的位图充气

时间:2015-08-12 04:41:34

标签: android tiles

我使用Tileview

使用BitMmap显示大图像

现在我希望在特定瓷砖上显示时在矩形边界显示一个圆圈。

如何点击哪个瓷砖?以及如何在该图块上方显示public class LargeImageTileViewActivity extends TileViewActivity { TileView tileView; @Override public void onCreate( Bundle savedInstanceState ) { super.onCreate( savedInstanceState ); // multiple references tileView = getTileView(); // by disabling transitions, we won't see a flicker of background color when moving between tile sets tileView.setTransitionsEnabled( false ); // size of original image at 100% scale tileView.setSize( 2835, 4289 ); // detail levels tileView.addDetailLevel( 1.000f, "tiles/painting/1000/%col%_%row%.jpg"); tileView.addDetailLevel( 0.500f, "tiles/painting/500/%col%_%row%.jpg"); tileView.addDetailLevel( 0.250f, "tiles/painting/250/%col%_%row%.jpg"); tileView.addDetailLevel( 0.125f, "tiles/painting/125/%col%_%row%.jpg"); // set scale to 0, but keep scaleToFit true, so it'll be as small as possible but still match the container tileView.setScale( 0 ); // let's use 0-1 positioning... tileView.defineRelativeBounds( 0, 0, 1, 1 ); // frame to center frameTo( 0.5, 0.5 ); tileView.addTileViewEventListener( listener ); } private TileViewEventListenerImplementation listener = new TileViewEventListenerImplementation(){ public void onTap( int x, int y ) { SampleCallout callout = new SampleCallout(LargeImageTileViewActivity.this); tileView.slideToAndCenter(x, y); //Toast.makeText(mContext, "Center " + tempStore.getCenterX() + " " + tempStore.getCenterY(), Toast.LENGTH_SHORT).show(); tileView.addCallout(callout, x, y, -0.5f, -1.0f); callout.transitionIn(); } }; }

<div class="green"></div>
<div class="green"></div>
<div class="green"></div>

1 个答案:

答案 0 :(得分:5)

从库中挖掘一下,在我看来,如果不修改代码就无法获得瓷砖(你可能不需要获得瓷砖,请参阅选项2中的更多内容),&#39;虽然它是开源的,但你可以在本地进行修改并从那里开始。

第一个选项:

首先需要修改:

https://github.com/moagrius/TileView/blob/master/src/com/qozix/tileview/detail/DetailManager.java

添加以下代码:

public DetailLevel getCurrentDetailLevel() {
    return currentDetailLevel;
}

https://github.com/moagrius/TileView/blob/master/src/com/qozix/tileview/TileView.java

public DetailManager getDetailManager() {
    return detailManager;
}

这会在DetailLevel中公开您需要的方法,例如

public LinkedList<Tile> getIntersections()

这将返回当前视图端口中的Tiles,每个tile都知道它由left / right和top / bottom绑定,因此您可以遍历tile并找到您单击的那个。

第二个选项(如果可能,建议使用):

由于你知道你所有事情的所有内容,你可以简单地添加HotSpots,在库中似乎HotSpots是支持点击监听器的rects。

您可以像这样添加HotSpot:

HotSpot hotSpot = new HotSpot(left, top, right, bottom);
hotSpot.setHotSpotEventListener(this);
tileView.addHotSpot(hotSpot);

 ....

 public void onHotSpotTap(HotSpot hotSpot, int x, int y){
      Do your gui update using the supplied hotSpot above
 }

更多信息: https://github.com/moagrius/TileView/blob/master/src/com/qozix/tileview/hotspots/HotSpot.java

添加圈子

图书馆支持标记,您只需添加一个图像视图,将圆圈作为标记,就像这样

ImageView view = new ImageView (this);
view.setImageResource(circleId);
tileView.addMarker (view, tile.x, tile.y);