Autore Topic: ridimensionare correttamente una png creata con Draw 9-patch  (Letto 1051 volte)

Offline ScarfaceIII

  • Utente junior
  • **
  • Post: 112
  • Respect: +13
    • raferalston12
    • Mostra profilo
  • Dispositivo Android:
    Nexus One
  • Sistema operativo:
    GNU/Linux, Ubuntu 10.04 / Windows 7
ridimensionare correttamente una png creata con Draw 9-patch
« il: 21 Luglio 2010, 10:45:15 CEST »
0
Buongiorno a tutti, sto utilizzando un'implementazione custom della SeekBar | Android Developers che la orienta verticalmente (come indicato QUI). Ora, come si legge nel topic linkato, ho un problema con il ridimensionamento della barra, precisamente con il thumb: quando viene ridimensionata la barra, il thumb rimane "piccino picciò".
Ho modificato quindi il metodo onSizeChanged da come lo vedete nel topic a così:
Codice (Java): [Seleziona]
@Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        Drawable d = getCurrentDrawable();
        Drawable thumb = mThumb;
        int thumbWidth = thumb == null ? 0 : w;
        // The max height does not incorporate padding, whereas the height
        // parameter does
        int trackWidth = Math.min(mMaxWidth, w);

        int max = getMax();
        float scale = max > 0 ? (float) getProgress() / (float) max : 0;

        if (thumbWidth > trackWidth) {
            int gapForCenteringTrack = (thumbWidth - trackWidth) / 2;
            if (thumb != null) {
                setThumbPos(h, w, thumb, scale, gapForCenteringTrack * -1);
            }
            if (d != null) {
                // Canvas will be translated by the padding, so 0,0 is where we start drawing
                d.setBounds(gapForCenteringTrack, 0,
                        w - gapForCenteringTrack,
                        h - mPaddingBottom - mPaddingTop);
            }
        } else {
            if (d != null) {
                // Canvas will be translated by the padding, so 0,0 is where we start drawing
                d.setBounds(0, 0, w, h - mPaddingBottom - mPaddingTop);
            }
            int gap = (trackWidth - thumbWidth) / 2;
            if (thumb != null) {
                setThumbPos(h, w, thumb, scale, gap);
            }
        }
    }
e anche il metodo setThumbPos chiamato alla fine del metodo è cambiato da così:
Codice (Java): [Seleziona]
private void setThumbPos(int h, Drawable thumb, float scale, int gap) {
        int available = h - mPaddingTop - mPaddingBottom;
        int thumbWidth = thumb.getIntrinsicWidth();
        int thumbHeight = thumb.getIntrinsicHeight();
        available -= thumbHeight;

        // The extra space for the thumb to move on the track
        available += mThumbOffset * 2;
        int thumbPos = (int) ((1-scale) * available);
        int leftBound, rightBound;
        if (gap == Integer.MIN_VALUE) {
                Rect oldBounds = thumb.getBounds();
            leftBound = oldBounds.left;
            rightBound = oldBounds.right;
        } else {
            leftBound = gap;
            rightBound = gap + thumbWidth;
        }

        // Canvas will be translated, so 0,0 is where we start drawing
        thumb.setBounds(leftBound, thumbPos, rightBound, thumbPos + thumbHeight);
    }

a così:
Codice (Java): [Seleziona]
    private void setThumbPos(int h, int w, Drawable thumb, float scale, int gap) {
        int available = h - mPaddingTop - mPaddingBottom;
        int thumbWidth = w;
        int thumbHeight = thumb.getIntrinsicHeight();
        available -= thumbHeight;

        // The extra space for the thumb to move on the track
        available += mThumbOffset * 2;
        int thumbPos = (int) ((1-scale) * available);
        int leftBound, rightBound;
        if (gap == Integer.MIN_VALUE) {
                Rect oldBounds = thumb.getBounds();
            leftBound = oldBounds.left;
            rightBound = oldBounds.right;
        } else {
            leftBound = 0;
            rightBound = thumbWidth;
        }

        // Canvas will be translated, so 0,0 is where we start drawing
        thumb.setBounds(leftBound, thumbPos, rightBound, thumbPos + thumbHeight);
    }

Il risultato che ottengo è che ora il thumb viene ridimensionato insieme alla barra correttamente, ma risulta "stiracchiato", come se non fosse un draw9patch ma una png normale.
Qualcuno ha delle idee? Per piacere chiedo veramente aiuto perché su questo argomento non so davvero niente ed è l'ultima cosa che mi separa dalla consegna del progetto...sono disperato!!!  :'( :'( :'(

allego il progetto che ho "rubato", anche se già linkato nell'altro post. Eccolo

Grazie a chiunque tenterà almeno di rispondere...
« Ultima modifica: 21 Luglio 2010, 10:48:30 CEST da ScarfaceIII »