首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在android磁贴视图中选择特定的磁贴,并在磁贴上放大位图

如何在android磁贴视图中选择特定的磁贴,并在磁贴上放大位图
EN

Stack Overflow用户
提问于 2015-08-12 12:41:34
回答 1查看 557关注 0票数 18

我展示了一张使用TileviewTileView库的大图

现在我想在矩形边界上显示一个圆圈,当它被裁剪在特定的瓷砖上时。

如何在哪个磁贴上点击?以及如何在该磁贴上显示 BitMmap

代码语言:javascript
复制
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();
        }
    };
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-18 05:29:23

根据对库的深入研究,在我看来,如果不修改代码,您将无法获得磁贴(虽然您可能不需要获得磁贴,请参阅选项2中的更多内容),但这是可行的,因为它是开源的,所以您可以在本地进行修改并从那里开始。

First选项:

您需要的第一个修改:

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

添加以下代码:

代码语言:javascript
复制
public DetailLevel getCurrentDetailLevel() {
    return currentDetailLevel;
}

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

代码语言:javascript
复制
public DetailManager getDetailManager() {
    return detailManager;
}

这将公开您在DetailLevel中所需的方法,例如

代码语言:javascript
复制
public LinkedList<Tile> getIntersections()

它将返回当前视图端口中的平铺,每个平铺都知道它的边界是左/右和上/下,所以你可以迭代平铺并找到你点击的那个。

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

既然你知道所有东西的rects,你可以简单地添加HotSpots,在库中HotSpots看起来是支持点击监听器的rects。

您可以像这样添加HotSpot:

代码语言:javascript
复制
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

添加圆形的

该库支持标记,您可以简单地添加一个以圆作为标记的图像视图,如下所示

代码语言:javascript
复制
ImageView view = new ImageView (this);
view.setImageResource(circleId);
tileView.addMarker (view, tile.x, tile.y);
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31956190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档