2012-12-07 12 views
5

बदलने के लिए सेट प्रोग्रेस का उपयोग कर सकता हूं, मैं कैमरा ज़ूम नियंत्रक के रूप में एंड्रॉइड seekBar का उपयोग कर रहा हूं।क्या मैं एक खोज बार को प्रोग्रामेटिक रूप से

खोज बार ड्रैग करते समय एक आकर्षण की तरह काम करता है लेकिन मैं ज़ूम इन और ज़ूमऑट बटन जोड़ना चाहता हूं जो प्रगति में वृद्धि करेगा। समस्या दो गुना है।

  1. जब मैं बटन मैं इसे क्लिक करने के लिए 4 बार से पहले प्रगति वास्तव में वृद्धि कर देता है

  2. यह प्रगति बार

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

पर खींचने योग्य अंगूठे अपडेट नहीं हो रहा है क्लिक करें क्या कोई मदद कर सकता है?

अलावा:

यह है verticalSeekBar वर्ग मैं 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; 
} 

}

और मैं तो जैसे मेरी गतिविधि में जोड़ने से कर रहा हूँ:

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) और seekbar.setOffsetThumb (ऑफसेट पूर्णांक) या seekbar.setThumb (drawable) – Tobrun

+0

setThumb()? यह पहले से ही सेट है .. setThumbOffset()? मैं इंट ऑफसेट कैसे निर्धारित करूं? – erik

+0

असल में मैं ऑफ़सेट रीसेट नहीं करना चाहता .. यह अच्छा नहीं है – erik

उत्तर

8

ओवरराइडिंग द्वारा समस्या हल वर्टिकलसेकबर कक्षा में etProgress। @Override public synchronized void setProgress(int progress) { super.setProgress(progress); onSizeChanged(getWidth(), getHeight(), 0, 0); }

+0

मेरी समस्या हल हो गई है :) –

+0

वास्तव में महान लिंक। –

3

अद्यतन थंब(); वर्टिकलसेकबार में विधि

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

और फिर प्रगति सेट करने के बाद अद्यतन अंगूठे विधि को कॉल करें।

seekBar.setProgress(100 - (int) progress); 
seekBar.updateThumb(); 
संबंधित मुद्दे