2012-12-07 8 views
5

Sto utilizzando un controller Android seekBar come controller di zoom della fotocamera.Posso utilizzare setProgress per modificare una barra di ricerca in modo programmatico

La barra di ricerca funziona come un fascino durante il trascinamento ma volevo aggiungere un pulsante zoomIn e zoomOut che incrementerebbe il progresso. Il problema è due volte.

  1. Quando clicco il bottone devo clic su di esso 4 volte prima che il progresso incrementa in realtà

  2. Non sta aggiornando il pollice trascinabile sulla barra di avanzamento

    btn_zoomIn.setOnClickListener(new View.OnClickListener() { 
        public void onClick(View view) { 
        try { 
         zoomCtrl.setProgress(zoomCtrl.getProgress()+1); 
         onProgressChanged(zoomCtrl, zoomCtrl.getProgress(), true); 
        } catch(Exception ex) { } 
        } 
    }); 
    
    btn_zoomOut.setOnClickListener(new View.OnClickListener() { 
        public void onClick(View view) { 
        try { 
         zoomCtrl.setProgress(zoomCtrl.getProgress()-1); 
        } catch(Exception ex){ } 
        } 
    }); 
    

Qualcuno può aiutare, per favore?

AGGIUNTA:

Questa è la classe verticalSeekBar sto usando al posto del seekBar:

public class VerticalSeekBar extends SeekBar { 

/** 
* Instantiates a new vertical seek bar. 
* 
* @param context the context 
*/ 
public VerticalSeekBar(Context context) { 

    super(context); 
} 

/** 
* Instantiates a new vertical seek bar. 
* 
* @param context the context 
* @param attrs the attrs 
* @param defStyle the def style 
*/ 
public VerticalSeekBar(Context context, AttributeSet attrs, int defStyle) { 

    super(context, attrs, defStyle); 
} 

/** 
* Instantiates a new vertical seek bar. 
* 
* @param context the context 
* @param attrs the attrs 
*/ 
public VerticalSeekBar(Context context, AttributeSet attrs) { 

    super(context, attrs); 
} 

/* (non-Javadoc) 
* @see android.widget.AbsSeekBar#onSizeChanged(int, int, int, int) 
*/ 
protected void onSizeChanged(int w, int h, int oldw, int oldh) { 

    super.onSizeChanged(h, w, oldh, oldw); 
} 

/* (non-Javadoc) 
* @see android.widget.AbsSeekBar#onMeasure(int, int) 
*/ 
@Override 
protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 

    super.onMeasure(heightMeasureSpec, widthMeasureSpec); 
    setMeasuredDimension(getMeasuredHeight(), getMeasuredWidth()); 
} 

/* (non-Javadoc) 
* @see android.widget.AbsSeekBar#onDraw(android.graphics.Canvas) 
*/ 
protected void onDraw(Canvas c) { 

    c.rotate(-90); 
    c.translate(-getHeight(), 0); 

    super.onDraw(c); 
} 

/* (non-Javadoc) 
* @see android.widget.AbsSeekBar#onTouchEvent(android.view.MotionEvent) 
*/ 
@Override 
public boolean onTouchEvent(MotionEvent event) { 

    if (!isEnabled()) { 
     return false; 
    } 

    switch (event.getAction()) { 
    case MotionEvent.ACTION_DOWN: 
    case MotionEvent.ACTION_MOVE: 
    case MotionEvent.ACTION_UP: 
     setProgress(getMax() - (int) (getMax() * event.getY()/getHeight())); 
     onSizeChanged(getWidth(), getHeight(), 0, 0); 
     break; 

    case MotionEvent.ACTION_CANCEL: 
     break; 
    } 
    return true; 
} 

}

e sto aggiungendolo alla mia attività in questo modo:

zoomCtrl = new VerticalSeekBar(this); 
     zoomCtrl.setLayoutParams(zCtrl); 

     zoomCtrl.setProgressDrawable(getResources().getDrawable(R.drawable.zoombar_progress_bg)); 
     zoomCtrl.setThumb(getResources().getDrawable(R.drawable.imagebtn_zoom_thumb)); 
     zoomCtrl.setBackgroundDrawable(getResources().getDrawable(R.drawable.zoom_track)); 
     zoomCtrl.setPadding(25, 0, 25, 0); 
     zoomCtrl.setOnSeekBarChangeListener(this); 


     rel.addView(zoomCtrl); 
+0

seekbar.setProgress (seekbar.getProgress() + 5) e seekbar.setOffsetThumb (INT di offset) o seekbar.setThumb (drawable) – Tobrun

+0

setThumb()? è già impostato .. setThumbOffset()? come posso determinare l'offset int? – erik

+0

in realtà non voglio resettare l'offset .. questo non va bene – erik

risposta

8

Risolto il problema sovrascrivendo s etProgress nella classe VerticalSeekbar. @Override public synchronized void setProgress(int progress) { super.setProgress(progress); onSizeChanged(getWidth(), getHeight(), 0, 0); }

+0

Risolto il mio problema :) –

+0

collegamento davvero ottimo. –

3

Crea aggiornamentoThumb(); Procedimento VerticalSeekbar

public void updateThumb(){ 
     onSizeChanged(getWidth(), getHeight(), 0, 0); 
    } 

E quindi chiamare metodo pollice aggiornamento dopo l'impostazione di avanzamento.

seekBar.setProgress(100 - (int) progress); 
seekBar.updateThumb(); 
Problemi correlati