Подтвердить что ты не робот

Как выбрать конкретную плиту при щелчке и раздувать растровое изображение на ней в андроиде tileview

Я показываю большое изображение, используя Tileview, используя 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 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();
        }
    };
}
4b9b3361

Ответ 1

От копания в библиотеке немного мне кажется, что вы не сможете получить плитку, не изменяя код (возможно, вам не нужно будет получать плитку, см. больше в опции 2), что можно сделать, хотя как это открытый исходный код, поэтому вы можете внести свои изменения локально и перейти оттуда.

Первый вариант:

Требуется первая модификация:

В 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()

Который вернет Плитки в вашем текущем порт представления, каждая плитка знает, что это границы слева/справа и сверху/снизу, поэтому вы можете прокручивать плитки и находить тот, на который вы нажали.

Второй вариант (рекомендуется по возможности):

Поскольку вы знаете, что для всех ваших вещей вы можете просто добавить HotSpots, в библиотеке кажется, что HotSpots - это исправления, которые поддерживают прослушиватели кликов.

Вы можете добавить 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);