2012-12-07 30 views
5

Tôi đang sử dụng android seekBar làm bộ điều khiển thu phóng của máy ảnh.Tôi có thể sử dụng setProgress để thay đổi thanh tìm kiếm theo cách lập trình

Thanh tìm kiếm hoạt động như một nét duyên dáng khi kéo nhưng tôi muốn thêm nút phóng to và thu phóng để tăng tiến trình. Vấn đề là hai lần.

  1. Khi tôi bấm vào nút Tôi phải nhấp vào nó 4 lần trước khi tiến độ thực increments

  2. Nó không được cập nhật các ngón tay cái kéo trên thanh tiến độ

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

Ai có thể giúp tôi không?

ADDITION:

này là lớp verticalSeekBar tôi đang sử dụng thay vì 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; 
} 

}

và tôi đang thêm nó vào hoạt động của tôi như vậy:

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) và seekbar.setOffsetThumb (int offset) hoặc seekbar.setThumb (drawable) – Tobrun

+0

setThumb()? của nó đã được thiết lập .. setThumbOffset()? làm thế nào để tôi xác định bù đắp int? – erik

+0

thực sự tôi không muốn đặt lại bù đắp .. thats không tốt – erik

Trả lời

8

Giải quyết vấn đề bằng cách ghi đè s etProgress trong lớp VerticalSeekbar. @Override public synchronized void setProgress(int progress) { super.setProgress(progress); onSizeChanged(getWidth(), getHeight(), 0, 0); }

+0

Giải quyết vấn đề của tôi :) –

+0

liên kết thực sự tuyệt vời. –

3

Tạo bản cập nhậtThumb(); phương pháp trong VerticalSeekbar

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

Và sau đó gọi phương thức ngón tay cái cập nhật sau khi thiết lập tiến trình.

seekBar.setProgress(100 - (int) progress); 
seekBar.updateThumb(); 
Các vấn đề liên quan