2012-12-07 20 views
5

Używam androida seekBar jako kontrolera powiększenia kamery.Czy mogę użyć polecenia setProgress do zmiany paska wyszukiwania programowo?

Pasek przewijania działa podczas przeciągania jak urok, ale chciałem dodać przycisk zoomIn i zoomOut, które zwiększałyby postęp. Problem jest dwojaki.

  1. Kiedy klikam przycisk muszę kliknij go 4 razy zanim postęp rzeczywiście zwiększa

  2. To nie jest aktualizowanie Draggable kciukiem na pasku postępu

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

Czy ktoś może pomóc?

Ponadto:

to jest klasa verticalSeekBar używam zamiast 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; 
} 

}

i dodaję go do mojej działalności tak:

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) i seekbar.setOffsetThumb (int offset) lub seekbar.setThumb (odkształcalne) – Tobrun

+0

setThumb()? jest już ustawiony. setThumbOffset()? jak określić offset int? – erik

+0

w rzeczywistości nie chcę resetować przesunięcia .. to nie jest dobre – erik

Odpowiedz

8

Rozwiązano problem przez przesłanianie s etProgress w klasie VerticalSeekbar. @Override public synchronized void setProgress(int progress) { super.setProgress(progress); onSizeChanged(getWidth(), getHeight(), 0, 0); }

+0

Rozwiązałem mój problem :) –

+0

Naprawdę świetny link. –

3

Utwórz updateThumb(); Metoda w VerticalSeekbar

A następnie wywołaj metodę aktualizacji kciuka po ustawieniu postępu.

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