2013-10-05 2 views
14

Есть ли способ установить положение заголовка и сообщения в представлении витрины? Я вижу, что библиотека использует функцию, чтобы найти лучшую позицию, но я хочу ее переопределить.Витрина Посмотреть текст gravity

+1

Просьба уточнить, что вы пытаетесь сказать, показать свой код, а затем объяснить проблему, которую вы получаете. –

+0

обновленный op. Все еще не нашли способ сделать это. – arayray

+0

Представленный выпуск на Showcase View github. https://github.com/Espiandev/ShowcaseView/issues/113 – arayray

ответ

8

Я только что выкопал исходный код ShowcaseView, и, похоже, нет способа построить текстовую позицию. Поэтому я добавил свои собственные изменения в библиотеку. Вот те изменения, которые я сделал:

В классе ShowcaseView добавлены следующие поля:

private boolean hasManualPostion = false; 
private int xPosition, yPosition, width; 

Тогда в Builder класс, который является внутренним классом в ShowcaseView классе, добавить эти методы:

 public Builder hasManualPosition(boolean hasManualPosition) { 
     showcaseView.hasManualPostion = hasManualPosition; 
     return this; 
    } 

    public Builder xPostion(int xPostion) { 
     showcaseView.xPosition = xPostion; 
     return this; 
    } 

    public Builder yPostion(int yPostion) { 
     showcaseView.yPosition = yPostion; 
     return this; 
    } 

После этого добавьте этот метод в класс TextDrawer:

public void setTestPostionManually(int xPosition, int yPosition) { 
    mBestTextPosition[0] = xPosition; 
    mBestTextPosition[1] = yPosition; 
} 

и на изменение onPreDraw метода конца в ShowcaseView выглядеть следующим образом:

@Override 
public boolean onPreDraw() { 
    boolean recalculatedCling = showcaseAreaCalculator.calculateShowcaseRect(showcaseX, showcaseY, showcaseDrawer); 
    boolean recalculateText = recalculatedCling || hasAlteredText; 
    if (recalculateText) { 
     textDrawer.calculateTextPosition(getMeasuredWidth(), getMeasuredHeight(), this, shouldCentreText); 
     if (hasManualPostion) { 
      textDrawer.setTestPostionManually(xPosition, yPosition); 
     } 
    } 
    hasAlteredText = false; 
    return true; 
} 

Теперь вы должны создать ShowcaseView так:

sv = new ShowcaseView.Builder(this, true) 
       .setTarget(target) 
       .setContentTitle(R.string.showcase_main_title) 
       .setContentText(R.string.showcase_main_message) 
       .setStyle(R.style.CustomShowcaseTheme2) 
       .setShowcaseEventListener(this) 
       .hasManualPosition(true) 
       .xPostion(0) 
       .yPostion(240) 
       .build(); 

Наслаждайтесь!

+0

какая версия? любая идея, как заставить ее работать в наследии? –

+1

Модификация для версии 5.0.0 – Sadegh

+0

Знаете ли вы, каким образом можно привести анимацию руки в 5.0.0? –