Turkcell | Geleceği Yazanlar

Soru & Cevap

Seekbar'ın sadece thumb image ile değiştirilmesi sağlama

12.03.2014 - 11:08

Horizontal bir listview içinde vertical bir seekBar kullanıyorum. Seekbar da default olarak progressDrawable alanında herhangi bir yere dokununca OnSeekBarChangeListener event tetiklenmekte ve thumb image dokunulan yere konumlanmakta. Horizontal listview de sağa veya  sola scroll yapmaya çalışınca seekBar a dokunulduğu için değeri değişiyor. Ben sadece thumb image a dokunup değerinin değiştirilmesini istiyorum. Yani seekbar da thumb image dışında herhangi bir yere dokunulunca değerinin sabit kalması gerekiyor. Bunu nasıl engelleyebiliriz. Teşekkürler.

[code]

public class VerticalSeekBar extends SeekBar {

 

    public VerticalSeekBar(Context context) {

        super(context);

    }

 

    public VerticalSeekBar(Context context, AttributeSet attrs, int defStyle) {

        super(context, attrs, defStyle);

    }

 

    public VerticalSeekBar(Context context, AttributeSet attrs) {

        super(context, attrs);

    }

 

    protected void onSizeChanged(int w, int h, int oldw, int oldh) {

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

    }

 

    @Override

    protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

        super.onMeasure(heightMeasureSpec, widthMeasureSpec);

        setMeasuredDimension(getMeasuredHeight(), getMeasuredWidth());

    }

 

    protected void onDraw(Canvas c) {

        c.rotate(-90);

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

 

        super.onDraw(c);

    }

 

    @Override

    public boolean onTouchEvent(MotionEvent event) {

        if (!isEnabled()) {

            return false;

        }

 

        switch (event.getAction()) {

            case MotionEvent.ACTION_DOWN:

            case MotionEvent.ACTION_UP:

            case MotionEvent.ACTION_MOVE:

                int i=0;

                i=getMax() - (int) (getMax() * event.getY() / getHeight());

                setProgress(i);

                onSizeChanged(getWidth(), getHeight(), 0, 0);

                break;

 

            case MotionEvent.ACTION_CANCEL:

                break;

        }

        return true;

    }

    

    Drawable mThumb;

    

    @Override

    public void setThumb(Drawable thumb) {

        super.setThumb(thumb);

        mThumb = thumb;

    }

    public Drawable getSeekBarThumb() {

        return mThumb;

    }

    

    public void updateThumb(){

        onSizeChanged(getWidth(), getHeight(), 0, 0);

   }

}

[/code]

2301 Görüntülenme

1 Cevap

Osman Soykan
13.03.2014 - 17:54

Sorunumu aşağıdaki şekilde çözebildim, belki ihtiyacı olan olabilir. Touch yapılan yer thumb image dışında ise işlem yaptırmıyorum.

 

                holder.vertical_seekBar.setOnTouchListener(new OnTouchListener() {

                    @Override

                    public boolean onTouch(View v, MotionEvent event) {                        

                        if(event.getAction() == MotionEvent.ACTION_MOVE ||

                                event.getAction() == MotionEvent.ACTION_UP ||

                                event.getAction() == MotionEvent.ACTION_DOWN){

                            Rect seekBarThumbRect = holder.vertical_seekBar.getSeekBarThumb().getBounds();

                            int seekBarHeight = holder.vertical_seekBar.getHeight();

                            if(seekBarThumbRect.left - (seekBarThumbRect.right - seekBarThumbRect.left) / 2 < (Math.abs(seekBarHeight - event.getY())) &&

                                    seekBarThumbRect.right + (seekBarThumbRect.right - seekBarThumbRect.left) / 2 > (Math.abs(seekBarHeight - event.getY())) &&

                                    seekBarThumbRect.top < event.getX() &&

                                    seekBarThumbRect.bottom > event.getX())

                                            return false;

                        }

                        return true;

                    }

                });

Sitede yorum yapabilmek için giriş yapın ya da üye olun.

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.