2012-12-07 11 views
5

Ich benutze ein Android seekBar als Kamera Zoom Controller.Kann ich setProgress benutzen, um eine Suchleiste programmatisch zu ändern

Die Suchleiste funktioniert beim Ziehen wie ein Zauber, aber ich wollte eine ZoomIn und ZoomOut Taste hinzufügen, die den Fortschritt erhöhen würde. Das Problem ist zweifach.

  1. Wenn ich auf die Schaltfläche Ich habe es 4 mal klicken, bevor der Fortschritt tatsächlich

    erhöht
  2. Es ist nicht die ziehbar Daumen auf dem Fortschrittsbalken zu aktualisieren

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

Kann mir bitte jemand helfen?

ADDITION:

ist dies die verticalSeekBar Klasse i statt seekBar bin mit:

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

}

und ich bin Zugabe zu meiner Tätigkeit wie folgt:

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) und seekbar.setOffsetThumb (int Offset) oder seekbar.setThumb (ziehbar) – Tobrun

+0

setThumb()? es ist bereits gesetzt .. setThumbOffset()? Wie ermittle ich Offset int? – erik

+0

eigentlich möchte ich nicht den Offset zurücksetzen .. das ist nicht gut – erik

Antwort

8

Das Problem wurde behoben, indem s außer Kraft gesetzt wurde etProgress in der VerticalSeekbar-Klasse. @Override public synchronized void setProgress(int progress) { super.setProgress(progress); onSizeChanged(getWidth(), getHeight(), 0, 0); }

+0

Mein Problem gelöst :) –

+0

wirklich toller Link. –

3

Erstellen updateThumb(); Methode in VerticalSeekbar

Und dann rufen Sie Update-Daumen-Methode nach dem Einstellen des Fortschritts.

seekBar.setProgress(100 - (int) progress); 
seekBar.updateThumb(); 
Verwandte Themen