2013-10-05 11 views
14

C'è un modo per impostare la posizione del titolo e del messaggio in una vista di Showcase? Vedo che la libreria utilizza una funzione per trovare la posizione migliore ma voglio sovrascriverla.Showcase Visualizza il testo gravità

+1

Si prega di elaborare quello che stai cercando di dire, mostrare il codice e quindi spiegare il problema che si sta ottenendo. –

+0

aggiornato op. Non ho ancora trovato un modo per farlo. – arayray

+0

Problema inviato su Showcase Visualizza github. https://github.com/Espiandev/ShowcaseView/issues/113 – arayray

risposta

8

Ho appena inserito il codice sorgente ShowcaseView e sembra che non vi sia alcun modo per incorporare la posizione del testo. Così ho aggiunto la mia modifica alla libreria. Ecco i cambiamenti che ho fatto:

In classe ShowcaseView aggiunti questi campi:

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

Poi nella classe Builder che è classe interna in ShowcaseView classe, aggiungere i seguenti metodi:

 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; 
    } 

Dopo di che, aggiungere questo metodo nella classe TextDrawer:

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

e alla fine cambiamento onPreDraw metodo ShowcaseView di simile a questa:

@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; 
} 

Ora è necessario creare ShowcaseView come questo:

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

Enjoy!

+0

quale versione è questa? qualche idea su come farlo funzionare in eredità? –

+1

La modifica è per la versione 5.0.0 – Sadegh

+0

conosci qualche modo per portare l'animazione a mano in 5.0.0? –

Problemi correlati